From 1a4099b78717b16f632b0e7e0980a27811221e52 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 3 Jul 2014 09:57:09 +0200 Subject: Implement anyType and anySimpleType content representation anyType as a DOM fragment, similar to wildcards. anySimpleType as a text string. --- libxsd/xsd/cxx/tree/containers.hxx | 256 +------------------------------------ 1 file changed, 2 insertions(+), 254 deletions(-) (limited to 'libxsd/xsd/cxx/tree/containers.hxx') diff --git a/libxsd/xsd/cxx/tree/containers.hxx b/libxsd/xsd/cxx/tree/containers.hxx index c89218f..cafd79d 100644 --- a/libxsd/xsd/cxx/tree/containers.hxx +++ b/libxsd/xsd/cxx/tree/containers.hxx @@ -5,17 +5,15 @@ #ifndef XSD_CXX_TREE_CONTAINERS_HXX #define XSD_CXX_TREE_CONTAINERS_HXX -#include // std::ptrdiff_t -#include #include #include // std::auto_ptr/unique_ptr -#include // std::iterator_traits #include // std::equal, std::lexicographical_compare #include #include // XSD_AUTO_PTR #include +#include namespace xsd { @@ -515,7 +513,7 @@ namespace xsd return !(a < b); } - // Provide an ostream insertion opretaor to prevent confusion from + // Provide an ostream insertion operator to prevent confusion from // the implicit bool conversion. // template @@ -528,256 +526,6 @@ namespace xsd template ::r> class sequence; - // Sun CC's does not have iterator_traits. To overcome - // this, we will wrap std::iterator_traits into our own and also - // specialize it for pointer types. Since Sun CC uses pointer - // for vector::iterator, it will use the specialization and won't - // notice the std::iterator_traits. - // -#ifndef _RWSTD_NO_CLASS_PARTIAL_SPEC - template - struct iterator_traits - { - typedef - typename std::iterator_traits::iterator_category - iterator_category; - - typedef - typename std::iterator_traits::value_type - value_type; - - typedef - typename std::iterator_traits::difference_type - difference_type; - }; -#else - // The Pointer specialization does not work for reverse and - // set iterators. But these iterators are user-dfined types - // and have suitable typedefs that we can use. - // - template - struct iterator_traits - { - typedef typename I::iterator_category iterator_category; - typedef typename I::value_type value_type; - typedef typename I::difference_type difference_type; - }; - - template - struct iterator_traits - { - typedef std::random_access_iterator_tag iterator_category; - typedef T value_type; - typedef std::ptrdiff_t difference_type; - }; -#endif - - // Iterator adapter for complex types. It expects I to point to - // a smart pointer-like object that has operator*() that returns - // a refernce to a type static_cast'able to T and get() that - // returns a pointer to a type static_cast'able to T. - // - - template - struct iterator_adapter - { - typedef T value_type; - typedef value_type& reference; - typedef value_type* pointer; - - typedef - typename iterator_traits::iterator_category - iterator_category; - - typedef - typename iterator_traits::difference_type - difference_type; - - - public: - iterator_adapter () - : i_ () // i_ can be of a pointer type. - { - } - - // Allow iterator to const_iterator conversion. - // - template - iterator_adapter (const iterator_adapter& j) - : i_ (j.base ()) - { - } - - explicit - iterator_adapter (const I& i) - : i_ (i) - { - } - - public: - // Forward iterator requirements. - // - reference - operator* () const - { - return static_cast (**i_); - } - - pointer - operator-> () const - { - return static_cast (i_->get ()); - } - - iterator_adapter& - operator++ () - { - ++i_; - return *this; - } - - iterator_adapter - operator++ (int) - { - iterator_adapter r (*this); - ++i_; - return r; - } - - // Bidirectional iterator requirements. - // - iterator_adapter& - operator-- () - { - --i_; - return *this; - } - - iterator_adapter - operator-- (int) - { - iterator_adapter r (*this); - --i_; - return r; - } - - // Random access iterator requirements. - // - reference - operator[] (difference_type n) const - { - return static_cast (*(i_[n])); - } - - iterator_adapter& - operator+= (difference_type n) - { - i_ += n; - return *this; - } - - iterator_adapter - operator+ (difference_type n) const - { - return iterator_adapter (i_ + n); - } - - iterator_adapter& - operator-= (difference_type n) - { - i_ -= n; - return *this; - } - - iterator_adapter - operator- (difference_type n) const - { - return iterator_adapter (i_ - n); - } - - public: - const I& - base () const - { - return i_; - } - - private: - I i_; - }; - - // Note: We use different types for left- and right-hand-side - // arguments to allow comparison between iterator and const_iterator. - // - - // Forward iterator requirements. - // - template - inline bool - operator== (const iterator_adapter& i, - const iterator_adapter& j) - { - return i.base () == j.base (); - } - - template - inline bool - operator!= (const iterator_adapter& i, - const iterator_adapter& j) - { - return i.base () != j.base (); - } - - // Random access iterator requirements - // - template - inline bool - operator< (const iterator_adapter& i, - const iterator_adapter& j) - { - return i.base () < j.base (); - } - - template - inline bool - operator> (const iterator_adapter& i, - const iterator_adapter& j) - { - return i.base () > j.base (); - } - - template - inline bool - operator<= (const iterator_adapter& i, - const iterator_adapter& j) - { - return i.base () <= j.base (); - } - - template - inline bool - operator>= (const iterator_adapter& i, - const iterator_adapter& j) - { - return i.base () >= j.base (); - } - - template - inline typename iterator_adapter::difference_type - operator- (const iterator_adapter& i, - const iterator_adapter& j) - { - return i.base () - j.base (); - } - - template - inline iterator_adapter - operator+ (typename iterator_adapter::difference_type n, - const iterator_adapter& i) - { - return iterator_adapter (i.base () + n); - } - // // class sequence_common -- cgit v1.1