Go to the documentation of this file.00001 #ifndef DDL_Map_H
00002 #define DDL_Map_H
00003
00004 #include "DetectorDescription/Parser/src/DDXMLElement.h"
00005 #include "DetectorDescription/Core/interface/DDMap.h"
00006
00007 #include <vector>
00008 #include <map>
00009 #include <string>
00010
00011
00012 #include "boost/spirit/include/classic.hpp"
00013
00014 namespace boost { namespace spirit { namespace classic { } } }
00015
00016 class Mapper : public boost::spirit::classic::grammar<Mapper> {
00017 public:
00018 Mapper() { };
00019 ~Mapper() { };
00020 template <typename ScannerT> struct definition;
00021 };
00022
00023 class MapPair {
00024 public:
00025 MapPair() { };
00026 ~MapPair() { };
00027 void operator()(char const* str, char const* end) const;
00028 };
00029
00030 class MapMakeName {
00031 public:
00032 MapMakeName() { };
00033 ~MapMakeName() { };
00034 void operator()(char const* str, char const* end) const;
00035 };
00036
00037 class MapMakeDouble {
00038 public:
00039 MapMakeDouble() { };
00040 ~MapMakeDouble() { };
00041 void operator()(char const* str, char const* end) const;
00042 };
00043
00045
00058 class DDLMap : public DDXMLElement
00059 {
00060 friend class MapPair;
00061 friend class MapMakeName;
00062 friend class MapMakeDouble;
00063
00064 public:
00065
00066 DDLMap( DDLElementRegistry* myreg );
00067
00068 virtual ~DDLMap( void );
00069
00070 void preProcessElement( const std::string& name, const std::string& nmspace, DDCompactView& cpv );
00071
00072 void processElement( const std::string& name, const std::string& nmspace, DDCompactView& cpv );
00073
00074 ReadMapType<std::map<std::string,double> > & getMapOfMaps( void );
00075
00076 private:
00077 dd_map_type pMap;
00078 ReadMapType<std::map<std::string,double> > pMapMap;
00079 double pDouble;
00080 std::string pName;
00081 std::string pNameSpace;
00082
00083 void errorOut( const char* str );
00084
00085 void do_pair( char const* str, char const* end );
00086
00087 void do_makeName( char const* str, char const* end );
00088
00089 void do_makeDouble( char const* str, char const* end );
00090 };
00091
00092 #endif