10#ifndef HAPI_hpp_included
11#define HAPI_hpp_included 1
21#define HAPI_USE_PUGIXML 1
23#ifdef HAPI_USE_PUGIXML
64 inline std::string
const value()
const;
82 Text(std::string
const &a_text);
84 std::string
const &
get()
const {
return( m_text ); }
100 virtual void getInts(nf_Buffer<int> &buffer) = 0;
130 virtual std::string
name()
const = 0;
137inline std::string
const Attribute::value()
const {
return( m_node->attribute( m_name.c_str()) ); }
157 void getInts(nf_Buffer<int> &buffer);
180 if(m_node ==
nullptr){
183 return m_node->attribute(a_name);
186 if(m_node ==
nullptr){
189 return m_node->attribute_as_int(a_name);
192 if(m_node ==
nullptr){
195 return m_node->attribute_as_long(a_name);
198 if(m_node ==
nullptr){
201 return m_node->attribute_as_double(a_name);
208 std::string
name()
const;
227 virtual std::string
name()
const = 0;
244 virtual void getDoubles(nf_Buffer<double> &result,
size_t startIndex,
size_t endIndex) = 0;
245 virtual void getInts(nf_Buffer<int> &result,
size_t startIndex,
size_t endIndex) = 0;
249#ifdef HAPI_USE_PUGIXML
306 PugiXMLFile(
char const *filename, std::string
const &a_callingFunctionName);
328class HDFNode :
public Node_internal {
334 std::vector<childInfo> m_siblings;
335 std::vector<childInfo> m_children;
339 HDFNode(hid_t a_node_id, hid_t a_parent_id,
size_t a_index, std::vector<childInfo> a_siblings);
340 explicit HDFNode(hid_t a_file_id);
341 HDFNode(
const HDFNode &other);
345 std::string attribute(
const char* name);
346 int attribute_as_int(
const char* name);
347 long attribute_as_long(
const char* name);
348 double attribute_as_double(
const char* name);
349 Node_internal *child(
char const *name);
350 Node_internal *first_child();
351 Node_internal *next_sibling();
352 void to_next_sibling();
353 Node_internal *copy();
354 Node_internal &
operator=(
const HDFNode &other);
355 std::string name()
const;
358 Data_internal *data()
const;
366 hid_t m_dataspace_id;
371 explicit HDFData(hid_t node_id);
373 void getDoubles(nf_Buffer<double> &buffer);
374 void getInts(nf_Buffer<int> &buffer);
375 size_t length()
const;
378class HDFFile :
public File {
383 HDFNode *m_doc_as_node;
387 explicit HDFFile(
char const *filename);
389 Node child(
char const *name);
391 std::string
name()
const;
397 std::string m_filename;
401 hid_t m_dataset_ints, m_dataset_doubles;
402 hid_t m_dataspace_ints, m_dataspace_doubles;
404 hsize_t m_stride[1], m_block[1];
406 size_t m_num_double_reads;
407 size_t m_num_double_elem;
408 size_t m_num_int_reads;
409 size_t m_num_int_elem;
412 HDFDataManager(std::string
const &filename);
413 virtual ~HDFDataManager();
414 virtual void getDoubles(nf_Buffer<double> &result,
size_t startIndex,
size_t endIndex);
415 virtual void getInts(nf_Buffer<int> &result,
size_t startIndex,
size_t endIndex);
G4PVDivision & operator=(const G4PVDivision &)=delete
std::string const value() const
Attribute(Node_internal *a_node, std::string const &a_name)
virtual void getInts(nf_Buffer< int > &result, size_t startIndex, size_t endIndex)=0
static DataManager * m_instance
virtual void getDoubles(nf_Buffer< double > &result, size_t startIndex, size_t endIndex)=0
virtual void getDoubles(nf_Buffer< double > &buffer)=0
virtual size_t length() const =0
virtual ~Data_internal()=0
virtual void getInts(nf_Buffer< int > &buffer)=0
void getDoubles(nf_Buffer< double > &buffer)
void getInts(nf_Buffer< int > &buffer)
virtual Node first_child()=0
virtual std::string name() const =0
virtual Node child(const char *name)=0
virtual bool empty() const =0
NodeInteralType type() const
virtual void to_next_sibling()=0
virtual double attribute_as_double(const char *name)=0
virtual Data_internal * data() const =0
virtual ~Node_internal()=0
virtual Node_internal * child(const char *name)=0
virtual std::string name() const =0
virtual int attribute_as_int(const char *name)=0
virtual Node_internal * next_sibling()=0
virtual long attribute_as_long(const char *name)=0
virtual Text text() const =0
virtual Node_internal * first_child()=0
Node_internal(NodeInteralType a_type)
virtual std::string attribute(const char *name)=0
virtual Node_internal * copy()=0
Node next_sibling() const
long attribute_as_long(const char *a_name) const
double attribute_as_double(const char *a_name) const
std::string attribute_as_string(const char *a_name) const
void to_next_sibling() const
Node & operator=(const Node &other)
Node child(const char *name) const
int attribute_as_int(const char *a_name) const
Attribute attribute(const char *a_name) const
PugiXMLData(pugi::xml_node a_node)
void getDoubles(nf_Buffer< double > &buffer)
void getInts(nf_Buffer< int > &buffer)
PugiXMLFile(char const *filename, std::string const &a_callingFunctionName)
Node child(char const *name)
int attribute_as_int(const char *name)
PugiXMLNode(const PugiXMLNode &other)
Data_internal * data() const
Node_internal * first_child()
long attribute_as_long(const char *name)
Node_internal * child(char const *name)
Node_internal * next_sibling()
double attribute_as_double(const char *name)
Node_internal & operator=(const PugiXMLNode &other)
PugiXMLNode(pugi::xml_node a_node)
std::string attribute(const char *name)
std::string const & get() const
const char * name(G4int ptype)