13 #ifndef ROOT7_REveDataClasses 
   14 #define ROOT7_REveDataClasses 
   25 namespace Experimental {
 
   31 class REveDataCollection : 
public REveElement
 
   34    typedef std::vector<int> Ids_t;
 
   37    std::function<void (REveDataCollection*)>               _handler_func;
 
   38    std::function<void (REveDataCollection*, const Ids_t&)> _handler_func_ids;
 
   41    static Color_t fgDefaultColor;
 
   43    TClass *fItemClass{
nullptr}; 
 
   47       void *fDataPtr{
nullptr};
 
   48       REveDataItem *fItemPtr{
nullptr};
 
   50       ItemInfo_t() = 
default;
 
   51       ItemInfo_t(
void *dp, REveDataItem *di) : fDataPtr(dp), fItemPtr(di) {}
 
   54    std::vector<ItemInfo_t> fItems;
 
   57    std::function<bool(void *)> fFilterFoo = [](
void *) { 
return true; };
 
   59    REveDataCollection(
const std::string& n = 
"REveDataCollection", 
const std::string& t = 
"");
 
   60    virtual ~REveDataCollection() {}
 
   62    TClass *GetItemClass()
 const { 
return fItemClass; }
 
   63    void SetItemClass(TClass *cls) { fItemClass = cls; }
 
   65    void ReserveItems(Int_t items_size) { fItems.reserve(items_size); }
 
   66    void AddItem(
void *data_ptr, 
const std::string& n, 
const std::string& t);
 
   67    void ClearItems() { fItems.clear(); }
 
   69    void SetFilterExpr(
const TString &filter);
 
   72    Int_t GetNItems()
 const { 
return (Int_t)fItems.size(); }
 
   73    void *GetDataPtr(Int_t i)
 const { 
return fItems[i].fDataPtr; }
 
   74    REveDataItem *GetDataItem(Int_t i)
 const { 
return fItems[i].fItemPtr; }
 
   76    Int_t WriteCoreJson(nlohmann::json &cj, Int_t rnr_offset) 
override;
 
   78    virtual void SetCollectionColorRGB(UChar_t r, UChar_t g, UChar_t b);
 
   79    virtual void SetCollectionVisible(
bool);
 
   80    virtual void ItemChanged(REveDataItem *item);
 
   82    void SetHandlerFunc (std::function<
void (REveDataCollection*)> handler_func)
 
   84       _handler_func = handler_func;
 
   86    void SetHandlerFuncIds (std::function<
void (REveDataCollection*, 
const Ids_t&)> handler_func)
 
   88       _handler_func_ids= handler_func;
 
   94 class REveDataItem : 
public REveElement,
 
   98    Bool_t fFiltered{
false};
 
  101    REveDataItem(
const std::string& n = 
"REveDataItem", 
const std::string& t = 
"");
 
  102    virtual ~REveDataItem() {}
 
  104    Bool_t GetFiltered()
 const { 
return fFiltered; }
 
  105    void   SetFiltered(Bool_t f);
 
  107    virtual void SetItemColorRGB(UChar_t r, UChar_t g, UChar_t b);
 
  108    virtual void SetItemRnrSelf(
bool);
 
  110    virtual void FillImpliedSelectedSet(Set_t& impSelSet) 
override;
 
  112    Int_t WriteCoreJson(nlohmann::json &cj, Int_t rnr_offset) 
override;
 
  117 class REveDataTable : 
public REveElement
 
  120    const REveDataCollection *fCollection{
nullptr};
 
  123    REveDataTable(
const std::string& n = 
"REveDataTable", 
const std::string& t = 
"");
 
  124    virtual ~REveDataTable() {}
 
  126    void SetCollection(
const REveDataCollection *col) { fCollection = col; }
 
  127    const REveDataCollection *GetCollection()
 const { 
return fCollection; }
 
  130    virtual Int_t WriteCoreJson(nlohmann::json &cj, Int_t rnr_offset);
 
  132    void AddNewColumn(
const std::string& expr, 
const std::string& title, 
int prec = 2);
 
  137 class REveDataColumn : 
public REveElement
 
  140    enum FieldType_e { FT_Double = 0, FT_Bool, FT_String };
 
  148    std::string fTrue{
"*"};
 
  149    std::string fFalse{
" "};
 
  151    std::function<double(void *)> fDoubleFoo;
 
  152    std::function<bool(void *)> fBoolFoo;
 
  153    std::function<std::string(void *)> fStringFoo;
 
  156    REveDataColumn(
const std::string& n = 
"REveDataColumn", 
const std::string& t = 
"");
 
  157    virtual ~REveDataColumn() {}
 
  159    void SetExpressionAndType(
const std::string &expr, FieldType_e type);
 
  160    void SetPrecision(Int_t prec);
 
  162    std::string EvalExpr(
void *iptr);