svf-lib 1.0.1247 → 1.0.1249
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
Binary file
|
|
@@ -58,7 +58,7 @@ class List
|
|
|
58
58
|
class ListNode
|
|
59
59
|
{
|
|
60
60
|
public:
|
|
61
|
-
ListNode(const Data&
|
|
61
|
+
ListNode(const Data &d)
|
|
62
62
|
{
|
|
63
63
|
data = d;
|
|
64
64
|
next = nullptr;
|
|
@@ -67,7 +67,7 @@ class List
|
|
|
67
67
|
~ListNode() {}
|
|
68
68
|
|
|
69
69
|
Data data;
|
|
70
|
-
ListNode*
|
|
70
|
+
ListNode *next;
|
|
71
71
|
};
|
|
72
72
|
|
|
73
73
|
typedef Set<Data> DataSet;
|
|
@@ -87,16 +87,16 @@ public:
|
|
|
87
87
|
return (head == nullptr);
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
inline bool find(const Data&
|
|
90
|
+
inline bool find(const Data &data) const
|
|
91
91
|
{
|
|
92
|
-
return
|
|
92
|
+
return nodeSet.find(data) != nodeSet.end();
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
void push(const Data&
|
|
95
|
+
void push(const Data &data)
|
|
96
96
|
{
|
|
97
97
|
if (nodeSet.find(data) == nodeSet.end())
|
|
98
98
|
{
|
|
99
|
-
Node*
|
|
99
|
+
Node *new_node = new Node(data);
|
|
100
100
|
if (head == nullptr)
|
|
101
101
|
head = new_node;// the list is empty
|
|
102
102
|
else
|
|
@@ -109,12 +109,12 @@ public:
|
|
|
109
109
|
{
|
|
110
110
|
assert(head != nullptr && "list is empty");
|
|
111
111
|
/// get node from list head
|
|
112
|
-
Node*
|
|
112
|
+
Node *head_node = head;
|
|
113
113
|
|
|
114
114
|
/// change list head to the next node
|
|
115
115
|
head = head->next;
|
|
116
116
|
if (head == nullptr)
|
|
117
|
-
tail = nullptr;
|
|
117
|
+
tail = nullptr; /// the last node is popped.
|
|
118
118
|
|
|
119
119
|
Data data = head_node->data;
|
|
120
120
|
nodeSet.erase(data);
|
|
@@ -124,8 +124,8 @@ public:
|
|
|
124
124
|
|
|
125
125
|
private:
|
|
126
126
|
DataSet nodeSet;
|
|
127
|
-
Node*
|
|
128
|
-
Node*
|
|
127
|
+
Node *head;
|
|
128
|
+
Node *tail;
|
|
129
129
|
};
|
|
130
130
|
|
|
131
131
|
/**
|
|
@@ -136,6 +136,7 @@ private:
|
|
|
136
136
|
template<class Data>
|
|
137
137
|
class FIFOWorkList
|
|
138
138
|
{
|
|
139
|
+
typedef Set<Data> DataSet;
|
|
139
140
|
typedef std::deque<Data> DataDeque;
|
|
140
141
|
public:
|
|
141
142
|
FIFOWorkList() {}
|
|
@@ -147,28 +148,30 @@ public:
|
|
|
147
148
|
return data_list.empty();
|
|
148
149
|
}
|
|
149
150
|
|
|
150
|
-
inline
|
|
151
|
+
inline u32_t size() const
|
|
151
152
|
{
|
|
152
|
-
|
|
153
|
+
assert(data_list.size() == data_set.size() && "list and set must be the same size!");
|
|
154
|
+
return data_list.size();
|
|
153
155
|
}
|
|
154
156
|
|
|
155
|
-
|
|
156
|
-
* Push a data into the work list.
|
|
157
|
-
*/
|
|
158
|
-
inline bool push(const Data& data)
|
|
157
|
+
inline bool find(const Data &data) const
|
|
159
158
|
{
|
|
160
|
-
|
|
161
|
-
return true;
|
|
159
|
+
return data_set.find(data) != data_set.end();
|
|
162
160
|
}
|
|
163
161
|
|
|
164
162
|
/**
|
|
165
|
-
*
|
|
163
|
+
* Push a data into the work list.
|
|
166
164
|
*/
|
|
167
|
-
inline Data
|
|
165
|
+
inline bool push(const Data &data)
|
|
168
166
|
{
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
167
|
+
if (!find(data))
|
|
168
|
+
{
|
|
169
|
+
data_list.push_back(data);
|
|
170
|
+
data_set.insert(data);
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
else
|
|
174
|
+
return false;
|
|
172
175
|
}
|
|
173
176
|
|
|
174
177
|
/**
|
|
@@ -177,16 +180,29 @@ public:
|
|
|
177
180
|
inline void removeFront()
|
|
178
181
|
{
|
|
179
182
|
assert(!empty() && "work list is empty");
|
|
183
|
+
data_set.erase(front());
|
|
180
184
|
data_list.pop_front();
|
|
181
185
|
}
|
|
182
186
|
|
|
183
187
|
/**
|
|
184
188
|
* Get reference of top data from the END of work list.
|
|
185
189
|
*/
|
|
186
|
-
inline Data&
|
|
190
|
+
inline Data &front()
|
|
191
|
+
{
|
|
192
|
+
assert(!empty() && "work list is empty");
|
|
193
|
+
Data &data = data_list.front();
|
|
194
|
+
return data;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Pop a data from the END of work list.
|
|
199
|
+
*/
|
|
200
|
+
inline Data pop()
|
|
187
201
|
{
|
|
188
202
|
assert(!empty() && "work list is empty");
|
|
189
|
-
Data
|
|
203
|
+
Data data = data_list.front();
|
|
204
|
+
data_list.pop_front();
|
|
205
|
+
data_set.erase(data);
|
|
190
206
|
return data;
|
|
191
207
|
}
|
|
192
208
|
|
|
@@ -196,10 +212,12 @@ public:
|
|
|
196
212
|
inline void clear()
|
|
197
213
|
{
|
|
198
214
|
data_list.clear();
|
|
215
|
+
data_set.clear();
|
|
199
216
|
}
|
|
200
217
|
|
|
201
218
|
private:
|
|
202
|
-
|
|
219
|
+
DataSet data_set; ///< store all data in the work list.
|
|
220
|
+
DataDeque data_list; ///< work list using std::vector.
|
|
203
221
|
};
|
|
204
222
|
|
|
205
223
|
/**
|
|
@@ -210,6 +228,7 @@ private:
|
|
|
210
228
|
template<class Data>
|
|
211
229
|
class FILOWorkList
|
|
212
230
|
{
|
|
231
|
+
typedef Set<Data> DataSet;
|
|
213
232
|
typedef std::vector<Data> DataVector;
|
|
214
233
|
public:
|
|
215
234
|
FILOWorkList() {}
|
|
@@ -221,18 +240,30 @@ public:
|
|
|
221
240
|
return data_list.empty();
|
|
222
241
|
}
|
|
223
242
|
|
|
224
|
-
inline
|
|
243
|
+
inline u32_t size() const
|
|
225
244
|
{
|
|
226
|
-
|
|
245
|
+
assert(data_list.size() == data_set.size() && "list and set must be the same size!");
|
|
246
|
+
return data_list.size();
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
inline bool find(const Data &data) const
|
|
250
|
+
{
|
|
251
|
+
return data_set.find(data) != data_set.end();;
|
|
227
252
|
}
|
|
228
253
|
|
|
229
254
|
/**
|
|
230
255
|
* Push a data into the work list.
|
|
231
256
|
*/
|
|
232
|
-
inline bool push(const Data&
|
|
257
|
+
inline bool push(const Data &data)
|
|
233
258
|
{
|
|
234
|
-
|
|
235
|
-
|
|
259
|
+
if (!find(data))
|
|
260
|
+
{
|
|
261
|
+
data_list.push_back(data);
|
|
262
|
+
data_set.insert(data);
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
else
|
|
266
|
+
return false;
|
|
236
267
|
}
|
|
237
268
|
|
|
238
269
|
/**
|
|
@@ -240,8 +271,10 @@ public:
|
|
|
240
271
|
*/
|
|
241
272
|
inline Data pop()
|
|
242
273
|
{
|
|
243
|
-
|
|
244
|
-
|
|
274
|
+
assert(!empty() && "work list is empty");
|
|
275
|
+
Data data = data_list.back();
|
|
276
|
+
data_list.pop_back();
|
|
277
|
+
data_set.erase(data);
|
|
245
278
|
return data;
|
|
246
279
|
}
|
|
247
280
|
|
|
@@ -251,16 +284,17 @@ public:
|
|
|
251
284
|
inline void removeBack()
|
|
252
285
|
{
|
|
253
286
|
assert(!empty() && "work list is empty");
|
|
287
|
+
data_set.erase(back());
|
|
254
288
|
data_list.pop_back();
|
|
255
289
|
}
|
|
256
290
|
|
|
257
291
|
/**
|
|
258
292
|
* Get reference of top data from the END of work list.
|
|
259
293
|
*/
|
|
260
|
-
inline Data&
|
|
294
|
+
inline Data &back()
|
|
261
295
|
{
|
|
262
296
|
assert(!empty() && "work list is empty");
|
|
263
|
-
Data&
|
|
297
|
+
Data &data = data_list.back();
|
|
264
298
|
return data;
|
|
265
299
|
}
|
|
266
300
|
|
|
@@ -270,10 +304,12 @@ public:
|
|
|
270
304
|
inline void clear()
|
|
271
305
|
{
|
|
272
306
|
data_list.clear();
|
|
307
|
+
data_set.clear();
|
|
273
308
|
}
|
|
274
309
|
|
|
275
310
|
private:
|
|
276
|
-
|
|
311
|
+
DataSet data_set; ///< store all data in the work list.
|
|
312
|
+
DataVector data_list; ///< work list using std::vector.
|
|
277
313
|
};
|
|
278
314
|
|
|
279
315
|
} // End namespace SVF
|
|
Binary file
|
|
@@ -58,7 +58,7 @@ class List
|
|
|
58
58
|
class ListNode
|
|
59
59
|
{
|
|
60
60
|
public:
|
|
61
|
-
ListNode(const Data&
|
|
61
|
+
ListNode(const Data &d)
|
|
62
62
|
{
|
|
63
63
|
data = d;
|
|
64
64
|
next = nullptr;
|
|
@@ -67,7 +67,7 @@ class List
|
|
|
67
67
|
~ListNode() {}
|
|
68
68
|
|
|
69
69
|
Data data;
|
|
70
|
-
ListNode*
|
|
70
|
+
ListNode *next;
|
|
71
71
|
};
|
|
72
72
|
|
|
73
73
|
typedef Set<Data> DataSet;
|
|
@@ -87,16 +87,16 @@ public:
|
|
|
87
87
|
return (head == nullptr);
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
inline bool find(const Data&
|
|
90
|
+
inline bool find(const Data &data) const
|
|
91
91
|
{
|
|
92
|
-
return
|
|
92
|
+
return nodeSet.find(data) != nodeSet.end();
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
void push(const Data&
|
|
95
|
+
void push(const Data &data)
|
|
96
96
|
{
|
|
97
97
|
if (nodeSet.find(data) == nodeSet.end())
|
|
98
98
|
{
|
|
99
|
-
Node*
|
|
99
|
+
Node *new_node = new Node(data);
|
|
100
100
|
if (head == nullptr)
|
|
101
101
|
head = new_node;// the list is empty
|
|
102
102
|
else
|
|
@@ -109,12 +109,12 @@ public:
|
|
|
109
109
|
{
|
|
110
110
|
assert(head != nullptr && "list is empty");
|
|
111
111
|
/// get node from list head
|
|
112
|
-
Node*
|
|
112
|
+
Node *head_node = head;
|
|
113
113
|
|
|
114
114
|
/// change list head to the next node
|
|
115
115
|
head = head->next;
|
|
116
116
|
if (head == nullptr)
|
|
117
|
-
tail = nullptr;
|
|
117
|
+
tail = nullptr; /// the last node is popped.
|
|
118
118
|
|
|
119
119
|
Data data = head_node->data;
|
|
120
120
|
nodeSet.erase(data);
|
|
@@ -124,8 +124,8 @@ public:
|
|
|
124
124
|
|
|
125
125
|
private:
|
|
126
126
|
DataSet nodeSet;
|
|
127
|
-
Node*
|
|
128
|
-
Node*
|
|
127
|
+
Node *head;
|
|
128
|
+
Node *tail;
|
|
129
129
|
};
|
|
130
130
|
|
|
131
131
|
/**
|
|
@@ -136,6 +136,7 @@ private:
|
|
|
136
136
|
template<class Data>
|
|
137
137
|
class FIFOWorkList
|
|
138
138
|
{
|
|
139
|
+
typedef Set<Data> DataSet;
|
|
139
140
|
typedef std::deque<Data> DataDeque;
|
|
140
141
|
public:
|
|
141
142
|
FIFOWorkList() {}
|
|
@@ -147,28 +148,30 @@ public:
|
|
|
147
148
|
return data_list.empty();
|
|
148
149
|
}
|
|
149
150
|
|
|
150
|
-
inline
|
|
151
|
+
inline u32_t size() const
|
|
151
152
|
{
|
|
152
|
-
|
|
153
|
+
assert(data_list.size() == data_set.size() && "list and set must be the same size!");
|
|
154
|
+
return data_list.size();
|
|
153
155
|
}
|
|
154
156
|
|
|
155
|
-
|
|
156
|
-
* Push a data into the work list.
|
|
157
|
-
*/
|
|
158
|
-
inline bool push(const Data& data)
|
|
157
|
+
inline bool find(const Data &data) const
|
|
159
158
|
{
|
|
160
|
-
|
|
161
|
-
return true;
|
|
159
|
+
return data_set.find(data) != data_set.end();
|
|
162
160
|
}
|
|
163
161
|
|
|
164
162
|
/**
|
|
165
|
-
*
|
|
163
|
+
* Push a data into the work list.
|
|
166
164
|
*/
|
|
167
|
-
inline Data
|
|
165
|
+
inline bool push(const Data &data)
|
|
168
166
|
{
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
167
|
+
if (!find(data))
|
|
168
|
+
{
|
|
169
|
+
data_list.push_back(data);
|
|
170
|
+
data_set.insert(data);
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
else
|
|
174
|
+
return false;
|
|
172
175
|
}
|
|
173
176
|
|
|
174
177
|
/**
|
|
@@ -177,16 +180,29 @@ public:
|
|
|
177
180
|
inline void removeFront()
|
|
178
181
|
{
|
|
179
182
|
assert(!empty() && "work list is empty");
|
|
183
|
+
data_set.erase(front());
|
|
180
184
|
data_list.pop_front();
|
|
181
185
|
}
|
|
182
186
|
|
|
183
187
|
/**
|
|
184
188
|
* Get reference of top data from the END of work list.
|
|
185
189
|
*/
|
|
186
|
-
inline Data&
|
|
190
|
+
inline Data &front()
|
|
191
|
+
{
|
|
192
|
+
assert(!empty() && "work list is empty");
|
|
193
|
+
Data &data = data_list.front();
|
|
194
|
+
return data;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Pop a data from the END of work list.
|
|
199
|
+
*/
|
|
200
|
+
inline Data pop()
|
|
187
201
|
{
|
|
188
202
|
assert(!empty() && "work list is empty");
|
|
189
|
-
Data
|
|
203
|
+
Data data = data_list.front();
|
|
204
|
+
data_list.pop_front();
|
|
205
|
+
data_set.erase(data);
|
|
190
206
|
return data;
|
|
191
207
|
}
|
|
192
208
|
|
|
@@ -196,10 +212,12 @@ public:
|
|
|
196
212
|
inline void clear()
|
|
197
213
|
{
|
|
198
214
|
data_list.clear();
|
|
215
|
+
data_set.clear();
|
|
199
216
|
}
|
|
200
217
|
|
|
201
218
|
private:
|
|
202
|
-
|
|
219
|
+
DataSet data_set; ///< store all data in the work list.
|
|
220
|
+
DataDeque data_list; ///< work list using std::vector.
|
|
203
221
|
};
|
|
204
222
|
|
|
205
223
|
/**
|
|
@@ -210,6 +228,7 @@ private:
|
|
|
210
228
|
template<class Data>
|
|
211
229
|
class FILOWorkList
|
|
212
230
|
{
|
|
231
|
+
typedef Set<Data> DataSet;
|
|
213
232
|
typedef std::vector<Data> DataVector;
|
|
214
233
|
public:
|
|
215
234
|
FILOWorkList() {}
|
|
@@ -221,18 +240,30 @@ public:
|
|
|
221
240
|
return data_list.empty();
|
|
222
241
|
}
|
|
223
242
|
|
|
224
|
-
inline
|
|
243
|
+
inline u32_t size() const
|
|
225
244
|
{
|
|
226
|
-
|
|
245
|
+
assert(data_list.size() == data_set.size() && "list and set must be the same size!");
|
|
246
|
+
return data_list.size();
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
inline bool find(const Data &data) const
|
|
250
|
+
{
|
|
251
|
+
return data_set.find(data) != data_set.end();;
|
|
227
252
|
}
|
|
228
253
|
|
|
229
254
|
/**
|
|
230
255
|
* Push a data into the work list.
|
|
231
256
|
*/
|
|
232
|
-
inline bool push(const Data&
|
|
257
|
+
inline bool push(const Data &data)
|
|
233
258
|
{
|
|
234
|
-
|
|
235
|
-
|
|
259
|
+
if (!find(data))
|
|
260
|
+
{
|
|
261
|
+
data_list.push_back(data);
|
|
262
|
+
data_set.insert(data);
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
else
|
|
266
|
+
return false;
|
|
236
267
|
}
|
|
237
268
|
|
|
238
269
|
/**
|
|
@@ -240,8 +271,10 @@ public:
|
|
|
240
271
|
*/
|
|
241
272
|
inline Data pop()
|
|
242
273
|
{
|
|
243
|
-
|
|
244
|
-
|
|
274
|
+
assert(!empty() && "work list is empty");
|
|
275
|
+
Data data = data_list.back();
|
|
276
|
+
data_list.pop_back();
|
|
277
|
+
data_set.erase(data);
|
|
245
278
|
return data;
|
|
246
279
|
}
|
|
247
280
|
|
|
@@ -251,16 +284,17 @@ public:
|
|
|
251
284
|
inline void removeBack()
|
|
252
285
|
{
|
|
253
286
|
assert(!empty() && "work list is empty");
|
|
287
|
+
data_set.erase(back());
|
|
254
288
|
data_list.pop_back();
|
|
255
289
|
}
|
|
256
290
|
|
|
257
291
|
/**
|
|
258
292
|
* Get reference of top data from the END of work list.
|
|
259
293
|
*/
|
|
260
|
-
inline Data&
|
|
294
|
+
inline Data &back()
|
|
261
295
|
{
|
|
262
296
|
assert(!empty() && "work list is empty");
|
|
263
|
-
Data&
|
|
297
|
+
Data &data = data_list.back();
|
|
264
298
|
return data;
|
|
265
299
|
}
|
|
266
300
|
|
|
@@ -270,10 +304,12 @@ public:
|
|
|
270
304
|
inline void clear()
|
|
271
305
|
{
|
|
272
306
|
data_list.clear();
|
|
307
|
+
data_set.clear();
|
|
273
308
|
}
|
|
274
309
|
|
|
275
310
|
private:
|
|
276
|
-
|
|
311
|
+
DataSet data_set; ///< store all data in the work list.
|
|
312
|
+
DataVector data_list; ///< work list using std::vector.
|
|
277
313
|
};
|
|
278
314
|
|
|
279
315
|
} // End namespace SVF
|