OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
file.hpp
Go to the documentation of this file.
1 //
2 // Copyright & License: See Copyright.readme in src directory
3 //
4 
9 #ifndef FILE_HPP_
10 #define FILE_HPP_
11 
12 #include "ast.hpp"
13 #include "skipper.hpp"
14 #include "error_handler.hpp"
15 #include "version.hpp"
16 #include "description.hpp"
17 #include "parameter.hpp"
18 #include "column.hpp"
19 #include "data.hpp"
20 #include "associate.hpp"
21 #include "array.hpp"
22 #include "include.hpp"
23 
24 #include <boost/config/warning_disable.hpp>
25 #include <boost/spirit/include/qi.hpp>
26 #include <boost/fusion/include/adapt_struct.hpp>
27 #include <boost/optional.hpp>
28 
29 #define BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
30 #define BOOST_SPIRIT_QI_DEBUG
31 
32 namespace SDDS {
33  struct file
34  {
36  boost::optional<description> sddsDescription_m; // 1
43 
44  void clear() {
45  sddsParameters_m.clear();
46  sddsColumns_m.clear();
47  sddsAssociates_m.clear();
48  sddsArrays_m.clear();
49  sddsIncludes_m.clear();
50  }
51  };
52 
53  inline std::ostream& operator<<(std::ostream& out, const file& fh) {
54  out << fh.sddsVersion_m << "\n";
55  if (fh.sddsDescription_m) out << *fh.sddsDescription_m << "\n";
56  for (const parameter& param: fh.sddsParameters_m) {
57  out << param << "\n";
58  }
59  for (const column& col: fh.sddsColumns_m) {
60  out << col << "\n";
61  }
62  out << fh.sddsData_m << "\n";
63 
64 // if (fh.sddsAssociates_m) out << *fh.sddsAssociates_m << "\n";
65 // if (fh.sddsArrays_m) out << *fh.sddsArrays_m << "\n";
66 // if (fh.sddsIncludes_m) out << *fh.sddsIncludes_m << "\n";
67 
68  out << std::endl;
69 
70  return out;
71  }
72 }
73 
75  SDDS::file,
76  (SDDS::version, sddsVersion_m)
77  (boost::optional<SDDS::description>, sddsDescription_m)
78  (SDDS::parameterList, sddsParameters_m)
79  (SDDS::columnList, sddsColumns_m)
80  (SDDS::data, sddsData_m)
81  (SDDS::associateList, sddsAssociates_m)
82  (SDDS::arrayList, sddsArrays_m)
83  (SDDS::includeList, sddsIncludes_m)
84 )
85 
86 namespace SDDS { namespace parser
87 {
88  namespace qi = boost::spirit::qi;
89  namespace ascii = boost::spirit::ascii;
90  namespace phx = boost::phoenix;
91 
92  template <typename Iterator>
93  struct file_parser: qi::grammar<Iterator, file(), skipper<Iterator> >
94  {
95  file_parser(error_handler<Iterator> & _error_handler);
96 
97  version_parser<Iterator> version_m;
98  description_parser<Iterator> description_m;
99  parameter_parser<Iterator> parameter_m;
100  column_parser<Iterator> column_m;
101  data_parser<Iterator> data_m;
102  associate_parser<Iterator> associate_m;
103  array_parser<Iterator> array_m;
104  include_parser<Iterator> include_m;
105  qi::rule<Iterator, file(), skipper<Iterator> > start;
106  };
107 }}
108 #endif /* FILE_HPP_ */
arrayList sddsArrays_m
Definition: file.hpp:41
void clear()
Definition: file.hpp:44
associateList sddsAssociates_m
Definition: file.hpp:40
BOOST_FUSION_ADAPT_STRUCT(SDDS::column,(boost::optional< std::string >, name_m)(boost::optional< SDDS::ast::datatype >, type_m)(boost::optional< std::string >, units_m)(boost::optional< std::string >, description_m)(SDDS::ast::variant_t, value_m)) namespace SDDS
Definition: column.hpp:173
includeList sddsIncludes_m
Definition: file.hpp:42
parameterList sddsParameters_m
Definition: file.hpp:37
version sddsVersion_m
Definition: file.hpp:35
columnList sddsColumns_m
Definition: file.hpp:38
boost::optional< description > sddsDescription_m
Definition: file.hpp:36
std::ostream & operator<<(std::ostream &out, const array &)
Definition: array.hpp:89
Inform & endl(Inform &inf)
Definition: Inform.cpp:42
data sddsData_m
Definition: file.hpp:39