Skip to content

Commit 7061807

Browse files
committed
Make the IL iterators real iterators for std::find_if
1 parent 6404414 commit 7061807

File tree

3 files changed

+132
-0
lines changed

3 files changed

+132
-0
lines changed

highlevelilinstruction.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,12 @@ namespace BinaryNinja
181181
{
182182
struct ListIterator
183183
{
184+
typedef std::forward_iterator_tag iterator_category;
185+
typedef uint64_t value_type;
186+
typedef std::ptrdiff_t difference_type;
187+
typedef void pointer;
188+
typedef value_type reference;
189+
184190
#ifdef BINARYNINJACORE_LIBRARY
185191
HighLevelILFunction* function;
186192
#else
@@ -219,6 +225,12 @@ namespace BinaryNinja
219225
{
220226
struct ListIterator
221227
{
228+
typedef std::forward_iterator_tag iterator_category;
229+
typedef size_t value_type;
230+
typedef std::ptrdiff_t difference_type;
231+
typedef void pointer;
232+
typedef value_type reference;
233+
222234
HighLevelILIntegerList::const_iterator pos;
223235
bool operator==(const ListIterator& a) const { return pos == a.pos; }
224236
bool operator!=(const ListIterator& a) const { return pos != a.pos; }
@@ -253,6 +265,12 @@ namespace BinaryNinja
253265
{
254266
struct ListIterator
255267
{
268+
typedef std::forward_iterator_tag iterator_category;
269+
typedef HighLevelILInstruction value_type;
270+
typedef std::ptrdiff_t difference_type;
271+
typedef void pointer;
272+
typedef value_type reference;
273+
256274
HighLevelILIntegerList::const_iterator pos;
257275
bool ast;
258276
size_t instructionIndex;
@@ -292,6 +310,12 @@ namespace BinaryNinja
292310
{
293311
struct ListIterator
294312
{
313+
typedef std::forward_iterator_tag iterator_category;
314+
typedef SSAVariable value_type;
315+
typedef std::ptrdiff_t difference_type;
316+
typedef void pointer;
317+
typedef value_type reference;
318+
295319
HighLevelILIntegerList::const_iterator pos;
296320
bool operator==(const ListIterator& a) const { return pos == a.pos; }
297321
bool operator!=(const ListIterator& a) const { return pos != a.pos; }
@@ -819,6 +843,12 @@ namespace BinaryNinja
819843
{
820844
struct ListIterator
821845
{
846+
typedef std::forward_iterator_tag iterator_category;
847+
typedef HighLevelILOperand value_type;
848+
typedef std::ptrdiff_t difference_type;
849+
typedef void pointer;
850+
typedef value_type reference;
851+
822852
const HighLevelILOperandList* owner;
823853
_STD_VECTOR<HighLevelILOperandUsage>::const_iterator pos;
824854
bool operator==(const ListIterator& a) const { return pos == a.pos; }

lowlevelilinstruction.h

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,12 @@ namespace BinaryNinja
371371
{
372372
struct ListIterator
373373
{
374+
typedef std::forward_iterator_tag iterator_category;
375+
typedef uint64_t value_type;
376+
typedef std::ptrdiff_t difference_type;
377+
typedef void pointer;
378+
typedef value_type reference;
379+
374380
#ifdef BINARYNINJACORE_LIBRARY
375381
LowLevelILFunction* function;
376382
const BNLowLevelILInstruction* instr;
@@ -410,6 +416,12 @@ namespace BinaryNinja
410416
{
411417
struct ListIterator
412418
{
419+
typedef std::forward_iterator_tag iterator_category;
420+
typedef size_t value_type;
421+
typedef std::ptrdiff_t difference_type;
422+
typedef void pointer;
423+
typedef value_type reference;
424+
413425
LowLevelILIntegerList::const_iterator pos;
414426
bool operator==(const ListIterator& a) const { return pos == a.pos; }
415427
bool operator!=(const ListIterator& a) const { return pos != a.pos; }
@@ -444,6 +456,12 @@ namespace BinaryNinja
444456
{
445457
struct ListIterator
446458
{
459+
typedef std::forward_iterator_tag iterator_category;
460+
typedef std::pair<uint64_t, size_t> value_type;
461+
typedef std::ptrdiff_t difference_type;
462+
typedef void pointer;
463+
typedef value_type reference;
464+
447465
LowLevelILIntegerList::const_iterator pos;
448466
bool operator==(const ListIterator& a) const { return pos == a.pos; }
449467
bool operator!=(const ListIterator& a) const { return pos != a.pos; }
@@ -479,6 +497,12 @@ namespace BinaryNinja
479497
{
480498
struct ListIterator
481499
{
500+
typedef std::forward_iterator_tag iterator_category;
501+
typedef LowLevelILInstruction value_type;
502+
typedef std::ptrdiff_t difference_type;
503+
typedef void pointer;
504+
typedef value_type reference;
505+
482506
LowLevelILIntegerList::const_iterator pos;
483507
size_t instructionIndex;
484508
bool operator==(const ListIterator& a) const { return pos == a.pos; }
@@ -516,6 +540,12 @@ namespace BinaryNinja
516540
{
517541
struct ListIterator
518542
{
543+
typedef std::forward_iterator_tag iterator_category;
544+
typedef RegisterOrFlag value_type;
545+
typedef std::ptrdiff_t difference_type;
546+
typedef void pointer;
547+
typedef value_type reference;
548+
519549
LowLevelILIntegerList::const_iterator pos;
520550
bool operator==(const ListIterator& a) const { return pos == a.pos; }
521551
bool operator!=(const ListIterator& a) const { return pos != a.pos; }
@@ -550,6 +580,12 @@ namespace BinaryNinja
550580
{
551581
struct ListIterator
552582
{
583+
typedef std::forward_iterator_tag iterator_category;
584+
typedef SSARegister value_type;
585+
typedef std::ptrdiff_t difference_type;
586+
typedef void pointer;
587+
typedef value_type reference;
588+
553589
LowLevelILIntegerList::const_iterator pos;
554590
bool operator==(const ListIterator& a) const { return pos == a.pos; }
555591
bool operator!=(const ListIterator& a) const { return pos != a.pos; }
@@ -585,6 +621,12 @@ namespace BinaryNinja
585621
{
586622
struct ListIterator
587623
{
624+
typedef std::forward_iterator_tag iterator_category;
625+
typedef SSARegisterStack value_type;
626+
typedef std::ptrdiff_t difference_type;
627+
typedef void pointer;
628+
typedef value_type reference;
629+
588630
LowLevelILIntegerList::const_iterator pos;
589631
bool operator==(const ListIterator& a) const { return pos == a.pos; }
590632
bool operator!=(const ListIterator& a) const { return pos != a.pos; }
@@ -620,6 +662,12 @@ namespace BinaryNinja
620662
{
621663
struct ListIterator
622664
{
665+
typedef std::forward_iterator_tag iterator_category;
666+
typedef SSAFlag value_type;
667+
typedef std::ptrdiff_t difference_type;
668+
typedef void pointer;
669+
typedef value_type reference;
670+
623671
LowLevelILIntegerList::const_iterator pos;
624672
bool operator==(const ListIterator& a) const { return pos == a.pos; }
625673
bool operator!=(const ListIterator& a) const { return pos != a.pos; }
@@ -655,6 +703,12 @@ namespace BinaryNinja
655703
{
656704
struct ListIterator
657705
{
706+
typedef std::forward_iterator_tag iterator_category;
707+
typedef SSARegisterOrFlag value_type;
708+
typedef std::ptrdiff_t difference_type;
709+
typedef void pointer;
710+
typedef value_type reference;
711+
658712
LowLevelILIntegerList::const_iterator pos;
659713
bool operator==(const ListIterator& a) const { return pos == a.pos; }
660714
bool operator!=(const ListIterator& a) const { return pos != a.pos; }
@@ -1227,6 +1281,12 @@ namespace BinaryNinja
12271281
{
12281282
struct ListIterator
12291283
{
1284+
typedef std::forward_iterator_tag iterator_category;
1285+
typedef LowLevelILOperand value_type;
1286+
typedef std::ptrdiff_t difference_type;
1287+
typedef void pointer;
1288+
typedef value_type reference;
1289+
12301290
const LowLevelILOperandList* owner;
12311291
_STD_VECTOR<LowLevelILOperandUsage>::const_iterator pos;
12321292
bool operator==(const ListIterator& a) const { return pos == a.pos; }

mediumlevelilinstruction.h

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,12 @@ namespace BinaryNinja
220220
{
221221
struct ListIterator
222222
{
223+
typedef std::forward_iterator_tag iterator_category;
224+
typedef uint64_t value_type;
225+
typedef std::ptrdiff_t difference_type;
226+
typedef void pointer;
227+
typedef value_type reference;
228+
223229
#ifdef BINARYNINJACORE_LIBRARY
224230
MediumLevelILFunction* function;
225231
#else
@@ -258,6 +264,12 @@ namespace BinaryNinja
258264
{
259265
struct ListIterator
260266
{
267+
typedef std::forward_iterator_tag iterator_category;
268+
typedef size_t value_type;
269+
typedef std::ptrdiff_t difference_type;
270+
typedef void pointer;
271+
typedef value_type reference;
272+
261273
MediumLevelILIntegerList::const_iterator pos;
262274
bool operator==(const ListIterator& a) const { return pos == a.pos; }
263275
bool operator!=(const ListIterator& a) const { return pos != a.pos; }
@@ -292,6 +304,12 @@ namespace BinaryNinja
292304
{
293305
struct ListIterator
294306
{
307+
typedef std::forward_iterator_tag iterator_category;
308+
typedef std::pair<uint64_t, size_t> value_type;
309+
typedef std::ptrdiff_t difference_type;
310+
typedef void pointer;
311+
typedef value_type reference;
312+
295313
MediumLevelILIntegerList::const_iterator pos;
296314
bool operator==(const ListIterator& a) const { return pos == a.pos; }
297315
bool operator!=(const ListIterator& a) const { return pos != a.pos; }
@@ -327,6 +345,12 @@ namespace BinaryNinja
327345
{
328346
struct ListIterator
329347
{
348+
typedef std::forward_iterator_tag iterator_category;
349+
typedef Variable value_type;
350+
typedef std::ptrdiff_t difference_type;
351+
typedef void pointer;
352+
typedef value_type reference;
353+
330354
MediumLevelILIntegerList::const_iterator pos;
331355
bool operator==(const ListIterator& a) const { return pos == a.pos; }
332356
bool operator!=(const ListIterator& a) const { return pos != a.pos; }
@@ -361,6 +385,12 @@ namespace BinaryNinja
361385
{
362386
struct ListIterator
363387
{
388+
typedef std::forward_iterator_tag iterator_category;
389+
typedef SSAVariable value_type;
390+
typedef std::ptrdiff_t difference_type;
391+
typedef void pointer;
392+
typedef value_type reference;
393+
364394
MediumLevelILIntegerList::const_iterator pos;
365395
bool operator==(const ListIterator& a) const { return pos == a.pos; }
366396
bool operator!=(const ListIterator& a) const { return pos != a.pos; }
@@ -397,6 +427,12 @@ namespace BinaryNinja
397427
{
398428
struct ListIterator
399429
{
430+
typedef std::forward_iterator_tag iterator_category;
431+
typedef MediumLevelILInstruction value_type;
432+
typedef std::ptrdiff_t difference_type;
433+
typedef void pointer;
434+
typedef value_type reference;
435+
400436
size_t instructionIndex;
401437
MediumLevelILIntegerList::const_iterator pos;
402438
bool operator==(const ListIterator& a) const { return pos == a.pos; }
@@ -878,6 +914,12 @@ namespace BinaryNinja
878914
{
879915
struct ListIterator
880916
{
917+
typedef std::forward_iterator_tag iterator_category;
918+
typedef MediumLevelILOperand value_type;
919+
typedef std::ptrdiff_t difference_type;
920+
typedef void pointer;
921+
typedef value_type reference;
922+
881923
const MediumLevelILOperandList* owner;
882924
_STD_VECTOR<MediumLevelILOperandUsage>::const_iterator pos;
883925
bool operator==(const ListIterator& a) const { return pos == a.pos; }

0 commit comments

Comments
 (0)