1 #ifndef _XMLCONFIG_HXX_ 2 #define _XMLCONFIG_HXX_ 3 4 #include <map> 5 #include <list> 6 #include <boost/shared_ptr.hpp> 7 8 /////////////////////////////////////////////////////////////////////// 9 10 enum ElementConfigType { ECT_HEXDUMP, ECT_BYTE, ECT_UINT, ECT_UNISTRING, ETC_FLOAT, ETC_CONTAINER }; 11 12 class ElementConfig 13 { 14 public: 15 ElementConfig() : mnType( ECT_HEXDUMP ) {} 16 ElementConfig( const rtl::OUString& rName, ElementConfigType rType ) : maName( rName ), mnType( rType ) {} 17 ElementConfig( const rtl::OUString& rName ) : maName( rName ) {} 18 ElementConfig( ElementConfigType rType ) : mnType( rType ) {} 19 20 virtual rtl::OUString format( SvStream& rStream, sal_Size& nLength ) const; 21 22 const rtl::OUString& getName() const { return maName; } 23 ElementConfigType getType() const { return mnType; } 24 25 static rtl::OUString dump_hex( SvStream& rStream, sal_Size& nLength ); 26 static rtl::OUString dump_byte( SvStream& rStream, sal_Size& nLength ); 27 static rtl::OUString dump_uint( SvStream& rStream, sal_Size& nLength ); 28 static rtl::OUString dump_unistring( SvStream& rStream, sal_Size& nLength ); 29 static rtl::OUString dump_float( SvStream& rStream, sal_Size& nLength ); 30 private: 31 rtl::OUString maName; 32 ElementConfigType mnType; 33 }; 34 typedef boost::shared_ptr< ElementConfig > ElementConfigPtr; 35 typedef std::list< ElementConfigPtr > ElementConfigList; 36 37 /////////////////////////////////////////////////////////////////////// 38 39 class ElementValueConfig : public ElementConfig 40 { 41 public: 42 ElementValueConfig( const rtl::OUString& rName, const rtl::OUString& rValue ) : ElementConfig( rName ), maValue( rValue ) {} 43 44 const rtl::OUString& getValue() const { return maValue; } 45 46 private: 47 rtl::OUString maValue; 48 }; 49 50 /////////////////////////////////////////////////////////////////////// 51 52 class ElementConfigContainer : public ElementConfig 53 { 54 public: 55 ElementConfigContainer() : ElementConfig( ETC_CONTAINER ) {} 56 ElementConfigContainer( const ::rtl::OUString& rName, ElementConfigType rType ) : ElementConfig( rName, rType ) {} 57 ElementConfigContainer( const ::rtl::OUString& rName ) : ElementConfig( rName, ETC_CONTAINER ) {} 58 ElementConfigContainer( ElementConfigType rType ) : ElementConfig( rType ) {} 59 60 virtual rtl::OUString format( SvStream& rStream, sal_Size& nLength ) const; 61 62 void addElementConfig( ElementConfigPtr p ) { maElementConfigList.push_back( p ); } 63 64 protected: 65 ElementConfigList maElementConfigList; 66 }; 67 68 /////////////////////////////////////////////////////////////////////// 69 70 class CaseElementConfig : public ElementConfigContainer 71 { 72 public: 73 CaseElementConfig( const rtl::OUString& rValue ) : maValue( rValue ) {} 74 75 const rtl::OUString& getValue() const { return maValue; } 76 77 private: 78 rtl::OUString maValue; 79 }; 80 81 /////////////////////////////////////////////////////////////////////// 82 83 class SwitchElementConfig : public ElementConfigContainer 84 { 85 public: 86 SwitchElementConfig( ElementConfigType rType ) : ElementConfigContainer( rType ) {} 87 88 virtual rtl::OUString format( SvStream& rStream, sal_Size& nLength ) const; 89 }; 90 91 /////////////////////////////////////////////////////////////////////// 92 93 class AtomConfig : public ElementConfigContainer 94 { 95 public: 96 AtomConfig( const ::rtl::OUString& rName, bool bIsContainer ) : ElementConfigContainer( rName ), mbIsContainer( bIsContainer ) {} 97 98 bool isContainer() const { return mbIsContainer; } 99 100 protected: 101 bool mbIsContainer; 102 }; 103 104 typedef std::map< UINT16, ElementConfigPtr > AtomConfigMap; 105 106 extern AtomConfigMap gAtomConfigMap; 107 108 #endif 109