00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _terimber_mngxml_h_
00029 #define _terimber_mngxml_h_
00030
00031 #include "xml/miscxml.h"
00032 #include "xml/sxml.h"
00033
00034 BEGIN_TERIMBER_NAMESPACE
00035 #pragma pack(4)
00036
00044 class byte_manager
00045 {
00048 typedef _map< const entityDecl*, size_t > entity_map_t;
00049 protected:
00051 byte_manager( byte_source& stream,
00052 xml_document& doc,
00053 mem_pool_t& small_pool,
00054 mem_pool_t& big_pool,
00055 size_t xml_size
00056 );
00058 ~byte_manager();
00059
00060 protected:
00063 xml_forceinline
00064 ub1_t
00065 pick();
00067 xml_forceinline
00068 ub1_t
00069 pop();
00071 xml_forceinline
00072 ub1_t
00073 pip();
00075 xml_forceinline
00076 void
00077 skip_white_space(bool mustPresent = false,
00078 const char* message = 0
00079 );
00081 xml_forceinline
00082 void
00083 push( ub1_t x
00084 );
00086 xml_forceinline
00087 void
00088 push( const ub1_t* x,
00089 size_t len
00090 );
00092 xml_forceinline
00093 void
00094 throw_exception(const char* msg_text
00095 );
00096
00098 xml_forceinline
00099 void
00100 skip_string( const char* x,
00101 const char* message
00102 );
00104 xml_forceinline
00105 void
00106 skip_sign( ub1_t symbol,
00107 bool skip_before,
00108 bool skip_after,
00109 const char* message
00110 );
00113 xml_forceinline
00114 ub1_t
00115 skip_quote( ub1_t symbol = 0
00116 );
00117
00120 const char*
00121 parseQuotedValue(bool resolve_entities,
00122 bool normalize,
00123 bool (*fn)(ub1_t),
00124 const char* message
00125 );
00127 xml_forceinline
00128 const char*
00129 parseName();
00131 const char*
00132 parseValue();
00136 void
00137 parseAttributeValue(string_t& name,
00138 string_t& value
00139 );
00142 void
00143 parseComment();
00147 void
00148 parseExternalID(string_t& value_system,
00149 string_t& value_public,
00150 bool public_strick
00151 );
00155 void
00156 parsePI();
00157
00159 void
00160 parseCharRef( paged_buffer& buffer
00161 );
00163 bool
00164 resolveEntity( paged_buffer& buffer
00165 );
00167 inline
00168 bool
00169 get_subset() const;
00171 inline
00172 size_t
00173 get_standalone() const;
00175 inline
00176 size_t
00177 get_version() const;
00180
00181 protected:
00183 xml_forceinline
00184 void
00185 reset_all_tmp( bool reset_allocator = false
00186 );
00187
00188 protected:
00189 const size_t _xml_size;
00190 mem_pool_t& _small_pool;
00191 mem_pool_t& _big_pool;
00192 byte_allocator* _depot_store1_allocator;
00193 byte_allocator* _depot_store2_allocator;
00194 byte_allocator* _depot_store3_allocator;
00195 byte_allocator* _tmp_allocator;
00196 byte_allocator* _tmp_store1_allocator;
00197 byte_allocator* _tmp_store2_allocator;
00198 byte_allocator* _tmp_store3_allocator;
00199 byte_allocator* _entity_allocator;
00200 xml_document& _doc;
00201 byte_source& _stream;
00202 entity_map_t _entity_map;
00203
00204 paged_buffer _tmp_store1;
00205 paged_buffer _tmp_store2;
00206 paged_buffer _tmp_store3;
00207 };
00208
00209
00210 #pragma pack()
00211 END_TERIMBER_NAMESPACE
00212
00213 #endif // _terimber_mngxml_h_