annotate gcc/testsuite/g++.dg/tree-ssa/copyprop.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // PR 39548 verify ssa ICE
kono
parents:
diff changeset
2 //
kono
parents:
diff changeset
3 // { dg-do compile { target { lp64 } } }
kono
parents:
diff changeset
4 // { dg-options "-Wno-error -fno-exceptions -fno-tree-vrp -O2 -fprofile-generate -finline-limit=500 -std=c++98" }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
5 // { dg-additional-options "-Wno-return-type" }
111
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 #include <map>
kono
parents:
diff changeset
8 #include <vector>
kono
parents:
diff changeset
9 #include <iostream>
kono
parents:
diff changeset
10 #include <cstdlib>
kono
parents:
diff changeset
11 using namespace std;
kono
parents:
diff changeset
12 template<typename _FIter, typename _Tp> _FIter lower_bound(_FIter, _FIter, _Tp&);
kono
parents:
diff changeset
13 template<class _Key> struct hash { };
kono
parents:
diff changeset
14 template<class _Val> struct _Hashtable_node {
kono
parents:
diff changeset
15 _Hashtable_node* _M_next;
kono
parents:
diff changeset
16 _Val _M_val;
kono
parents:
diff changeset
17 };
kono
parents:
diff changeset
18 static const unsigned long __stl_prime_list[] = { 2, 3, 5 };
kono
parents:
diff changeset
19 inline unsigned long prime(unsigned long __n) {
kono
parents:
diff changeset
20 const unsigned long* __first = __stl_prime_list;
kono
parents:
diff changeset
21 const unsigned long* __last = __stl_prime_list + 29;
kono
parents:
diff changeset
22 const unsigned long* pos = lower_bound(__first, __last, __n);
kono
parents:
diff changeset
23 return pos == __last ? *(__last - 1) : *pos;
kono
parents:
diff changeset
24 }
kono
parents:
diff changeset
25 template<class _Val, class _Key, class _HashFcn, class _ExtractKey, class _EqualKey, class _Alloc> struct hashtable {
kono
parents:
diff changeset
26 typedef _Key key_type;
kono
parents:
diff changeset
27 typedef _Val value_type;
kono
parents:
diff changeset
28 typedef _HashFcn hasher;
kono
parents:
diff changeset
29 typedef _EqualKey key_equal;
kono
parents:
diff changeset
30 typedef size_t size_type;
kono
parents:
diff changeset
31 typedef value_type& reference;
kono
parents:
diff changeset
32 typedef _Hashtable_node<_Val> _Node;
kono
parents:
diff changeset
33 typedef typename _Alloc::template rebind<value_type>::other allocator_type;
kono
parents:
diff changeset
34 allocator_type get_allocator() const { }
kono
parents:
diff changeset
35 typedef typename _Alloc::template rebind<_Node>::other _Node_Alloc;
kono
parents:
diff changeset
36 typedef typename _Alloc::template rebind<_Node*>::other _Nodeptr_Alloc;
kono
parents:
diff changeset
37 typedef vector<_Node*, _Nodeptr_Alloc> _Vector_type;
kono
parents:
diff changeset
38 _Node_Alloc _M_node_allocator;
kono
parents:
diff changeset
39 void _M_put_node(_Node* __p) {
kono
parents:
diff changeset
40 _M_node_allocator.deallocate(__p, 1);
kono
parents:
diff changeset
41 }
kono
parents:
diff changeset
42 hasher _M_hash;
kono
parents:
diff changeset
43 key_equal _M_equals;
kono
parents:
diff changeset
44 _ExtractKey _M_get_key;
kono
parents:
diff changeset
45 _Vector_type _M_buckets;
kono
parents:
diff changeset
46 size_type _M_num_elements;
kono
parents:
diff changeset
47 hashtable(size_type __n, const _HashFcn& __hf, const _EqualKey& __eql, const allocator_type& __a = allocator_type()) : _M_num_elements(0) {
kono
parents:
diff changeset
48 _M_initialize_buckets(__n);
kono
parents:
diff changeset
49 }
kono
parents:
diff changeset
50 ~hashtable() { clear(); }
kono
parents:
diff changeset
51 reference find_or_insert(const value_type& __obj);
kono
parents:
diff changeset
52 size_type count(const key_type& __key) const {
kono
parents:
diff changeset
53 const size_type __n = _M_bkt_num_key(__key);
kono
parents:
diff changeset
54 size_type __result = 0;
kono
parents:
diff changeset
55 for (const _Node* __cur = _M_buckets[__n]; __cur; __cur = __cur->_M_next)
kono
parents:
diff changeset
56 if (_M_equals(_M_get_key(__cur->_M_val), __key)) ++__result;
kono
parents:
diff changeset
57 }
kono
parents:
diff changeset
58 size_type erase(const key_type& __key);
kono
parents:
diff changeset
59 void clear();
kono
parents:
diff changeset
60 size_type _M_next_size(size_type __n) const { return prime(__n); }
kono
parents:
diff changeset
61 void _M_initialize_buckets(size_type __n) {
kono
parents:
diff changeset
62 const size_type __n_buckets = _M_next_size(__n);
kono
parents:
diff changeset
63 _M_buckets.reserve(__n_buckets);
kono
parents:
diff changeset
64 _M_buckets.insert(_M_buckets.end(), __n_buckets, (_Node*) 0);
kono
parents:
diff changeset
65 }
kono
parents:
diff changeset
66 size_type _M_bkt_num_key(const key_type& __key) const {
kono
parents:
diff changeset
67 return _M_bkt_num_key(__key, _M_buckets.size());
kono
parents:
diff changeset
68 }
kono
parents:
diff changeset
69 size_type _M_bkt_num_key(const key_type& __key, size_t __n) const {
kono
parents:
diff changeset
70 return _M_hash(__key) % __n;
kono
parents:
diff changeset
71 }
kono
parents:
diff changeset
72 void _M_delete_node(_Node* __n) {
kono
parents:
diff changeset
73 this->get_allocator().destroy(&__n->_M_val);
kono
parents:
diff changeset
74 _M_put_node(__n);
kono
parents:
diff changeset
75 }
kono
parents:
diff changeset
76 };
kono
parents:
diff changeset
77 template<class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All> typename hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>::size_type hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>:: erase(const key_type& __key) {
kono
parents:
diff changeset
78 const size_type __n = _M_bkt_num_key(__key);
kono
parents:
diff changeset
79 _Node* __first = _M_buckets[__n];
kono
parents:
diff changeset
80 if (__first) _Node* __cur = __first;
kono
parents:
diff changeset
81 }
kono
parents:
diff changeset
82 template<class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All> void hashtable<_Val, _Key, _HF, _Ex, _Eq, _All>:: clear() {
kono
parents:
diff changeset
83 for (size_type __i = 0; __i < _M_buckets.size(); ++__i) {
kono
parents:
diff changeset
84 _Node* __cur = _M_buckets[__i];
kono
parents:
diff changeset
85 while (__cur != 0) { _M_delete_node(__cur); }
kono
parents:
diff changeset
86 }
kono
parents:
diff changeset
87 }
kono
parents:
diff changeset
88 template<class _Key, class _Tp, class _HashFn = ::hash<_Key>, class _EqualKey = equal_to<_Key>, class _Alloc = allocator<_Tp> > struct hash_map {
kono
parents:
diff changeset
89 typedef hashtable<pair<const _Key, _Tp>,_Key, _HashFn, _Select1st<pair<const _Key, _Tp> >, _EqualKey, _Alloc> _Ht;
kono
parents:
diff changeset
90 _Ht _M_ht;
kono
parents:
diff changeset
91 typedef typename _Ht::key_type key_type;
kono
parents:
diff changeset
92 typedef typename _Ht::value_type value_type;
kono
parents:
diff changeset
93 typedef typename _Ht::hasher hasher;
kono
parents:
diff changeset
94 typedef typename _Ht::key_equal key_equal;
kono
parents:
diff changeset
95 typedef typename _Ht::size_type size_type;
kono
parents:
diff changeset
96 typedef typename _Ht::allocator_type allocator_type;
kono
parents:
diff changeset
97 hash_map() : _M_ht(100, hasher(), key_equal(), allocator_type()) { }
kono
parents:
diff changeset
98 _Tp& operator[](const key_type& __key) {
kono
parents:
diff changeset
99 return _M_ht.find_or_insert(value_type(__key, _Tp())).second;
kono
parents:
diff changeset
100 }
kono
parents:
diff changeset
101 size_type count(const key_type& __key) const { return _M_ht.count(__key); }
kono
parents:
diff changeset
102 size_type erase(const key_type& __key) {
kono
parents:
diff changeset
103 return _M_ht.erase(__key);
kono
parents:
diff changeset
104 }
kono
parents:
diff changeset
105 };
kono
parents:
diff changeset
106 extern size_t strlen (__const char *__s);
kono
parents:
diff changeset
107 template <class C> struct scoped_ptr {
kono
parents:
diff changeset
108 explicit scoped_ptr(C* p = __null) : ptr_(p) { delete ptr_; }
kono
parents:
diff changeset
109 void reset(C* p = __null) {
kono
parents:
diff changeset
110 if (p != ptr_) { delete ptr_; }
kono
parents:
diff changeset
111 }
kono
parents:
diff changeset
112 C& operator*() const {}
kono
parents:
diff changeset
113 C* operator->() const {}
kono
parents:
diff changeset
114 bool operator==(C* p) const { return ptr_ == p; }
kono
parents:
diff changeset
115 bool operator!=(C* p) const { return ptr_ != p; }
kono
parents:
diff changeset
116 C* ptr_;
kono
parents:
diff changeset
117 };
kono
parents:
diff changeset
118 namespace std {
kono
parents:
diff changeset
119 class strstreambuf : public basic_streambuf<char, char_traits<char> > {
kono
parents:
diff changeset
120 };
kono
parents:
diff changeset
121 class strstream : public basic_iostream<char> {
kono
parents:
diff changeset
122 public: int pcount() const;
kono
parents:
diff changeset
123 char* str();
kono
parents:
diff changeset
124 strstreambuf _M_buf;
kono
parents:
diff changeset
125 };
kono
parents:
diff changeset
126 };
kono
parents:
diff changeset
127 const int INFO = 0, WARNING = 1, ERROR = 2, FATAL = 3, NUM_SEVERITIES = 4;
kono
parents:
diff changeset
128 struct foo_1 {
kono
parents:
diff changeset
129 foo_1(string* str) : str_(str) { }
kono
parents:
diff changeset
130 operator bool() const {
kono
parents:
diff changeset
131 return (__builtin_expect(str_ != __null, 0));
kono
parents:
diff changeset
132 }
kono
parents:
diff changeset
133 string* str_;
kono
parents:
diff changeset
134 };
kono
parents:
diff changeset
135 template<class t1, class t2> string* Makefoo_1(const t1& v1, const t2& v2, const char* names) {
kono
parents:
diff changeset
136 strstream ss;
kono
parents:
diff changeset
137 ss << names << " (" << v1 << " vs. " << v2 << ")";
kono
parents:
diff changeset
138 return new string(ss.str(), ss.pcount());
kono
parents:
diff changeset
139 }
kono
parents:
diff changeset
140 template <class t1, class t2> inline string* Check_GTImpl(const t1& v1, const t2& v2, const char* names) {
kono
parents:
diff changeset
141 if (v1 > v2) return __null;
kono
parents:
diff changeset
142 else return Makefoo_1(v1, v2, names);
kono
parents:
diff changeset
143 }
kono
parents:
diff changeset
144 struct blah_54 {
kono
parents:
diff changeset
145 blah_54(const char* file, int line, int severity);
kono
parents:
diff changeset
146 ~blah_54();
kono
parents:
diff changeset
147 ostream& stream() { };
kono
parents:
diff changeset
148 };
kono
parents:
diff changeset
149 class blah_0 : public blah_54 {
kono
parents:
diff changeset
150 public: blah_0(const char* file, int line);
kono
parents:
diff changeset
151 blah_0(const char* file, int line, const foo_1& result);
kono
parents:
diff changeset
152 };
kono
parents:
diff changeset
153 template <class Value, class Key, class HashFcn, class ExtractKey, class EqualKey, class Alloc> class dense_hashtable;
kono
parents:
diff changeset
154 template <class V, class K, class HF, class ExK, class EqK, class A> struct dense_hashtable_iterator {
kono
parents:
diff changeset
155 typedef V* pointer;
kono
parents:
diff changeset
156 dense_hashtable_iterator(const dense_hashtable<V,K,HF,ExK,EqK,A> *h, pointer it, pointer it_end, bool advance) : ht(h), pos(it), end(it_end) {
kono
parents:
diff changeset
157 if (advance) advance_past_empty_and_deleted();
kono
parents:
diff changeset
158 }
kono
parents:
diff changeset
159 pointer operator->() const { }
kono
parents:
diff changeset
160 void advance_past_empty_and_deleted() {
kono
parents:
diff changeset
161 while ( pos != end && (ht->test_empty(*this) || ht->test_deleted(*this)) ) ++pos;
kono
parents:
diff changeset
162 }
kono
parents:
diff changeset
163 const dense_hashtable<V,K,HF,ExK,EqK,A> *ht;
kono
parents:
diff changeset
164 pointer pos, end;
kono
parents:
diff changeset
165 };
kono
parents:
diff changeset
166 template <class V, class K, class HF, class ExK, class EqK, class A> struct dense_hashtable_const_iterator {
kono
parents:
diff changeset
167 typedef dense_hashtable_iterator<V,K,HF,ExK,EqK,A> iterator;
kono
parents:
diff changeset
168 typedef dense_hashtable_const_iterator<V,K,HF,ExK,EqK,A> const_iterator;
kono
parents:
diff changeset
169 typedef const V& reference;
kono
parents:
diff changeset
170 typedef const V* pointer;
kono
parents:
diff changeset
171 dense_hashtable_const_iterator(const dense_hashtable<V,K,HF,ExK,EqK,A> *h, pointer it, pointer it_end, bool advance) : ht(h), pos(it), end(it_end) {
kono
parents:
diff changeset
172 if (advance) advance_past_empty_and_deleted();
kono
parents:
diff changeset
173 }
kono
parents:
diff changeset
174 dense_hashtable_const_iterator(const iterator &it) : pos(it.pos), end(it.end) {}
kono
parents:
diff changeset
175 reference operator*() const { return *pos; }
kono
parents:
diff changeset
176 pointer operator->() const {}
kono
parents:
diff changeset
177 void advance_past_empty_and_deleted() {
kono
parents:
diff changeset
178 while ( pos != end && (ht->test_empty(*this) || ht->test_deleted(*this))) ++pos;
kono
parents:
diff changeset
179 }
kono
parents:
diff changeset
180 const_iterator& operator++() { }
kono
parents:
diff changeset
181 bool operator!=(const const_iterator& it) const { }
kono
parents:
diff changeset
182 const dense_hashtable<V,K,HF,ExK,EqK,A> *ht;
kono
parents:
diff changeset
183 pointer pos, end;
kono
parents:
diff changeset
184 };
kono
parents:
diff changeset
185 template <class Value, class Key, class HashFcn, class ExtractKey, class EqualKey, class Alloc> class dense_hashtable {
kono
parents:
diff changeset
186 public: typedef Key key_type;
kono
parents:
diff changeset
187 typedef Value value_type;
kono
parents:
diff changeset
188 typedef HashFcn hasher;
kono
parents:
diff changeset
189 typedef EqualKey key_equal;
kono
parents:
diff changeset
190 typedef size_t size_type;
kono
parents:
diff changeset
191 typedef dense_hashtable_iterator<Value, Key, HashFcn, ExtractKey, EqualKey, Alloc> iterator;
kono
parents:
diff changeset
192 typedef dense_hashtable_const_iterator<Value, Key, HashFcn, ExtractKey, EqualKey, Alloc> const_iterator;
kono
parents:
diff changeset
193 static const float HT_OCCUPANCY_FLT;
kono
parents:
diff changeset
194 static const float HT_EMPTY_FLT;
kono
parents:
diff changeset
195 static const size_t HT_MIN_BUCKETS = 32;
kono
parents:
diff changeset
196 iterator end() {
kono
parents:
diff changeset
197 return iterator(this, table + num_buckets, table + num_buckets, true);
kono
parents:
diff changeset
198 }
kono
parents:
diff changeset
199 const_iterator end() const {
kono
parents:
diff changeset
200 return const_iterator(this, table + num_buckets, table+num_buckets,true);
kono
parents:
diff changeset
201 }
kono
parents:
diff changeset
202 void set_value(value_type* dst, const value_type& src) {
kono
parents:
diff changeset
203 new(dst) value_type(src);
kono
parents:
diff changeset
204 }
kono
parents:
diff changeset
205 void destroy_buckets(size_type first, size_type last) {
kono
parents:
diff changeset
206 for (; first != last; ++first) table[first].~value_type();
kono
parents:
diff changeset
207 }
kono
parents:
diff changeset
208 private: void squash_deleted() {
kono
parents:
diff changeset
209 if ( num_deleted ) {
kono
parents:
diff changeset
210 dense_hashtable tmp(*this);
kono
parents:
diff changeset
211 swap(tmp);
kono
parents:
diff changeset
212 }
kono
parents:
diff changeset
213 }
kono
parents:
diff changeset
214 public: void set_deleted_key(const value_type &val) { squash_deleted(); }
kono
parents:
diff changeset
215 bool test_deleted(size_type bucknum) const {
kono
parents:
diff changeset
216 return (use_deleted && num_deleted > 0 && equals(get_key(delval), get_key(table[bucknum])));
kono
parents:
diff changeset
217 }
kono
parents:
diff changeset
218 bool test_deleted(const const_iterator &it) const {
kono
parents:
diff changeset
219 return (use_deleted && num_deleted > 0 && equals(get_key(delval), get_key(*it)));
kono
parents:
diff changeset
220 }
kono
parents:
diff changeset
221 bool set_deleted(const_iterator &it) {
kono
parents:
diff changeset
222 set_value(const_cast<value_type*>(&(*it)), delval);
kono
parents:
diff changeset
223 }
kono
parents:
diff changeset
224 bool test_empty(size_type bucknum) const {
kono
parents:
diff changeset
225 return equals(get_key(emptyval), get_key(table[bucknum]));
kono
parents:
diff changeset
226 }
kono
parents:
diff changeset
227 bool test_empty(const const_iterator &it) const {
kono
parents:
diff changeset
228 return equals(get_key(emptyval), get_key(*it));
kono
parents:
diff changeset
229 }
kono
parents:
diff changeset
230 void fill_range_with_empty(value_type* table_start, value_type* table_end) {
kono
parents:
diff changeset
231 uninitialized_fill(table_start, table_end, emptyval);
kono
parents:
diff changeset
232 }
kono
parents:
diff changeset
233 void set_empty(size_type buckstart, size_type buckend) {
kono
parents:
diff changeset
234 destroy_buckets(buckstart, buckend);
kono
parents:
diff changeset
235 fill_range_with_empty(table + buckstart, table + buckend);
kono
parents:
diff changeset
236 }
kono
parents:
diff changeset
237 size_type size() const {
kono
parents:
diff changeset
238 return num_elements - num_deleted;
kono
parents:
diff changeset
239 }
kono
parents:
diff changeset
240 size_type bucket_count() const { }
kono
parents:
diff changeset
241 static const size_type ILLEGAL_BUCKET = size_type(-1);
kono
parents:
diff changeset
242 size_type min_size(size_type num_elts, size_type min_buckets_wanted) {
kono
parents:
diff changeset
243 size_type sz = HT_MIN_BUCKETS;
kono
parents:
diff changeset
244 while ( sz < min_buckets_wanted || num_elts >= sz * enlarge_resize_percent ) sz *= 2;
kono
parents:
diff changeset
245 }
kono
parents:
diff changeset
246 void maybe_shrink() {
kono
parents:
diff changeset
247 if (shrink_threshold > 0 && (num_elements-num_deleted) < shrink_threshold && bucket_count() > HT_MIN_BUCKETS ) {
kono
parents:
diff changeset
248 size_type sz = bucket_count() / 2;
kono
parents:
diff changeset
249 sz /= 2;
kono
parents:
diff changeset
250 dense_hashtable tmp(*this, sz);
kono
parents:
diff changeset
251 swap(tmp);
kono
parents:
diff changeset
252 }
kono
parents:
diff changeset
253 }
kono
parents:
diff changeset
254 void resize_delta(size_type delta, size_type min_buckets_wanted = 0) {
kono
parents:
diff changeset
255 if ( consider_shrink ) maybe_shrink();
kono
parents:
diff changeset
256 const size_type needed_size = min_size(num_elements + delta, min_buckets_wanted);
kono
parents:
diff changeset
257 if ( needed_size > bucket_count() ) {
kono
parents:
diff changeset
258 const size_type resize_to = min_size(num_elements - num_deleted + delta, min_buckets_wanted);
kono
parents:
diff changeset
259 dense_hashtable tmp(*this, resize_to);
kono
parents:
diff changeset
260 swap(tmp);
kono
parents:
diff changeset
261 }
kono
parents:
diff changeset
262 }
kono
parents:
diff changeset
263 void copy_from(const dense_hashtable &ht, size_type min_buckets_wanted = 0) {
kono
parents:
diff changeset
264 clear();
kono
parents:
diff changeset
265 const size_type resize_to = min_size(ht.size(), min_buckets_wanted);
kono
parents:
diff changeset
266 num_elements++;
kono
parents:
diff changeset
267 }
kono
parents:
diff changeset
268 explicit dense_hashtable(size_type n = 0, const HashFcn& hf = HashFcn(), const EqualKey& eql = EqualKey(),const ExtractKey& ext = ExtractKey()) : num_deleted(0), use_deleted(false), use_empty(false), delval(), emptyval(), enlarge_resize_percent(HT_OCCUPANCY_FLT), shrink_resize_percent(HT_EMPTY_FLT), table(__null), num_buckets(min_size(0, n)), num_elements(0) {
kono
parents:
diff changeset
269 reset_thresholds();
kono
parents:
diff changeset
270 }
kono
parents:
diff changeset
271 dense_hashtable(const dense_hashtable& ht, size_type min_buckets_wanted = 0) : num_deleted(0), use_deleted(ht.use_deleted), use_empty(ht.use_empty), delval(ht.delval), emptyval(ht.emptyval), enlarge_resize_percent(ht.enlarge_resize_percent), shrink_resize_percent(ht.shrink_resize_percent), table(__null), num_buckets(0), num_elements(0) {
kono
parents:
diff changeset
272 reset_thresholds();
kono
parents:
diff changeset
273 copy_from(ht, min_buckets_wanted);
kono
parents:
diff changeset
274 set_value(&emptyval, ht.emptyval);
kono
parents:
diff changeset
275 enlarge_resize_percent = ht.enlarge_resize_percent;
kono
parents:
diff changeset
276 copy_from(ht);
kono
parents:
diff changeset
277 }
kono
parents:
diff changeset
278 ~dense_hashtable() {
kono
parents:
diff changeset
279 if (table) {
kono
parents:
diff changeset
280 destroy_buckets(0, num_buckets);
kono
parents:
diff changeset
281 free(table);
kono
parents:
diff changeset
282 }
kono
parents:
diff changeset
283 }
kono
parents:
diff changeset
284 void swap(dense_hashtable& ht) {
kono
parents:
diff changeset
285 std::swap(equals, ht.equals);
kono
parents:
diff changeset
286 {
kono
parents:
diff changeset
287 value_type tmp;
kono
parents:
diff changeset
288 set_value(&delval, ht.delval);
kono
parents:
diff changeset
289 set_value(&ht.delval, tmp);
kono
parents:
diff changeset
290 set_value(&ht.emptyval, tmp);
kono
parents:
diff changeset
291 }
kono
parents:
diff changeset
292 std::swap(table, ht.table);
kono
parents:
diff changeset
293 std::swap(num_buckets, ht.num_buckets);
kono
parents:
diff changeset
294 reset_thresholds();
kono
parents:
diff changeset
295 ht.reset_thresholds();
kono
parents:
diff changeset
296 }
kono
parents:
diff changeset
297 void clear() {
kono
parents:
diff changeset
298 if (table) destroy_buckets(0, num_buckets);
kono
parents:
diff changeset
299 num_buckets = min_size(0,0);
kono
parents:
diff changeset
300 set_empty(0, num_buckets);
kono
parents:
diff changeset
301 }
kono
parents:
diff changeset
302 pair<size_type, size_type> find_position(const key_type &key) const {
kono
parents:
diff changeset
303 const size_type bucket_count_minus_one = bucket_count() - 1;
kono
parents:
diff changeset
304 size_type bucknum = hash(key) & bucket_count_minus_one;
kono
parents:
diff changeset
305 size_type insert_pos = ILLEGAL_BUCKET;
kono
parents:
diff changeset
306 while ( 1 ) {
kono
parents:
diff changeset
307 if ( test_empty(bucknum) ) {
kono
parents:
diff changeset
308 if ( insert_pos == ILLEGAL_BUCKET ) return pair<size_type,size_type>(ILLEGAL_BUCKET, insert_pos);
kono
parents:
diff changeset
309 }
kono
parents:
diff changeset
310 else if ( test_deleted(bucknum) ) {
kono
parents:
diff changeset
311 if ( insert_pos == ILLEGAL_BUCKET ) insert_pos = bucknum;
kono
parents:
diff changeset
312 }
kono
parents:
diff changeset
313 else if ( equals(key, get_key(table[bucknum])) ) {
kono
parents:
diff changeset
314 return pair<size_type,size_type>(bucknum, ILLEGAL_BUCKET);
kono
parents:
diff changeset
315 }
kono
parents:
diff changeset
316 }
kono
parents:
diff changeset
317 }
kono
parents:
diff changeset
318 iterator find(const key_type& key) {
kono
parents:
diff changeset
319 if ( size() == 0 ) return end();
kono
parents:
diff changeset
320 pair<size_type, size_type> pos = find_position(key);
kono
parents:
diff changeset
321 if ( pos.first == ILLEGAL_BUCKET ) return end();
kono
parents:
diff changeset
322 return iterator(this, table + pos.first, table + num_buckets, false);
kono
parents:
diff changeset
323 }
kono
parents:
diff changeset
324 const_iterator find(const key_type& key) const {
kono
parents:
diff changeset
325 if ( size() == 0 ) return end();
kono
parents:
diff changeset
326 pair<size_type, size_type> pos = find_position(key);
kono
parents:
diff changeset
327 if ( pos.first == ILLEGAL_BUCKET ) return end();
kono
parents:
diff changeset
328 return const_iterator(this, table + pos.first, table+num_buckets, false);
kono
parents:
diff changeset
329 }
kono
parents:
diff changeset
330 size_type count(const key_type &key) const {
kono
parents:
diff changeset
331 pair<size_type, size_type> pos = find_position(key); }
kono
parents:
diff changeset
332 pair<iterator, bool> insert_noresize(const value_type& obj) {
kono
parents:
diff changeset
333 const pair<size_type,size_type> pos = find_position(get_key(obj));
kono
parents:
diff changeset
334 if ( pos.first != ILLEGAL_BUCKET) {
kono
parents:
diff changeset
335 return pair<iterator,bool>(iterator(this, table + pos.first, table + num_buckets, false), false);
kono
parents:
diff changeset
336 }
kono
parents:
diff changeset
337 else {
kono
parents:
diff changeset
338 if ( test_deleted(pos.second) ) { ++num_elements; }
kono
parents:
diff changeset
339 return pair<iterator,bool>(iterator(this, table + pos.second, table + num_buckets, false), true);
kono
parents:
diff changeset
340 }
kono
parents:
diff changeset
341 }
kono
parents:
diff changeset
342 pair<iterator, bool> insert(const value_type& obj) {
kono
parents:
diff changeset
343 resize_delta(1);
kono
parents:
diff changeset
344 return insert_noresize(obj);
kono
parents:
diff changeset
345 }
kono
parents:
diff changeset
346 size_type erase(const key_type& key) {
kono
parents:
diff changeset
347 const_iterator pos = find(key);
kono
parents:
diff changeset
348 if ( pos != end() ) {
kono
parents:
diff changeset
349 set_deleted(pos);
kono
parents:
diff changeset
350 }
kono
parents:
diff changeset
351 }
kono
parents:
diff changeset
352 hasher hash;
kono
parents:
diff changeset
353 key_equal equals;
kono
parents:
diff changeset
354 ExtractKey get_key;
kono
parents:
diff changeset
355 size_type num_deleted;
kono
parents:
diff changeset
356 bool use_deleted;
kono
parents:
diff changeset
357 bool use_empty;
kono
parents:
diff changeset
358 value_type delval;
kono
parents:
diff changeset
359 value_type emptyval;
kono
parents:
diff changeset
360 float enlarge_resize_percent;
kono
parents:
diff changeset
361 float shrink_resize_percent;
kono
parents:
diff changeset
362 size_type shrink_threshold;
kono
parents:
diff changeset
363 size_type enlarge_threshold;
kono
parents:
diff changeset
364 value_type *table;
kono
parents:
diff changeset
365 size_type num_buckets;
kono
parents:
diff changeset
366 size_type num_elements;
kono
parents:
diff changeset
367 bool consider_shrink;
kono
parents:
diff changeset
368 void reset_thresholds() {
kono
parents:
diff changeset
369 enlarge_threshold = static_cast<size_type>(num_buckets * shrink_resize_percent);
kono
parents:
diff changeset
370 }
kono
parents:
diff changeset
371 };
kono
parents:
diff changeset
372 template<> struct hash<long> {
kono
parents:
diff changeset
373 size_t operator()(long x) const {
kono
parents:
diff changeset
374 }
kono
parents:
diff changeset
375 };
kono
parents:
diff changeset
376 template<> struct hash<unsigned long> {
kono
parents:
diff changeset
377 size_t operator()(unsigned long x) const {
kono
parents:
diff changeset
378 }
kono
parents:
diff changeset
379 };
kono
parents:
diff changeset
380 template <class Key, class T, class HashFcn = hash<Key>, class EqualKey = equal_to<Key>, class Alloc = allocator<T> > class dense_hash_map {
kono
parents:
diff changeset
381 struct SelectKey {
kono
parents:
diff changeset
382 const Key& operator()(const pair<const Key, T>& p) const {
kono
parents:
diff changeset
383 return p.first;
kono
parents:
diff changeset
384 }
kono
parents:
diff changeset
385 };
kono
parents:
diff changeset
386 typedef dense_hashtable<pair<const Key, T>, Key, HashFcn, SelectKey, EqualKey, Alloc> ht;
kono
parents:
diff changeset
387 ht rep;
kono
parents:
diff changeset
388 public: typedef typename ht::key_type key_type;
kono
parents:
diff changeset
389 typedef T data_type;
kono
parents:
diff changeset
390 typedef typename ht::value_type value_type;
kono
parents:
diff changeset
391 typedef typename ht::size_type size_type;
kono
parents:
diff changeset
392 typedef typename ht::iterator iterator;
kono
parents:
diff changeset
393 typedef typename ht::const_iterator const_iterator;
kono
parents:
diff changeset
394 iterator end() {
kono
parents:
diff changeset
395 return rep.end();
kono
parents:
diff changeset
396 }
kono
parents:
diff changeset
397 iterator find(const key_type& key) { return rep.find(key); }
kono
parents:
diff changeset
398 data_type& operator[](const key_type& key) {
kono
parents:
diff changeset
399 iterator it = find(key);
kono
parents:
diff changeset
400 return insert(value_type(key, data_type())).first->second;
kono
parents:
diff changeset
401 }
kono
parents:
diff changeset
402 pair<iterator, bool> insert(const value_type& obj) {
kono
parents:
diff changeset
403 return rep.insert(obj);
kono
parents:
diff changeset
404 }
kono
parents:
diff changeset
405 void set_deleted_key(const key_type& key) {
kono
parents:
diff changeset
406 rep.set_deleted_key(value_type(key, data_type()));
kono
parents:
diff changeset
407 }
kono
parents:
diff changeset
408 size_type erase(const key_type& key) { return rep.erase(key); }
kono
parents:
diff changeset
409 };
kono
parents:
diff changeset
410 template <class Value, class HashFcn = hash<Value>, class EqualKey = equal_to<Value>, class Alloc = allocator<Value> > class dense_hash_set {
kono
parents:
diff changeset
411 struct Identity {
kono
parents:
diff changeset
412 const Value& operator()(const Value& v) const { return v; }
kono
parents:
diff changeset
413 };
kono
parents:
diff changeset
414 typedef dense_hashtable<Value, Value, HashFcn, Identity, EqualKey, Alloc> ht;
kono
parents:
diff changeset
415 ht rep;
kono
parents:
diff changeset
416 public: typedef typename ht::key_type key_type;
kono
parents:
diff changeset
417 typedef typename ht::value_type value_type;
kono
parents:
diff changeset
418 typedef typename ht::size_type size_type;
kono
parents:
diff changeset
419 typedef typename ht::const_iterator iterator;
kono
parents:
diff changeset
420 size_type count(const key_type& key) const {
kono
parents:
diff changeset
421 return rep.count(key);
kono
parents:
diff changeset
422 }
kono
parents:
diff changeset
423 pair<iterator, bool> insert(const value_type& obj) {
kono
parents:
diff changeset
424 pair<typename ht::iterator, bool> p = rep.insert(obj);
kono
parents:
diff changeset
425 }
kono
parents:
diff changeset
426 size_type erase(const key_type& key) {
kono
parents:
diff changeset
427 return rep.erase(key);
kono
parents:
diff changeset
428 }
kono
parents:
diff changeset
429 };
kono
parents:
diff changeset
430 class linked_ptr_internal {
kono
parents:
diff changeset
431 public: bool depart() { if (next_ == this) return true; }
kono
parents:
diff changeset
432 mutable linked_ptr_internal const* next_;
kono
parents:
diff changeset
433 };
kono
parents:
diff changeset
434 template <typename T> class linked_ptr {
kono
parents:
diff changeset
435 public: explicit linked_ptr(T* ptr = __null) {
kono
parents:
diff changeset
436 }
kono
parents:
diff changeset
437 ~linked_ptr() { depart(); }
kono
parents:
diff changeset
438 T& operator*() const { }
kono
parents:
diff changeset
439 T* value_;
kono
parents:
diff changeset
440 linked_ptr_internal link_;
kono
parents:
diff changeset
441 void depart() {
kono
parents:
diff changeset
442 if (link_.depart()) delete value_;
kono
parents:
diff changeset
443 }
kono
parents:
diff changeset
444 };
kono
parents:
diff changeset
445 class blah_3 {
kono
parents:
diff changeset
446 const char* ptr_;
kono
parents:
diff changeset
447 int length_;
kono
parents:
diff changeset
448 public: blah_3(const char* str) : ptr_(str), length_((str == __null) ? 0 : static_cast<int>(strlen(str))) { }
kono
parents:
diff changeset
449 };
kono
parents:
diff changeset
450 class blah_5;
kono
parents:
diff changeset
451 class Bitmap {
kono
parents:
diff changeset
452 public: Bitmap(unsigned int size) : array_size_(RequiredArraySize(size)) { }
kono
parents:
diff changeset
453 static unsigned int RequiredArraySize(unsigned int num_bits) { return (num_bits + 31) >> 5; }
kono
parents:
diff changeset
454 unsigned int array_size_;
kono
parents:
diff changeset
455 };
kono
parents:
diff changeset
456 enum blah_31 { CREATIVE_FORMAT_TEXT_NARROW, kNumblah_31s };
kono
parents:
diff changeset
457 enum blah_33 { BLACKLISTED };
kono
parents:
diff changeset
458 template <typename EnumT> class blah_55;
kono
parents:
diff changeset
459 typedef blah_55<blah_31> blah_31Set;
kono
parents:
diff changeset
460 enum blah_36 { APPROVAL_STATUS_APPROVED, APPROVAL_STATUS_UNKNOWN };
kono
parents:
diff changeset
461 enum blah_37 { hahah_INVALID, hahah_KEYWORD };
kono
parents:
diff changeset
462 template<typename EnumT> class blah_55 {
kono
parents:
diff changeset
463 public: blah_55(int enum_size);
kono
parents:
diff changeset
464 bool Insert(EnumT x);
kono
parents:
diff changeset
465 const int enum_size_;
kono
parents:
diff changeset
466 Bitmap elements_;
kono
parents:
diff changeset
467 };
kono
parents:
diff changeset
468 template<typename EnumT> blah_55<EnumT>::blah_55(int enum_size) :enum_size_(enum_size), elements_(enum_size) {
kono
parents:
diff changeset
469 while (foo_1 _result = Check_GTImpl(1, 0, "enum_size" " " ">" " " "0")) blah_0(".h", 1902, _result).stream();
kono
parents:
diff changeset
470 };
kono
parents:
diff changeset
471 enum blah_38 {
kono
parents:
diff changeset
472 ttttttt_9, };
kono
parents:
diff changeset
473 class blah_46 {
kono
parents:
diff changeset
474 public: blah_46() : hahaha_id_(0), type_(hahah_INVALID), approval_status_(APPROVAL_STATUS_APPROVED) {
kono
parents:
diff changeset
475 }
kono
parents:
diff changeset
476 blah_46(long cid) : hahaha_id_(cid), type_(hahah_INVALID), approval_status_(APPROVAL_STATUS_APPROVED) {
kono
parents:
diff changeset
477 }
kono
parents:
diff changeset
478 long id() const {
kono
parents:
diff changeset
479 return (static_cast<long>(hahaha_id_) << 16) >> 16;
kono
parents:
diff changeset
480 }
kono
parents:
diff changeset
481 static const blah_46 kBlacklistedID;
kono
parents:
diff changeset
482 bool operator == (const blah_46& x) const { return id() == x.id(); }
kono
parents:
diff changeset
483 bool operator < (const blah_46& x) const { return id() < x.id(); }
kono
parents:
diff changeset
484 long hahaha_id_ : 48;
kono
parents:
diff changeset
485 blah_37 type_ : 8;
kono
parents:
diff changeset
486 blah_36 approval_status_ : 4;
kono
parents:
diff changeset
487 };
kono
parents:
diff changeset
488 template <> struct hash<blah_46> {
kono
parents:
diff changeset
489 size_t operator()(const blah_46 &x) const {
kono
parents:
diff changeset
490 return size_t(x.id());
kono
parents:
diff changeset
491 }
kono
parents:
diff changeset
492 };
kono
parents:
diff changeset
493 class blah_57 {
kono
parents:
diff changeset
494 public: blah_57();
kono
parents:
diff changeset
495 void AddReason(blah_33 reason, const blah_3& debug_str, const blah_46& hahaha_id, bool );
kono
parents:
diff changeset
496 void set_collects_multiple_reasons(bool t) { }
kono
parents:
diff changeset
497 private: struct foo_3 {
kono
parents:
diff changeset
498 string reject_desc;
kono
parents:
diff changeset
499 };
kono
parents:
diff changeset
500 foo_3 first_reason_;
kono
parents:
diff changeset
501 };
kono
parents:
diff changeset
502 template <class T> struct foo_5 : public unary_function<T*, long> {
kono
parents:
diff changeset
503 long operator()(const T* p) const {
kono
parents:
diff changeset
504 long id = reinterpret_cast<long>(p);
kono
parents:
diff changeset
505 if (id < 2) return -id;
kono
parents:
diff changeset
506 }
kono
parents:
diff changeset
507 };
kono
parents:
diff changeset
508 template <class T> class DensePtrSet : public dense_hashtable<T*, long, hash<long>, foo_5<T>, equal_to<long>, allocator<T*> > {
kono
parents:
diff changeset
509 public: DensePtrSet() {
kono
parents:
diff changeset
510 this->set_deleted_key(reinterpret_cast<T*>(1));
kono
parents:
diff changeset
511 }
kono
parents:
diff changeset
512 const T* Find(long key) const {
kono
parents:
diff changeset
513 typename DensePtrSet<T>::const_iterator it = this->find(key);
kono
parents:
diff changeset
514 return it != this->end() ? *it : __null;
kono
parents:
diff changeset
515 }
kono
parents:
diff changeset
516 };
kono
parents:
diff changeset
517 struct foo_7 {
kono
parents:
diff changeset
518 foo_7(bool spell_correction, bool query_broadening, bool previous_query, bool near_aaaaa, bool same_length, float mult, float exp_score) : shengmo_0(spell_correction), shengmo_1(query_broadening), shengmo_2(previous_query), shengmo_3(near_aaaaa), shengmo_4(same_length), multiplier(mult), expansion_score(exp_score) {
kono
parents:
diff changeset
519 }
kono
parents:
diff changeset
520 int CompareSameKeywordMatch(const foo_7& compare) const;
kono
parents:
diff changeset
521 bool shengmo_0, shengmo_1, shengmo_2, shengmo_3, shengmo_4;
kono
parents:
diff changeset
522 float multiplier, expansion_score;
kono
parents:
diff changeset
523 };
kono
parents:
diff changeset
524 enum blah_41 {
kono
parents:
diff changeset
525 ACP_ECPM_EARLY = 2 };
kono
parents:
diff changeset
526 struct foo_8 { unsigned int packed_ctr1; };
kono
parents:
diff changeset
527 struct foo_9 { foo_9() {}};
kono
parents:
diff changeset
528 class blah_16;
kono
parents:
diff changeset
529 class blah_17;
kono
parents:
diff changeset
530 class foo_12 { public: foo_12() {}
kono
parents:
diff changeset
531 unsigned long hahaha_id() const {}
kono
parents:
diff changeset
532 unsigned int qbb_score() const {}
kono
parents:
diff changeset
533 private: static const vector<blah_46> hmmmmh_4;
kono
parents:
diff changeset
534 long hahaha_id_ : 40;
kono
parents:
diff changeset
535 };
kono
parents:
diff changeset
536 class foo_13 {
kono
parents:
diff changeset
537 public: typedef dense_hash_map<long, int> BestMap;
kono
parents:
diff changeset
538 foo_13() { best_rrrrrrr_.set_deleted_key(-1); }
kono
parents:
diff changeset
539 void erase(long ad_group_id) {
kono
parents:
diff changeset
540 best_rrrrrrr_.erase(ad_group_id);
kono
parents:
diff changeset
541 }
kono
parents:
diff changeset
542 typedef BestMap::iterator iterator;
kono
parents:
diff changeset
543 typedef BestMap::const_iterator const_iterator;
kono
parents:
diff changeset
544 const_iterator begin() const { }
kono
parents:
diff changeset
545 iterator end() { return best_rrrrrrr_.end(); }
kono
parents:
diff changeset
546 iterator find(long ad_group_id) { return best_rrrrrrr_.find(ad_group_id); }
kono
parents:
diff changeset
547 const foo_12& GetMatch(const_iterator it) const {}
kono
parents:
diff changeset
548 void hmmmmh_27(long ad_group_id, const foo_12& addme);
kono
parents:
diff changeset
549 private: BestMap best_rrrrrrr_;
kono
parents:
diff changeset
550 vector<foo_12> rrrrrrr_buffer_;
kono
parents:
diff changeset
551 };
kono
parents:
diff changeset
552 struct foo_10 : public dense_hash_set<blah_46> {};
kono
parents:
diff changeset
553 class foo_9Set : public DensePtrSet<foo_9> {};
kono
parents:
diff changeset
554 typedef map<blah_46, foo_7*> foo_6Data;
kono
parents:
diff changeset
555 typedef hash_map<long, linked_ptr<blah_57> > RejectedAdGroupMap;
kono
parents:
diff changeset
556 enum blah_43 {};
kono
parents:
diff changeset
557 class foo_14 {
kono
parents:
diff changeset
558 public: foo_14(const unsigned int, const blah_16*, const int*);
kono
parents:
diff changeset
559 bool GathersMultipleRejectionReasons() const;
kono
parents:
diff changeset
560 void hmmmmh_30(blah_46 hahaha_id, blah_38 type);
kono
parents:
diff changeset
561 const foo_7* Insertfoo_6(const blah_46 hahaha_id, bool shengmo_0, bool shengmo_1, bool shengmo_2, bool shengmo_3, bool shengmo_4_rewrite, float multiplier, float context_score);
kono
parents:
diff changeset
562 void hmmmmh_7(blah_46 hahaha_id, blah_38 type);
kono
parents:
diff changeset
563 foo_9* Insertfoo_9();
kono
parents:
diff changeset
564 bool hmmmmh_8(long ad_group_id, const foo_12 &entry);
kono
parents:
diff changeset
565 void hmmmmh_9(long ad_group_id);
kono
parents:
diff changeset
566 foo_13::iterator hmmmmh_0(long ad_group_id);
kono
parents:
diff changeset
567 bool hmmmmh_8(long ad_group_id, foo_13::iterator best, const foo_12& entry);
kono
parents:
diff changeset
568 void hmmmmh_5(const blah_46 hahaha_id);
kono
parents:
diff changeset
569 void hmmmmh_29(const blah_46 hahaha_id);
kono
parents:
diff changeset
570 bool hmmmmh_12(const blah_46 hahaha_id) const;
kono
parents:
diff changeset
571 bool hmmmmh_13(const blah_46 hahaha_id) const;
kono
parents:
diff changeset
572 const foo_9* Getfoo_9(const blah_46 hahaha_id) const;
kono
parents:
diff changeset
573 bool Gathersfoo_9() const {}
kono
parents:
diff changeset
574 const foo_10* rrrrrrr_type_data() const {}
kono
parents:
diff changeset
575 const foo_10* negative_rrrrrrr_type_data() const {}
kono
parents:
diff changeset
576 const foo_10* positive_rrrrrrr_type_data() const {}
kono
parents:
diff changeset
577 const foo_9Set* kw_info_set() const { }
kono
parents:
diff changeset
578 const foo_6Data* rewrite_data() const {}
kono
parents:
diff changeset
579 const vector<blah_17>& query_rectangles() const {}
kono
parents:
diff changeset
580 void hmmmmh_14();
kono
parents:
diff changeset
581 void AddQueryRectangle(const blah_17& query_rectangle);
kono
parents:
diff changeset
582 void hmmmmh_15(long ad_group_id, const blah_46 hahaha_id, blah_33 reject_class, const char* reject_desc = __null);
kono
parents:
diff changeset
583 void hmmmmh_16(const vector<long>& rejected_sssr_ids);
kono
parents:
diff changeset
584 void Copy(const foo_14& cmi);
kono
parents:
diff changeset
585 void hmmmmh_10();
kono
parents:
diff changeset
586 private: const blah_16* ad_request_;
kono
parents:
diff changeset
587 const int* cr_query_;
kono
parents:
diff changeset
588 blah_43 gather_flags_;
kono
parents:
diff changeset
589 vector<blah_17> query_rectangles_;
kono
parents:
diff changeset
590 foo_10 rrrrrrr_type_data_;
kono
parents:
diff changeset
591 foo_9Set kw_info_set_;
kono
parents:
diff changeset
592 foo_6Data rewrite_data_;
kono
parents:
diff changeset
593 scoped_ptr<RejectedAdGroupMap> rejected_sssr_map_;
kono
parents:
diff changeset
594 foo_13 ad_group_rrrrrrr_data_;
kono
parents:
diff changeset
595 vector<blah_46> geo_hahaha_;
kono
parents:
diff changeset
596 bool geo_hahaha_is_sorted_;
kono
parents:
diff changeset
597 foo_10 negative_rrrrrrr_type_data_, positive_rrrrrrr_type_data_;
kono
parents:
diff changeset
598 scoped_ptr<foo_10> extra_hahaha_set_;
kono
parents:
diff changeset
599 int dimension_id_;
kono
parents:
diff changeset
600 blah_31Set creative_formats_;
kono
parents:
diff changeset
601 scoped_ptr<dense_hash_set<unsigned long> > near_aaaaa_rrrrrrr_fps_;
kono
parents:
diff changeset
602 blah_41 comparison_policy_;
kono
parents:
diff changeset
603 blah_46 next_virtual_hahaha_id_;
kono
parents:
diff changeset
604 vector<void*>* sub_queries_;
kono
parents:
diff changeset
605 bool allow_only_whitelisted_customers_, automatic_hahaha_rrrrrrr_;
kono
parents:
diff changeset
606 scoped_ptr<blah_5> kw_arena_, expanded_rrrrrrr_arena_;
kono
parents:
diff changeset
607 };
kono
parents:
diff changeset
608 class blah_19 {
kono
parents:
diff changeset
609 void hmmmmh_3();
kono
parents:
diff changeset
610 enum blah_45 {};
kono
parents:
diff changeset
611 };
kono
parents:
diff changeset
612 void blah_19::hmmmmh_3() {}
kono
parents:
diff changeset
613 class blah_16 {
kono
parents:
diff changeset
614 public: int near_aaaaa_rrrrrrr_fps_size() const {}
kono
parents:
diff changeset
615 unsigned long near_aaaaa_rrrrrrr_fps(int i) const {}
kono
parents:
diff changeset
616 };
kono
parents:
diff changeset
617 class blah_21 {
kono
parents:
diff changeset
618 protected: blah_21(char* first_block, const size_t block_size, bool align_to_page);
kono
parents:
diff changeset
619 void* GetMemoryFallback(const size_t size, const int align);
kono
parents:
diff changeset
620 void* GetMemory(const size_t size, const int align) {
kono
parents:
diff changeset
621 if ( size > 0 && size < remaining_ && align == 1 ) {
kono
parents:
diff changeset
622 last_alloc_ = freestart_;
kono
parents:
diff changeset
623 }
kono
parents:
diff changeset
624 return GetMemoryFallback(size, align);
kono
parents:
diff changeset
625 }
kono
parents:
diff changeset
626 char* freestart_;
kono
parents:
diff changeset
627 char* last_alloc_;
kono
parents:
diff changeset
628 size_t remaining_;
kono
parents:
diff changeset
629 };
kono
parents:
diff changeset
630 class blah_5 : blah_21 {
kono
parents:
diff changeset
631 public: char* Alloc(const size_t size) {
kono
parents:
diff changeset
632 return reinterpret_cast<char*>(GetMemory(size, 1));
kono
parents:
diff changeset
633 }
kono
parents:
diff changeset
634 };
kono
parents:
diff changeset
635 class blah_25 {
kono
parents:
diff changeset
636 public: virtual ~blah_25();
kono
parents:
diff changeset
637 };
kono
parents:
diff changeset
638 class blah_17 : blah_25 { };
kono
parents:
diff changeset
639 void Fillfoo_8(const foo_12& x2, struct foo_8* out) {
kono
parents:
diff changeset
640 out->packed_ctr1 = x2.qbb_score();
kono
parents:
diff changeset
641 }
kono
parents:
diff changeset
642 const vector<blah_46> foo_12::hmmmmh_4;
kono
parents:
diff changeset
643 foo_14::foo_14(const unsigned int gather_flags, const blah_16* ad_request, const int* cr_query): ad_request_(ad_request), cr_query_(cr_query), gather_flags_(static_cast<blah_43>(gather_flags)), geo_hahaha_is_sorted_(false), dimension_id_(0), creative_formats_(kNumblah_31s), comparison_policy_(ACP_ECPM_EARLY), sub_queries_(new vector<void*>()), allow_only_whitelisted_customers_(false), automatic_hahaha_rrrrrrr_(false) {
kono
parents:
diff changeset
644 hmmmmh_10();
kono
parents:
diff changeset
645 }
kono
parents:
diff changeset
646 void foo_14::hmmmmh_5(const blah_46 hahaha_id) {
kono
parents:
diff changeset
647 negative_rrrrrrr_type_data_.insert(hahaha_id);
kono
parents:
diff changeset
648 }
kono
parents:
diff changeset
649 void foo_14::hmmmmh_7(blah_46 hahaha_id, blah_38 type) { }
kono
parents:
diff changeset
650 foo_13::iterator foo_14::hmmmmh_0( long ad_group_id) {
kono
parents:
diff changeset
651 return ad_group_rrrrrrr_data_.find(ad_group_id);
kono
parents:
diff changeset
652 }
kono
parents:
diff changeset
653 bool foo_14::hmmmmh_8(long ad_group_id, foo_13::iterator best, const foo_12& entry) {
kono
parents:
diff changeset
654 rejected_sssr_map_->erase(ad_group_id);
kono
parents:
diff changeset
655 ad_group_rrrrrrr_data_.hmmmmh_27(ad_group_id, entry);
kono
parents:
diff changeset
656 }
kono
parents:
diff changeset
657 bool foo_14::hmmmmh_8(long ad_group_id, const foo_12& entry) {
kono
parents:
diff changeset
658 foo_13::iterator best = hmmmmh_0(ad_group_id);
kono
parents:
diff changeset
659 }
kono
parents:
diff changeset
660 void foo_14::hmmmmh_9(long ad_group_id) {
kono
parents:
diff changeset
661 ad_group_rrrrrrr_data_.erase(ad_group_id);
kono
parents:
diff changeset
662 }
kono
parents:
diff changeset
663 void foo_14::hmmmmh_10() {
kono
parents:
diff changeset
664 if (near_aaaaa_rrrrrrr_fps_ != __null) {
kono
parents:
diff changeset
665 blah_54(".cc", 226, WARNING).stream() << "";
kono
parents:
diff changeset
666 for (int j = 0;
kono
parents:
diff changeset
667 j < ad_request_->near_aaaaa_rrrrrrr_fps_size(); j++) {
kono
parents:
diff changeset
668 near_aaaaa_rrrrrrr_fps_->insert(ad_request_->near_aaaaa_rrrrrrr_fps(j));
kono
parents:
diff changeset
669 }
kono
parents:
diff changeset
670 }
kono
parents:
diff changeset
671 }
kono
parents:
diff changeset
672 const foo_7* foo_14::Insertfoo_6(const blah_46 hahaha_id, bool shengmo_0, bool shengmo_1, bool shengmo_2, bool shengmo_3, bool shengmo_4_rewrite, float multiplier, float context_score) {
kono
parents:
diff changeset
673 if (rrrrrrr_type_data_.count(hahaha_id) > 0) return __null;
kono
parents:
diff changeset
674 foo_7* new_info = new(expanded_rrrrrrr_arena_->Alloc(sizeof(foo_7))) foo_7(shengmo_0,shengmo_1, shengmo_2, shengmo_3, shengmo_4_rewrite, multiplier, context_score);
kono
parents:
diff changeset
675 pair<foo_6Data::iterator, bool> status = rewrite_data_.insert( make_pair(hahaha_id, new_info));
kono
parents:
diff changeset
676 foo_7* inserted = status.first->second;
kono
parents:
diff changeset
677 if (!status.second) {
kono
parents:
diff changeset
678 if (inserted->CompareSameKeywordMatch(*new_info) < 0) *inserted = *new_info;
kono
parents:
diff changeset
679 }
kono
parents:
diff changeset
680 }
kono
parents:
diff changeset
681 foo_9* foo_14::Insertfoo_9() {
kono
parents:
diff changeset
682 foo_9* info = new(kw_arena_->Alloc(sizeof(foo_9))) foo_9;
kono
parents:
diff changeset
683 if (Gathersfoo_9()) kw_info_set_.insert(info);
kono
parents:
diff changeset
684 creative_formats_.Insert(CREATIVE_FORMAT_TEXT_NARROW);
kono
parents:
diff changeset
685 }
kono
parents:
diff changeset
686 bool foo_14::hmmmmh_12(const blah_46 hahaha_id) const {
kono
parents:
diff changeset
687 if (rrrrrrr_type_data_.count(hahaha_id)) return true;
kono
parents:
diff changeset
688 }
kono
parents:
diff changeset
689 bool foo_14::hmmmmh_13(const blah_46 hahaha_id) const {
kono
parents:
diff changeset
690 if (positive_rrrrrrr_type_data_.count(hahaha_id)) return true;
kono
parents:
diff changeset
691 }
kono
parents:
diff changeset
692 const foo_9* foo_14::Getfoo_9(const blah_46 hahaha_id) const {
kono
parents:
diff changeset
693 if (Gathersfoo_9()) return kw_info_set_.Find(hahaha_id.id());
kono
parents:
diff changeset
694 static int occurrences_383 = 0, occurrences_mod_n_383 = 0;
kono
parents:
diff changeset
695 if (++occurrences_mod_n_383 > 1000) occurrences_mod_n_383 -= 1000;
kono
parents:
diff changeset
696 }
kono
parents:
diff changeset
697 void foo_14::hmmmmh_15(long ad_group_id, const blah_46 hahaha_id, blah_33 reject_class, const char* reject_desc) {
kono
parents:
diff changeset
698 if (rejected_sssr_map_ == __null) {
kono
parents:
diff changeset
699 blah_54("a.cc", 413, ERROR).stream() << "re NULL";
kono
parents:
diff changeset
700 rejected_sssr_map_.reset(new RejectedAdGroupMap);
kono
parents:
diff changeset
701 }
kono
parents:
diff changeset
702 if (rejected_sssr_map_->count(ad_group_id) == 0) {
kono
parents:
diff changeset
703 blah_57* ad_rejection = new blah_57();
kono
parents:
diff changeset
704 ad_rejection->set_collects_multiple_reasons( GathersMultipleRejectionReasons());
kono
parents:
diff changeset
705 (*rejected_sssr_map_)[ad_group_id] = linked_ptr<blah_57>(ad_rejection);
kono
parents:
diff changeset
706 }
kono
parents:
diff changeset
707 blah_57& ad_rejection = *(*rejected_sssr_map_)[ad_group_id];
kono
parents:
diff changeset
708 ad_rejection.AddReason(reject_class, reject_desc, hahaha_id, false);
kono
parents:
diff changeset
709 }
kono
parents:
diff changeset
710 void foo_14::hmmmmh_16(const vector<long>& rejected_sssr_ids) {
kono
parents:
diff changeset
711 for (vector<long>::const_iterator it = rejected_sssr_ids.begin();
kono
parents:
diff changeset
712 it != rejected_sssr_ids.end(); ++it) {
kono
parents:
diff changeset
713 ad_group_rrrrrrr_data_.erase(*it);
kono
parents:
diff changeset
714 for (foo_13::const_iterator it = ad_group_rrrrrrr_data_.begin();
kono
parents:
diff changeset
715 it != ad_group_rrrrrrr_data_.end(); ++it) {
kono
parents:
diff changeset
716 hmmmmh_15(it->first, ad_group_rrrrrrr_data_.GetMatch(it).hahaha_id(), BLACKLISTED);
kono
parents:
diff changeset
717 }
kono
parents:
diff changeset
718 }
kono
parents:
diff changeset
719 hmmmmh_30(blah_46::kBlacklistedID, ttttttt_9);
kono
parents:
diff changeset
720 }
kono
parents:
diff changeset
721 void foo_14::Copy(const foo_14& cmi) {
kono
parents:
diff changeset
722 rrrrrrr_type_data_ = *cmi.rrrrrrr_type_data();
kono
parents:
diff changeset
723 negative_rrrrrrr_type_data_ = *cmi.negative_rrrrrrr_type_data();
kono
parents:
diff changeset
724 positive_rrrrrrr_type_data_ = *cmi.positive_rrrrrrr_type_data();
kono
parents:
diff changeset
725 if (cmi.Gathersfoo_9()) {
kono
parents:
diff changeset
726 kw_info_set_ = *cmi.kw_info_set();
kono
parents:
diff changeset
727 rewrite_data_ = *cmi.rewrite_data();
kono
parents:
diff changeset
728 }
kono
parents:
diff changeset
729 hmmmmh_14();
kono
parents:
diff changeset
730 for (int i = 0; i < cmi.query_rectangles().size();
kono
parents:
diff changeset
731 ++i) AddQueryRectangle(cmi.query_rectangles()[i]);
kono
parents:
diff changeset
732 }
kono
parents:
diff changeset
733 void foo_13::hmmmmh_27(long ad_group_id, const foo_12& addme) {
kono
parents:
diff changeset
734 int& best_index = best_rrrrrrr_[ad_group_id];
kono
parents:
diff changeset
735 rrrrrrr_buffer_.push_back(addme);
kono
parents:
diff changeset
736 }
kono
parents:
diff changeset
737 void foo_14::hmmmmh_29(const blah_46 hahaha_id) {
kono
parents:
diff changeset
738 if (extra_hahaha_set_ != __null) extra_hahaha_set_->erase(hahaha_id);
kono
parents:
diff changeset
739 }