1 // file : xsd/cxx/tree/list.hxx 2 // copyright : Copyright (c) 2005-2017 Code Synthesis Tools CC 3 // license : GNU GPL v2 + exceptions; see accompanying LICENSE file 4 5 #ifndef XSD_CXX_TREE_LIST_HXX 6 #define XSD_CXX_TREE_LIST_HXX 7 8 #include <string> 9 10 #include <xercesc/dom/DOMAttr.hpp> 11 #include <xercesc/dom/DOMElement.hpp> 12 13 #include <xsd/cxx/tree/elements.hxx> 14 #include <xsd/cxx/tree/istream-fwd.hxx> // tree::istream 15 #include <xsd/cxx/tree/containers.hxx> // fundamental_p, sequence 16 17 namespace xsd 18 { 19 namespace cxx 20 { 21 namespace tree 22 { 23 // Class template for xsd:list mapping. Based on the sequence 24 // template. 25 // 26 template <typename T, 27 typename C, 28 schema_type::value ST = schema_type::other, 29 bool fund = fundamental_p<T>::r> 30 class list; 31 32 33 // 34 // 35 template <typename T, typename C, schema_type::value ST> 36 class list<T, C, ST, false>: public sequence<T> 37 { 38 public: 39 explicit list(container * c=0)40 list (container* c = 0) 41 : sequence<T> (c) 42 { 43 } 44 list(typename sequence<T>::size_type n,const T & x,container * c=0)45 list (typename sequence<T>::size_type n, 46 const T& x, 47 container* c = 0) 48 : sequence<T> (n, x, c) 49 { 50 } 51 52 template<typename I> list(const I & b,const I & e,container * c=0)53 list (const I& b, const I& e, container* c = 0) 54 : sequence<T> (b, e, c) 55 { 56 } 57 58 template <typename S> 59 list (istream<S>&, flags = 0, container* c = 0); 60 list(const list<T,C,ST,false> & l,flags f=0,container * c=0)61 list (const list<T, C, ST, false>& l, flags f = 0, container* c = 0) 62 : sequence<T> (l, f, c) 63 { 64 } 65 66 public: 67 list (const xercesc::DOMElement&, flags = 0, container* c = 0); 68 69 list (const xercesc::DOMAttr&, flags = 0, container* c = 0); 70 71 list (const std::basic_string<C>&, 72 const xercesc::DOMElement*, 73 flags = 0, 74 container* c = 0); 75 76 private: 77 void 78 init (const std::basic_string<C>&, 79 const xercesc::DOMElement*, 80 flags); 81 }; 82 83 84 // 85 // 86 template <typename T, typename C, schema_type::value ST> 87 class list<T, C, ST, true>: public sequence<T> 88 { 89 public: 90 explicit list(container * c=0)91 list (container* c = 0) 92 : sequence<T> (c) 93 { 94 } 95 96 explicit list(typename sequence<T>::size_type n,const T & x,container * c=0)97 list (typename sequence<T>::size_type n, const T& x, container* c = 0) 98 : sequence<T> (n, x, c) 99 { 100 } 101 102 template<typename I> list(const I & b,const I & e,container * c=0)103 list (const I& b, const I& e, container* c = 0) 104 : sequence<T> (b, e, c) 105 { 106 } 107 108 template <typename S> 109 list (istream<S>&, flags = 0, container* c = 0); 110 list(const list<T,C,ST,true> & l,flags f=0,container * c=0)111 list (const list<T, C, ST, true>& l, flags f = 0, container* c = 0) 112 : sequence<T> (l, f, c) 113 { 114 } 115 116 public: 117 list (const xercesc::DOMElement&, flags = 0, container* c = 0); 118 119 list (const xercesc::DOMAttr&, flags = 0, container* c = 0); 120 121 list (const std::basic_string<C>&, 122 const xercesc::DOMElement*, 123 flags = 0, 124 container* c = 0); 125 126 private: 127 void 128 init (const std::basic_string<C>&, const xercesc::DOMElement*); 129 }; 130 } 131 } 132 } 133 134 #endif // XSD_CXX_TREE_LIST_HXX 135