LCOV - code coverage report
Current view: top level - oks/include/oks - index.hpp (source / functions) Coverage Total Hit
Test: code.result Lines: 0.0 % 5 0
Test Date: 2025-12-21 13:07:08 Functions: 0.0 % 3 0

            Line data    Source code
       1              : #ifndef __OKS_INDEX
       2              : #define __OKS_INDEX
       3              : 
       4              : #include "oks/query.hpp"
       5              : #include "oks/attribute.hpp"
       6              : #include "oks/object.hpp"
       7              : 
       8              : #include <set>
       9              : 
      10              : namespace dunedaq {
      11              : namespace oks {
      12              : class OksObjectSortBy {
      13              : 
      14              :   public:
      15              : 
      16            0 :     OksObjectSortBy     (size_t i = 0) : offset(i) {;}
      17              : 
      18            0 :     bool operator()     (const OksObject * o1, const OksObject * o2) const {
      19            0 :       return o1->data[offset] < o2->data[offset];
      20              :     }
      21              : 
      22              : 
      23              :   private:
      24              : 
      25              :     size_t offset;
      26              : 
      27              : };
      28              : 
      29              : 
      30              :  class OksIndex : public std::multiset<OksObject *, OksObjectSortBy> {
      31              :   friend class OksClass;
      32              :   friend class OksObject;
      33              : 
      34              : 
      35              :   public:
      36              : 
      37              :       // Declare map of poiters to OksIndex sorted by attribute name
      38              : 
      39              :     struct SortByName {
      40            0 :       bool operator()   (const OksAttribute * a1, const OksAttribute * a2) const {
      41            0 :         return a1->get_name() < a2->get_name();
      42              :       }
      43              :     };
      44              : 
      45              :     typedef std::map<const OksAttribute *, OksIndex *, SortByName> Map;
      46              : 
      47              :     typedef std::multiset<OksObject *, OksObjectSortBy>::iterator Position;
      48              :     typedef std::multiset<OksObject *, OksObjectSortBy>::const_iterator ConstPosition;
      49              : 
      50              : 
      51              :     OksIndex            (OksClass *, OksAttribute *);
      52              :     ~OksIndex           ();
      53              :     
      54              :     OksObject *         FindFirst(OksData *d) const;
      55              : 
      56              :     OksObject::List *   FindEqual(OksData *d) const {return find_all(d, OksQuery::equal_cmp);}
      57              :     OksObject::List *   FindLessEqual(OksData *d) const {return find_all(d, OksQuery::less_or_equal_cmp);}
      58              :     OksObject::List *   FindGreatEqual(OksData *d) const {return find_all(d, OksQuery::greater_or_equal_cmp);}
      59              :     OksObject::List *   FindLess(OksData *d) const {return find_all(d, OksQuery::less_cmp);}
      60              :     OksObject::List *   FindGreat(OksData *d) const {return find_all(d, OksQuery::greater_cmp);}
      61              : 
      62              :     OksObject::List *   FindLessAndGreat(OksData *d1, OksData *d2) const {return find_all(true, d1, OksQuery::less_cmp, d2, OksQuery::greater_cmp);}
      63              :     OksObject::List *   FindLessAndGreatEqual(OksData *d1, OksData *d2) const {return find_all(true, d1, OksQuery::less_cmp, d2, OksQuery::greater_or_equal_cmp);}
      64              :     OksObject::List *   FindLessEqualAndGreat(OksData *d1, OksData *d2) const {return find_all(true, d1, OksQuery::less_or_equal_cmp, d2, OksQuery::greater_cmp);}
      65              :     OksObject::List *   FindLessEqualAndGreatEqual(OksData *d1, OksData *d2) const {return find_all(true, d1, OksQuery::less_or_equal_cmp, d2, OksQuery::greater_or_equal_cmp);}
      66              :     OksObject::List *   FindEqualAndEqual(OksData *d1, OksData *d2) const {return find_all(true, d1, OksQuery::equal_cmp, d2, OksQuery::equal_cmp);}
      67              :     OksObject::List *   FindEqualAndLess(OksData *d1, OksData *d2) const {return find_all(true, d1, OksQuery::equal_cmp, d2, OksQuery::less_cmp);}
      68              :     OksObject::List *   FindEqualAndLessEqual(OksData *d1, OksData *d2) const {return find_all(true, d1, OksQuery::equal_cmp, d2, OksQuery::less_or_equal_cmp);}
      69              :     OksObject::List *   FindEqualAndGreat(OksData *d1, OksData *d2) const {return find_all(true, d1, OksQuery::equal_cmp, d2, OksQuery::greater_cmp);}
      70              :     OksObject::List *   FindEqualAndGreatEqual(OksData *d1, OksData *d2) const {return find_all(true, d1, OksQuery::equal_cmp, d2, OksQuery::greater_or_equal_cmp);}
      71              :     OksObject::List *   FindLessOrGreat(OksData *d1, OksData *d2) const {return find_all(false, d1, OksQuery::less_cmp, d2, OksQuery::greater_cmp);}
      72              :     OksObject::List *   FindLessOrGreatEqual(OksData *d1, OksData *d2) const {return find_all(false, d1, OksQuery::less_cmp, d2, OksQuery::greater_or_equal_cmp);}
      73              :     OksObject::List *   FindLessEqualOrGreat(OksData *d1, OksData *d2) const {return find_all(false, d1, OksQuery::less_or_equal_cmp, d2, OksQuery::greater_cmp);}
      74              :     OksObject::List *   FindLessEqualOrGreatEqual(OksData *d1, OksData *d2) const {return find_all(false, d1, OksQuery::less_or_equal_cmp, d2, OksQuery::greater_or_equal_cmp);}
      75              :     OksObject::List *   FindEqualOrEqual(OksData *d1, OksData *d2) const {return find_all(false, d1, OksQuery::equal_cmp, d2, OksQuery::equal_cmp);}
      76              :     OksObject::List *   FindEqualOrLess(OksData *d1, OksData *d2) const {return find_all(false, d1, OksQuery::equal_cmp, d2, OksQuery::less_cmp);}
      77              :     OksObject::List *   FindEqualOrLessEqual(OksData *d1, OksData *d2) const {return find_all(false, d1, OksQuery::equal_cmp, d2, OksQuery::less_or_equal_cmp);}
      78              :     OksObject::List *   FindEqualOrGreat(OksData *d1, OksData *d2) const {return find_all(false, d1, OksQuery::equal_cmp, d2, OksQuery::greater_cmp);}
      79              :     OksObject::List *   FindEqualOrGreatEqual(OksData *d1, OksData *d2) const {return find_all(false, d1, OksQuery::equal_cmp, d2, OksQuery::greater_or_equal_cmp);}
      80              : 
      81              :   private:
      82              : 
      83              :     OksClass *          c;
      84              :     OksAttribute *      a;
      85              :     size_t              offset;
      86              : 
      87              :     OksObject *         remove_obj(OksObject *);
      88              : 
      89              :     OksObject::List *   find_all(OksData *, OksQuery::Comparator) const;
      90              :     OksObject::List *   find_all(bool, OksData *, OksQuery::Comparator, OksData *, OksQuery::Comparator) const;
      91              : 
      92              :     void                find_interval(OksData *, OksQuery::Comparator, ConstPosition&, ConstPosition&) const;
      93              : 
      94              :     static size_t       get_offset(OksClass *, OksAttribute *);
      95              : 
      96              : };
      97              : } // namespace oks
      98              : } // namespace dunedaq
      99              : #endif
        

Generated by: LCOV version 2.0-1