]> git.wh0rd.org Git - ICEs.git/blob - 411691/id_manager.i.5
more
[ICEs.git] / 411691 / id_manager.i.5
1         int __exchange_and_add_dispatch(int * __mem);
2
3         template < typename _Tp > class new_allocator {
4               public:
5                 typedef _Tp & reference;
6         };
7
8 namespace std {
9         template < typename _CharT > struct char_traits;
10         class exception {};
11         class bad_cast:
12         public 
13 exception {}
14 ;
15       template < typename _Tp > class allocator:public new_allocator < _Tp >
16         {
17               public:template < typename _Tp1 > struct rebind {
18                         typedef allocator < _Tp1 > other;
19                 };
20         };
21         template < typename _CharT, typename _Traits =
22             char_traits < _CharT >, typename _Alloc =
23             allocator < _CharT > >class basic_string;
24         typedef basic_string < char >string;
25         template < typename _CharT, typename _Traits,
26             typename _Alloc > class basic_string {
27                 typedef typename _Alloc::template rebind <
28                     _CharT >::other _CharT_alloc_type;
29                 typedef _Alloc allocator_type;
30                 typedef typename _CharT_alloc_type::reference reference;
31               private:struct _Rep_base {
32                         int _M_refcount;
33                 };
34                 struct _Rep:_Rep_base {
35                         _CharT *_M_refdata() throw() {
36                                 return 0;
37                         }
38 void _M_dispose(const _Alloc & __a) {
39                                 if (this != &_S_empty_rep()) 
40 {
41                                         if (                                        __exchange_and_add_dispatch(&this->                                                                 _M_refcount)) 
42 {
43                                                 _M_destroy(__a);
44                                         }
45                                 }
46                         }
47                         void _M_destroy(const _Alloc &) throw();
48                 };
49                 struct _Alloc_hider:_Alloc {
50                         _Alloc_hider(_CharT * __dat,
51                                      const _Alloc & __a):_Alloc(__a),
52                             _M_p(__dat) {
53                         } _CharT *_M_p;
54                 };
55               public:
56               private:mutable _Alloc_hider _M_dataplus;
57                 _Rep *_M_rep() const {
58                 } static _Rep & _S_empty_rep() {
59                 }
60               public: basic_string():
61 _M_dataplus(_S_empty_rep()._M_refdata(),   _Alloc()) {          }
62                 ~basic_string() {
63                         _M_rep()->_M_dispose(this->get_allocator());
64                 }
65                 basic_string & erase() {}
66                 allocator_type get_allocator() const {
67         }};
68         template < typename _Tp, typename _Ref, typename _Ptr > struct _Deque_iterator {
69         };
70         template < typename _Tp, typename _Alloc > class _Deque_base {
71               public:typedef _Alloc allocator_type;
72                 typedef _Deque_iterator < _Tp, _Tp &, _Tp * >iterator;
73               _Deque_base():_M_impl() {
74                         _M_initialize_map(0);
75                 }
76                 typedef typename _Alloc::template rebind <
77                     _Tp >::other _Tp_alloc_type;
78                 struct _Deque_impl:public _Tp_alloc_type {
79                         _Tp **_M_map;
80                         long unsigned int _M_map_size;
81                         iterator _M_start;
82                         iterator _M_finish;
83                          _Deque_impl():_Tp_alloc_type(), _M_map(0),
84                             _M_map_size(0), _M_start(), _M_finish() {
85                 }};
86               protected:void _M_initialize_map(long unsigned int);
87                 _Deque_impl _M_impl;
88         };
89       template < typename _Tp, typename _Alloc = std::allocator < _Tp > >class deque:protected _Deque_base < _Tp,
90             _Alloc >
91         {
92         };
93         namespace numeric {
94                 class bad_numeric_cast:
95                 public std::bad_cast {          };
96                 class negative_overflow:
97                 public bad_numeric_cast {
98                         void operator() (int) { throw negative_overflow(); }
99                 };
100         }
101 }
102
103 namespace boost {
104         template < class T > class scoped_ptr {
105               private:T * px;
106               public:typedef T element_type;
107               explicit scoped_ptr(T * p = 0):px(p) {
108         }};
109         template < class T > class intrusive_ptr {
110               private:typedef intrusive_ptr this_type;
111               public:typedef T element_type;
112               intrusive_ptr():px(0) {
113                 }
114               intrusive_ptr(T * p, bool add_ref = true):px(p) {
115                 }
116                 ~intrusive_ptr() {
117                                 intrusive_ptr_release(px);
118                 }
119                 T *operator->() const {
120                         return px;
121                 } typedef T *this_type::*unspecified_bool_type;
122                 operator    unspecified_bool_type() const {
123               } private: T * px;
124         };
125         struct section_info;
126         template < typename T > struct intrusive_base {
127                 intrusive_base():ref_count_(0) {
128                 } ~intrusive_base() {
129                 }
130                 friend void intrusive_ptr_release(T * ptr) {
131                                 delete ptr;
132                 }
133               private:
134 unsigned ref_count_;
135         };
136         struct id_category {
137                 enum categories {
138                         default_category =
139                             0, numbered, generated, generated_heading,
140                             generated_section, generated_doc, explicit_id,
141                             explicit_section_id, explicit_anchor_id
142                 };
143                 categories c;
144         };
145         struct id_placeholder;
146         struct file_info;
147         struct doc_info;
148         struct id_state {
149                 boost::intrusive_ptr < file_info > current_file;
150                 std::deque < id_placeholder > placeholders;
151               private:id_placeholder * add_id_to_section(std::string const &id,
152                                                    id_category category,
153                                                    boost::intrusive_ptr <
154                                                    section_info >
155                                                    const &section);
156         };
157         struct id_manager {
158                 id_manager();
159               private:boost::scoped_ptr < id_state > state;
160         };
161         struct file_info:intrusive_base < file_info > {
162                 boost::intrusive_ptr < file_info > parent;
163                 boost::intrusive_ptr < doc_info > document;
164                 bool document_root;
165                 unsigned compatibility_version;
166                  boost::intrusive_ptr < section_info > switched_section;
167                 id_placeholder *original_placeholder;
168                  file_info(boost::intrusive_ptr < file_info > const &parent,
169                            unsigned compatibility_version):parent(parent),
170                     document(parent->document), document_root(false),
171                     compatibility_version(compatibility_version),
172                     switched_section(), original_placeholder() {
173         }};
174         struct doc_info:intrusive_base < doc_info > {
175                 boost::intrusive_ptr < section_info > current_section;
176         };
177         struct section_info:intrusive_base < section_info > {
178                 boost::intrusive_ptr < section_info > parent;
179                 unsigned compatibility_version;
180                 unsigned level;
181                  std::string id_1_1;
182                 id_placeholder *placeholder_1_6;
183                  section_info(boost::intrusive_ptr < section_info >
184                               const &parent, unsigned compatibility_version,
185                               std::string const &id):parent(parent),
186                     compatibility_version(compatibility_version),
187                     level(1)
188 , id_1_1(),
189                     placeholder_1_6(0) {}
190 };
191       id_manager::id_manager():state() {        }
192         namespace {
193                 std::string normalize_id(
194 std::string
195 ) {
196                         std::string id;
197                         id.erase();
198                 }
199         }
200         id_placeholder *id_state::add_id_to_section(std::string const &id,
201                                                     id_category category,
202                                                     boost::intrusive_ptr <
203                                                     section_info >
204                                                     const &section) {
205                 std::string id_part = id;
206 normalize_id(id);
207                 boost::intrusive_ptr < section_info > parent;
208         };
209 }