Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RColumnModel.hxx
Go to the documentation of this file.
1 /// \file ROOT/RColumnModel.hxx
2 /// \ingroup NTuple ROOT7
3 /// \author Jakob Blomer <jblomer@cern.ch>
4 /// \date 2018-10-09
5 /// \warning This is part of the ROOT 7 prototype! It will change without notice. It might trigger earthquakes. Feedback
6 /// is welcome!
7 
8 /*************************************************************************
9  * Copyright (C) 1995-2019, Rene Brun and Fons Rademakers. *
10  * All rights reserved. *
11  * *
12  * For the licensing terms see $ROOTSYS/LICENSE. *
13  * For the list of contributors see $ROOTSYS/README/CREDITS. *
14  *************************************************************************/
15 
16 #ifndef ROOT7_RColumnModel
17 #define ROOT7_RColumnModel
18 
19 #include <ROOT/RStringView.hxx>
20 
21 #include <string>
22 
23 namespace ROOT {
24 namespace Experimental {
25 
26 // clang-format off
27 /**
28 \class ROOT::Experimental::EColumnType
29 \ingroup NTuple
30 \brief The available trivial, native content types of a column
31 
32 More complex types, such as classes, get translated into columns of such simple types by the RField.
33 */
34 // clang-format on
35 enum class EColumnType {
36  kUnknown = 0,
37  // type for root columns of (nested) collections; 32bit integers that count relative to the current cluster
38  kIndex,
39  // 64 bit column that uses the lower 32bits as kIndex and the higher 32bits as a dispatch tag; used, e.g.,
40  // in order to serialize std::variant
41  kSwitch,
42  kByte,
43  kBit,
44  kReal64,
45  kReal32,
46  kReal16,
47  kReal8,
48  kInt64,
49  kInt32,
50  kInt16,
51 };
52 
53 // clang-format off
54 /**
55 \class ROOT::Experimental::RColumnModel
56 \ingroup NTuple
57 \brief Holds the static meta-data of a column in a tree
58 */
59 // clang-format on
60 class RColumnModel {
61 private:
62  EColumnType fType;
63  bool fIsSorted;
64 
65 public:
66  RColumnModel() : fType(EColumnType::kUnknown), fIsSorted(false) {}
67  RColumnModel(EColumnType type, bool isSorted) : fType(type), fIsSorted(isSorted) {}
68 
69  EColumnType GetType() const { return fType; }
70  bool GetIsSorted() const { return fIsSorted; }
71 
72  bool operator ==(const RColumnModel &other) const {
73  return (fType == other.fType) && (fIsSorted == other.fIsSorted);
74  }
75 };
76 
77 } // namespace Experimental
78 } // namespace ROOT
79 
80 #endif