00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00026 #ifndef __PDF_CORE_ARRAY_HEADER_INCLUDED__
00027 #define __PDF_CORE_ARRAY_HEADER_INCLUDED__
00028
00029 #ifndef __PDF_CORE_OBJECT_HEADER_INCLUDED__
00030 #include "Object.hh"
00031 #endif
00032
00033 #ifndef __PDF_CORE_TYPE_HEADER_INCLUDED__
00034 #include "Type.hh"
00035 #endif
00036
00037
00038 #include <boost/smart_ptr.hpp>
00039 #include <boost/iterator_adaptors.hpp>
00040
00041
00042 #include <vector>
00043 #include <iterator>
00044 #include <iosfwd>
00045
00046 namespace pdf { namespace core {
00047
00059 class CArray : public CObject
00060 {
00061 private :
00063 typedef boost::shared_ptr<CObject> CObjPtr ;
00064 typedef std::vector<CObjPtr> CObjVec ;
00065
00067 CObjVec m_objects ;
00068
00069 public :
00070 typedef
00071 boost::indirect_iterator_generator<CObjVec::const_iterator,
00072 CObject, const CObject&,
00073 std::random_access_iterator_tag,
00074 const CObject*>::type
00075 iterator ;
00076
00077 typedef iterator::value_type value_type ;
00078 typedef iterator::reference reference ;
00079 typedef iterator::reference const_reference ;
00080 typedef CObjVec::size_type size_type ;
00081
00082 public :
00083 CArray( ) ;
00084 CArray( const CArray& array ) ;
00085 CArray( CObject *object ) ;
00086 ~CArray( ) ;
00087
00096 template <typename InputIt>
00097 CArray( InputIt first, InputIt last )
00098 {
00099 typedef typename std::iterator_traits<InputIt>::value_type CRealType ;
00100 typedef typename CType2PDF<CRealType>::result CPDFType ;
00101
00102 while ( first != last )
00103 {
00104 m_objects.push_back( CObjPtr( new CPDFType( *first ) ) ) ;
00105 ++first ;
00106 }
00107 }
00108
00109 void push_back( CObject *object ) ;
00110
00111
00112 iterator begin( ) const ;
00113 iterator end( ) const ;
00114 size_type size( ) const ;
00115 bool empty( ) const ;
00116 void clear( ) ;
00117
00118 std::ostream& Write( std::ostream& os ) const ;
00119
00120 CObject* Dup( ) const ;
00121 } ;
00122
00123 } }
00124
00125 #endif