Belle II Software  release-05-02-19
NSMData.h
1 #ifndef _Belle2_NSMData_hh
2 #define _Belle2_NSMData_hh
3 
4 #include <daq/slc/base/AbstractDBObject.h>
5 
6 extern "C" {
7 #include <nsm2/nsm2.h>
8 #if NSM_PACKAGE_VERSION >= 1914
9 #include <nsm2/nsmparse.h>
10 #endif
11 }
12 
13 #include <map>
14 #include <vector>
15 
16 namespace Belle2 {
22  class NSMCommunicator;
23 
24  class NSMData : public AbstractDBObject {
25 
26  typedef std::vector<NSMData> NSMDataList;
27  typedef std::map<std::string, NSMDataList> NSMDataListMap;
28 
29  public:
30  struct NameValue {
31  std::string name;
32  std::string value;
33  void* buf;
34  DBField::Type type;
35  };
36  typedef std::vector<NameValue> NameValueList;
37 
38  public:
39  NSMData(const std::string& dataname,
40  const std::string& format, int revision);
41  NSMData();
42  NSMData(const NSMData& data);
43  virtual ~NSMData();
44 
45  private:
46  NSMData(void* pdata, const NSMData& data);
47  NSMData(void* pdata, const std::string& dataname,
48  const std::string& format, int revision);
49 
50  public:
51  int getRevision() const { return m_revision; }
52  const std::string& getFormat() const { return m_format; }
53  int getSize() const { return m_size; }
54  void setRevision(int revision) { m_revision = revision; }
55  void setFormat(const std::string& format) { m_format = format; }
56  void setSize(int size) { m_size = size; }
57  bool isAvailable() { return (m_pdata != NULL); }
58  void* open(NSMCommunicator& comm);
59  void* allocate(NSMCommunicator& comm, int interval = 2);
60  void flush();
61  void* get() { return m_pdata; }
62  const void* get() const { return m_pdata; }
63  void* parse(const char* inc_dir = NULL, bool allocated = false);
64 
65  int getNObjects(const std::string& name) const;
66  const NSMDataList& getObjects(const std::string& name) const;
67  NSMDataList& getObjects(const std::string& name);
68  const NSMData& getObject(const std::string& name, int index = 0) const;
69  NSMData& getObject(const std::string& name, int index = 0);
70 
71  void print(const std::string& name_in = "") const;
72  void printPV(const std::string& name_in = "") const;
73  const void* find(const std::string& name_in, DBField::Type& type, int& length) const;
74  void search(NameValueList& map, const std::string& name = "") const;
75 
76  public:
77  virtual void* getValue(const std::string& name);
78  virtual const void* getValue(const std::string& name) const;
79  virtual void setValue(const std::string& name, const void* value, int size);
80  virtual void addValue(const std::string& name, const void* value,
81  DBField::Type type, int length = 0);
82  virtual const std::string& getText(const std::string&) const { return m_empty; }
83  virtual void addText(const std::string&, const std::string&) {}
84 
85  public:
86  virtual void readObject(Reader& reader);
87  virtual void writeObject(Writer& writer) const;
88 
89  protected:
90  virtual void reset();
91 
92  private:
93  void set(void* pdata) { m_pdata = pdata; }
94  int initProperties();
95 #if NSM_PACKAGE_VERSION >= 1914
96  NSMparse* parse(NSMparse* ptr, int& length,
97  std::string& name_in);
98 #endif
99 
100  private:
101  bool m_allocated;
102  void* m_pdata;
103  int m_size;
104  int m_offset;
105  std::string m_format;
106  int m_revision;
107  NSMDataListMap m_data_v_m;
108  std::string m_empty;
109  NSMCommunicator* m_com;
110  int m_tstamp;
111 
112  };
113 
114  typedef std::vector<NSMData> NSMDataList;
115  typedef std::map<std::string, NSMDataList> NSMDataListMap;
116 
118 }
119 
120 #endif
Belle2::NSMData
Definition: NSMData.h:24
NSMparse_struct
Definition: nsmparse.h:13
Belle2::AbstractDBObject
Definition: AbstractDBObject.h:18
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::NSMData::NameValue
Definition: NSMData.h:30