ROSE 2.1.0
Loading...
Searching...
No Matches
FlatBufferSchema.h
1// automatically generated by the FlatBuffers compiler, do not modify
2
3#include <RoseFirst.h>
4
5
6#ifndef ROSE_BinaryAnalysis_Serialization_FlatBufferSchema_H
7#define ROSE_BinaryAnalysis_Serialization_FlatBufferSchema_H
8
9#include "flatbuffers/flatbuffers.h"
10
11// Ensure the included flatbuffers.h is the same version as when this file was
12// generated, otherwise it may not be compatible.
13static_assert(FLATBUFFERS_VERSION_MAJOR == 25 &&
14 FLATBUFFERS_VERSION_MINOR == 9 &&
15 FLATBUFFERS_VERSION_REVISION == 23,
16 "Non-compatible flatbuffers version included");
17
18namespace Rose {
19namespace BinaryAnalysis {
20namespace Serialization {
21namespace FlatBuffers {
22
23struct Architecture;
24struct ArchitectureBuilder;
25
26struct Segment;
27struct SegmentBuilder;
28
29struct MemoryMap;
30struct MemoryMapBuilder;
31
32struct Instruction;
33struct InstructionBuilder;
34
35struct InstructionList;
36struct InstructionListBuilder;
37
38struct BasicBlock;
39struct BasicBlockBuilder;
40
41struct BasicBlockList;
42struct BasicBlockListBuilder;
43
44struct Function;
45struct FunctionBuilder;
46
47struct FunctionList;
48struct FunctionListBuilder;
49
50struct CfgEdgeData;
51struct CfgEdgeDataBuilder;
52
53struct AddressTarget;
54struct AddressTargetBuilder;
55
56struct IndeterminateTarget;
57struct IndeterminateTargetBuilder;
58
59struct CfgEdge;
60struct CfgEdgeBuilder;
61
62struct Cfg;
63struct CfgBuilder;
64
65struct Root;
66struct RootBuilder;
67
72enum class Accessibility : uint8_t {
73 EXECUTABLE = 1,
74 WRITABLE = 2,
75 READABLE = 4,
76 IMMUTABLE = 8,
77 PRIVATE = 16,
78 MIN = EXECUTABLE,
79 MAX = PRIVATE
80};
81
82inline const Accessibility (&EnumValuesAccessibility())[5] {
83 static const Accessibility values[] = {
84 Accessibility::EXECUTABLE,
85 Accessibility::WRITABLE,
86 Accessibility::READABLE,
87 Accessibility::IMMUTABLE,
88 Accessibility::PRIVATE
89 };
90 return values;
91}
92
93inline const char * const *EnumNamesAccessibility() {
94 static const char * const names[17] = {
95 "EXECUTABLE",
96 "WRITABLE",
97 "",
98 "READABLE",
99 "",
100 "",
101 "",
102 "IMMUTABLE",
103 "",
104 "",
105 "",
106 "",
107 "",
108 "",
109 "",
110 "PRIVATE",
111 nullptr
112 };
113 return names;
114}
115
116inline const char *EnumNameAccessibility(Accessibility e) {
117 if (::flatbuffers::IsOutRange(e, Accessibility::EXECUTABLE, Accessibility::PRIVATE)) return "";
118 const size_t index = static_cast<size_t>(e) - static_cast<size_t>(Accessibility::EXECUTABLE);
119 return EnumNamesAccessibility()[index];
120}
121
122enum class Endianness : uint8_t {
124 ORDER_LSB = 1,
125 ORDER_MSB = 2,
126 MIN = ORDER_UNSPECIFIED,
127 MAX = ORDER_MSB
128};
129
130inline const Endianness (&EnumValuesEndianness())[3] {
131 static const Endianness values[] = {
132 Endianness::ORDER_UNSPECIFIED,
133 Endianness::ORDER_LSB,
134 Endianness::ORDER_MSB
135 };
136 return values;
137}
138
139inline const char * const *EnumNamesEndianness() {
140 static const char * const names[4] = {
141 "ORDER_UNSPECIFIED",
142 "ORDER_LSB",
143 "ORDER_MSB",
144 nullptr
145 };
146 return names;
147}
148
149inline const char *EnumNameEndianness(Endianness e) {
150 if (::flatbuffers::IsOutRange(e, Endianness::ORDER_UNSPECIFIED, Endianness::ORDER_MSB)) return "";
151 const size_t index = static_cast<size_t>(e);
152 return EnumNamesEndianness()[index];
153}
154
158enum class CfgEdgePurpose : uint8_t {
159 FunctionCall = 0,
160 FunctionTransfer = 1,
161 FunctionReturn = 2,
162 CallReturn = 3,
163 Normal = 4,
164 MIN = FunctionCall,
165 MAX = Normal
166};
167
168inline const CfgEdgePurpose (&EnumValuesCfgEdgePurpose())[5] {
169 static const CfgEdgePurpose values[] = {
170 CfgEdgePurpose::FunctionCall,
171 CfgEdgePurpose::FunctionTransfer,
172 CfgEdgePurpose::FunctionReturn,
173 CfgEdgePurpose::CallReturn,
174 CfgEdgePurpose::Normal
175 };
176 return values;
177}
178
179inline const char * const *EnumNamesCfgEdgePurpose() {
180 static const char * const names[6] = {
181 "FunctionCall",
182 "FunctionTransfer",
183 "FunctionReturn",
184 "CallReturn",
185 "Normal",
186 nullptr
187 };
188 return names;
189}
190
191inline const char *EnumNameCfgEdgePurpose(CfgEdgePurpose e) {
192 if (::flatbuffers::IsOutRange(e, CfgEdgePurpose::FunctionCall, CfgEdgePurpose::Normal)) return "";
193 const size_t index = static_cast<size_t>(e);
194 return EnumNamesCfgEdgePurpose()[index];
195}
196
199enum class CfgEdgeTarget : uint8_t {
200 NONE = 0,
201 AddressTarget = 1,
202 IndeterminateTarget = 2,
203 MIN = NONE,
204 MAX = IndeterminateTarget
205};
206
207inline const CfgEdgeTarget (&EnumValuesCfgEdgeTarget())[3] {
208 static const CfgEdgeTarget values[] = {
209 CfgEdgeTarget::NONE,
210 CfgEdgeTarget::AddressTarget,
211 CfgEdgeTarget::IndeterminateTarget
212 };
213 return values;
214}
215
216inline const char * const *EnumNamesCfgEdgeTarget() {
217 static const char * const names[4] = {
218 "NONE",
219 "AddressTarget",
220 "IndeterminateTarget",
221 nullptr
222 };
223 return names;
224}
225
226inline const char *EnumNameCfgEdgeTarget(CfgEdgeTarget e) {
227 if (::flatbuffers::IsOutRange(e, CfgEdgeTarget::NONE, CfgEdgeTarget::IndeterminateTarget)) return "";
228 const size_t index = static_cast<size_t>(e);
229 return EnumNamesCfgEdgeTarget()[index];
230}
231
232template<typename T> struct CfgEdgeTargetTraits {
233 static const CfgEdgeTarget enum_value = CfgEdgeTarget::NONE;
234};
235
236template<> struct CfgEdgeTargetTraits<Rose::BinaryAnalysis::Serialization::FlatBuffers::AddressTarget> {
237 static const CfgEdgeTarget enum_value = CfgEdgeTarget::AddressTarget;
238};
239
240template<> struct CfgEdgeTargetTraits<Rose::BinaryAnalysis::Serialization::FlatBuffers::IndeterminateTarget> {
241 static const CfgEdgeTarget enum_value = CfgEdgeTarget::IndeterminateTarget;
242};
243
244bool VerifyCfgEdgeTarget(::flatbuffers::Verifier &verifier, const void *obj, CfgEdgeTarget type);
245bool VerifyCfgEdgeTargetVector(::flatbuffers::Verifier &verifier, const ::flatbuffers::Vector<::flatbuffers::Offset<void>> *values, const ::flatbuffers::Vector<CfgEdgeTarget> *types);
246
250struct Architecture FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
252 enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
253 VT_NAME = 4
254 };
255 const ::flatbuffers::String *name() const {
256 return GetPointer<const ::flatbuffers::String *>(VT_NAME);
257 }
258 bool Verify(::flatbuffers::Verifier &verifier) const {
259 return VerifyTableStart(verifier) &&
260 VerifyOffset(verifier, VT_NAME) &&
261 verifier.VerifyString(name()) &&
262 verifier.EndTable();
263 }
264};
265
267 typedef Architecture Table;
268 ::flatbuffers::FlatBufferBuilder &fbb_;
269 ::flatbuffers::uoffset_t start_;
270 void add_name(::flatbuffers::Offset<::flatbuffers::String> name) {
271 fbb_.AddOffset(Architecture::VT_NAME, name);
272 }
273 explicit ArchitectureBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
274 : fbb_(_fbb) {
275 start_ = fbb_.StartTable();
276 }
277 ::flatbuffers::Offset<Architecture> Finish() {
278 const auto end = fbb_.EndTable(start_);
279 auto o = ::flatbuffers::Offset<Architecture>(end);
280 return o;
281 }
282};
283
284inline ::flatbuffers::Offset<Architecture> CreateArchitecture(
285 ::flatbuffers::FlatBufferBuilder &_fbb,
286 ::flatbuffers::Offset<::flatbuffers::String> name = 0) {
287 ArchitectureBuilder builder_(_fbb);
288 builder_.add_name(name);
289 return builder_.Finish();
290}
291
292inline ::flatbuffers::Offset<Architecture> CreateArchitectureDirect(
293 ::flatbuffers::FlatBufferBuilder &_fbb,
294 const char *name = nullptr) {
295 auto name__ = name ? _fbb.CreateString(name) : 0;
296 return Rose::BinaryAnalysis::Serialization::FlatBuffers::CreateArchitecture(
297 _fbb,
298 name__);
299}
300
301struct Segment FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
302 typedef SegmentBuilder Builder;
303 enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
304 VT_ADDRESS = 4,
305 VT_BYTES = 6,
306 VT_ACCESSIBILITY = 8,
307 VT_NAME = 10
308 };
309 uint64_t address() const {
310 return GetField<uint64_t>(VT_ADDRESS, 0);
311 }
312 const ::flatbuffers::Vector<uint8_t> *bytes() const {
313 return GetPointer<const ::flatbuffers::Vector<uint8_t> *>(VT_BYTES);
314 }
316 uint8_t accessibility() const {
317 return GetField<uint8_t>(VT_ACCESSIBILITY, 0);
318 }
320 const ::flatbuffers::String *name() const {
321 return GetPointer<const ::flatbuffers::String *>(VT_NAME);
322 }
323 bool Verify(::flatbuffers::Verifier &verifier) const {
324 return VerifyTableStart(verifier) &&
325 VerifyField<uint64_t>(verifier, VT_ADDRESS, 8) &&
326 VerifyOffsetRequired(verifier, VT_BYTES) &&
327 verifier.VerifyVector(bytes()) &&
328 VerifyField<uint8_t>(verifier, VT_ACCESSIBILITY, 1) &&
329 VerifyOffset(verifier, VT_NAME) &&
330 verifier.VerifyString(name()) &&
331 verifier.EndTable();
332 }
333};
334
336 typedef Segment Table;
337 ::flatbuffers::FlatBufferBuilder &fbb_;
338 ::flatbuffers::uoffset_t start_;
339 void add_address(uint64_t address) {
340 fbb_.AddElement<uint64_t>(Segment::VT_ADDRESS, address, 0);
341 }
342 void add_bytes(::flatbuffers::Offset<::flatbuffers::Vector<uint8_t>> bytes) {
343 fbb_.AddOffset(Segment::VT_BYTES, bytes);
344 }
345 void add_accessibility(uint8_t accessibility) {
346 fbb_.AddElement<uint8_t>(Segment::VT_ACCESSIBILITY, accessibility, 0);
347 }
348 void add_name(::flatbuffers::Offset<::flatbuffers::String> name) {
349 fbb_.AddOffset(Segment::VT_NAME, name);
350 }
351 explicit SegmentBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
352 : fbb_(_fbb) {
353 start_ = fbb_.StartTable();
354 }
355 ::flatbuffers::Offset<Segment> Finish() {
356 const auto end = fbb_.EndTable(start_);
357 auto o = ::flatbuffers::Offset<Segment>(end);
358 fbb_.Required(o, Segment::VT_BYTES);
359 return o;
360 }
361};
362
363inline ::flatbuffers::Offset<Segment> CreateSegment(
364 ::flatbuffers::FlatBufferBuilder &_fbb,
365 uint64_t address = 0,
366 ::flatbuffers::Offset<::flatbuffers::Vector<uint8_t>> bytes = 0,
367 uint8_t accessibility = 0,
368 ::flatbuffers::Offset<::flatbuffers::String> name = 0) {
369 SegmentBuilder builder_(_fbb);
370 builder_.add_address(address);
371 builder_.add_name(name);
372 builder_.add_bytes(bytes);
373 builder_.add_accessibility(accessibility);
374 return builder_.Finish();
375}
376
377inline ::flatbuffers::Offset<Segment> CreateSegmentDirect(
378 ::flatbuffers::FlatBufferBuilder &_fbb,
379 uint64_t address = 0,
380 const std::vector<uint8_t> *bytes = nullptr,
381 uint8_t accessibility = 0,
382 const char *name = nullptr) {
383 auto bytes__ = bytes ? _fbb.CreateVector<uint8_t>(*bytes) : 0;
384 auto name__ = name ? _fbb.CreateString(name) : 0;
385 return Rose::BinaryAnalysis::Serialization::FlatBuffers::CreateSegment(
386 _fbb,
387 address,
388 bytes__,
389 accessibility,
390 name__);
391}
392
393struct MemoryMap FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
394 typedef MemoryMapBuilder Builder;
395 enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
396 VT_ENDIANNESS = 4,
397 VT_SEGMENTS = 6
398 };
399 Rose::BinaryAnalysis::Serialization::FlatBuffers::Endianness endianness() const {
400 return static_cast<Rose::BinaryAnalysis::Serialization::FlatBuffers::Endianness>(GetField<uint8_t>(VT_ENDIANNESS, 0));
401 }
402 const ::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Segment>> *segments() const {
403 return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Segment>> *>(VT_SEGMENTS);
404 }
405 bool Verify(::flatbuffers::Verifier &verifier) const {
406 return VerifyTableStart(verifier) &&
407 VerifyField<uint8_t>(verifier, VT_ENDIANNESS, 1) &&
408 VerifyOffsetRequired(verifier, VT_SEGMENTS) &&
409 verifier.VerifyVector(segments()) &&
410 verifier.VerifyVectorOfTables(segments()) &&
411 verifier.EndTable();
412 }
413};
414
416 typedef MemoryMap Table;
417 ::flatbuffers::FlatBufferBuilder &fbb_;
418 ::flatbuffers::uoffset_t start_;
419 void add_endianness(Rose::BinaryAnalysis::Serialization::FlatBuffers::Endianness endianness) {
420 fbb_.AddElement<uint8_t>(MemoryMap::VT_ENDIANNESS, static_cast<uint8_t>(endianness), 0);
421 }
422 void add_segments(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Segment>>> segments) {
423 fbb_.AddOffset(MemoryMap::VT_SEGMENTS, segments);
424 }
425 explicit MemoryMapBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
426 : fbb_(_fbb) {
427 start_ = fbb_.StartTable();
428 }
429 ::flatbuffers::Offset<MemoryMap> Finish() {
430 const auto end = fbb_.EndTable(start_);
431 auto o = ::flatbuffers::Offset<MemoryMap>(end);
432 fbb_.Required(o, MemoryMap::VT_SEGMENTS);
433 return o;
434 }
435};
436
437inline ::flatbuffers::Offset<MemoryMap> CreateMemoryMap(
438 ::flatbuffers::FlatBufferBuilder &_fbb,
439 Rose::BinaryAnalysis::Serialization::FlatBuffers::Endianness endianness = Rose::BinaryAnalysis::Serialization::FlatBuffers::Endianness::ORDER_UNSPECIFIED,
440 ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Segment>>> segments = 0) {
441 MemoryMapBuilder builder_(_fbb);
442 builder_.add_segments(segments);
443 builder_.add_endianness(endianness);
444 return builder_.Finish();
445}
446
447inline ::flatbuffers::Offset<MemoryMap> CreateMemoryMapDirect(
448 ::flatbuffers::FlatBufferBuilder &_fbb,
449 Rose::BinaryAnalysis::Serialization::FlatBuffers::Endianness endianness = Rose::BinaryAnalysis::Serialization::FlatBuffers::Endianness::ORDER_UNSPECIFIED,
450 const std::vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Segment>> *segments = nullptr) {
451 auto segments__ = segments ? _fbb.CreateVector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Segment>>(*segments) : 0;
452 return Rose::BinaryAnalysis::Serialization::FlatBuffers::CreateMemoryMap(
453 _fbb,
454 endianness,
455 segments__);
456}
457
462struct Instruction FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
463 typedef InstructionBuilder Builder;
464 enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
465 VT_ADDRESS = 4,
466 VT_BYTES = 6,
467 VT_MNEMONIC = 8,
468 VT_OPERANDS = 10
469 };
470 uint64_t address() const {
471 return GetField<uint64_t>(VT_ADDRESS, 0);
472 }
473 const ::flatbuffers::Vector<uint8_t> *bytes() const {
474 return GetPointer<const ::flatbuffers::Vector<uint8_t> *>(VT_BYTES);
475 }
477 const ::flatbuffers::String *mnemonic() const {
478 return GetPointer<const ::flatbuffers::String *>(VT_MNEMONIC);
479 }
481 const ::flatbuffers::String *operands() const {
482 return GetPointer<const ::flatbuffers::String *>(VT_OPERANDS);
483 }
484 bool Verify(::flatbuffers::Verifier &verifier) const {
485 return VerifyTableStart(verifier) &&
486 VerifyField<uint64_t>(verifier, VT_ADDRESS, 8) &&
487 VerifyOffsetRequired(verifier, VT_BYTES) &&
488 verifier.VerifyVector(bytes()) &&
489 VerifyOffset(verifier, VT_MNEMONIC) &&
490 verifier.VerifyString(mnemonic()) &&
491 VerifyOffset(verifier, VT_OPERANDS) &&
492 verifier.VerifyString(operands()) &&
493 verifier.EndTable();
494 }
495};
496
498 typedef Instruction Table;
499 ::flatbuffers::FlatBufferBuilder &fbb_;
500 ::flatbuffers::uoffset_t start_;
501 void add_address(uint64_t address) {
502 fbb_.AddElement<uint64_t>(Instruction::VT_ADDRESS, address, 0);
503 }
504 void add_bytes(::flatbuffers::Offset<::flatbuffers::Vector<uint8_t>> bytes) {
505 fbb_.AddOffset(Instruction::VT_BYTES, bytes);
506 }
507 void add_mnemonic(::flatbuffers::Offset<::flatbuffers::String> mnemonic) {
508 fbb_.AddOffset(Instruction::VT_MNEMONIC, mnemonic);
509 }
510 void add_operands(::flatbuffers::Offset<::flatbuffers::String> operands) {
511 fbb_.AddOffset(Instruction::VT_OPERANDS, operands);
512 }
513 explicit InstructionBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
514 : fbb_(_fbb) {
515 start_ = fbb_.StartTable();
516 }
517 ::flatbuffers::Offset<Instruction> Finish() {
518 const auto end = fbb_.EndTable(start_);
519 auto o = ::flatbuffers::Offset<Instruction>(end);
520 fbb_.Required(o, Instruction::VT_BYTES);
521 return o;
522 }
523};
524
525inline ::flatbuffers::Offset<Instruction> CreateInstruction(
526 ::flatbuffers::FlatBufferBuilder &_fbb,
527 uint64_t address = 0,
528 ::flatbuffers::Offset<::flatbuffers::Vector<uint8_t>> bytes = 0,
529 ::flatbuffers::Offset<::flatbuffers::String> mnemonic = 0,
530 ::flatbuffers::Offset<::flatbuffers::String> operands = 0) {
531 InstructionBuilder builder_(_fbb);
532 builder_.add_address(address);
533 builder_.add_operands(operands);
534 builder_.add_mnemonic(mnemonic);
535 builder_.add_bytes(bytes);
536 return builder_.Finish();
537}
538
539inline ::flatbuffers::Offset<Instruction> CreateInstructionDirect(
540 ::flatbuffers::FlatBufferBuilder &_fbb,
541 uint64_t address = 0,
542 const std::vector<uint8_t> *bytes = nullptr,
543 const char *mnemonic = nullptr,
544 const char *operands = nullptr) {
545 auto bytes__ = bytes ? _fbb.CreateVector<uint8_t>(*bytes) : 0;
546 auto mnemonic__ = mnemonic ? _fbb.CreateString(mnemonic) : 0;
547 auto operands__ = operands ? _fbb.CreateString(operands) : 0;
548 return Rose::BinaryAnalysis::Serialization::FlatBuffers::CreateInstruction(
549 _fbb,
550 address,
551 bytes__,
552 mnemonic__,
553 operands__);
554}
555
557struct InstructionList FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
558 typedef InstructionListBuilder Builder;
559 enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
560 VT_INSTRUCTIONS = 4
561 };
562 const ::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Instruction>> *instructions() const {
563 return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Instruction>> *>(VT_INSTRUCTIONS);
564 }
565 bool Verify(::flatbuffers::Verifier &verifier) const {
566 return VerifyTableStart(verifier) &&
567 VerifyOffsetRequired(verifier, VT_INSTRUCTIONS) &&
568 verifier.VerifyVector(instructions()) &&
569 verifier.VerifyVectorOfTables(instructions()) &&
570 verifier.EndTable();
571 }
572};
573
575 typedef InstructionList Table;
576 ::flatbuffers::FlatBufferBuilder &fbb_;
577 ::flatbuffers::uoffset_t start_;
578 void add_instructions(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Instruction>>> instructions) {
579 fbb_.AddOffset(InstructionList::VT_INSTRUCTIONS, instructions);
580 }
581 explicit InstructionListBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
582 : fbb_(_fbb) {
583 start_ = fbb_.StartTable();
584 }
585 ::flatbuffers::Offset<InstructionList> Finish() {
586 const auto end = fbb_.EndTable(start_);
587 auto o = ::flatbuffers::Offset<InstructionList>(end);
588 fbb_.Required(o, InstructionList::VT_INSTRUCTIONS);
589 return o;
590 }
591};
592
593inline ::flatbuffers::Offset<InstructionList> CreateInstructionList(
594 ::flatbuffers::FlatBufferBuilder &_fbb,
595 ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Instruction>>> instructions = 0) {
596 InstructionListBuilder builder_(_fbb);
597 builder_.add_instructions(instructions);
598 return builder_.Finish();
599}
600
601inline ::flatbuffers::Offset<InstructionList> CreateInstructionListDirect(
602 ::flatbuffers::FlatBufferBuilder &_fbb,
603 const std::vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Instruction>> *instructions = nullptr) {
604 auto instructions__ = instructions ? _fbb.CreateVector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Instruction>>(*instructions) : 0;
605 return Rose::BinaryAnalysis::Serialization::FlatBuffers::CreateInstructionList(
606 _fbb,
607 instructions__);
608}
609
615struct BasicBlock FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
616 typedef BasicBlockBuilder Builder;
617 enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
618 VT_ADDRESSES = 4
619 };
621 const ::flatbuffers::Vector<uint64_t> *addresses() const {
622 return GetPointer<const ::flatbuffers::Vector<uint64_t> *>(VT_ADDRESSES);
623 }
624 bool Verify(::flatbuffers::Verifier &verifier) const {
625 return VerifyTableStart(verifier) &&
626 VerifyOffsetRequired(verifier, VT_ADDRESSES) &&
627 verifier.VerifyVector(addresses()) &&
628 verifier.EndTable();
629 }
630};
631
633 typedef BasicBlock Table;
634 ::flatbuffers::FlatBufferBuilder &fbb_;
635 ::flatbuffers::uoffset_t start_;
636 void add_addresses(::flatbuffers::Offset<::flatbuffers::Vector<uint64_t>> addresses) {
637 fbb_.AddOffset(BasicBlock::VT_ADDRESSES, addresses);
638 }
639 explicit BasicBlockBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
640 : fbb_(_fbb) {
641 start_ = fbb_.StartTable();
642 }
643 ::flatbuffers::Offset<BasicBlock> Finish() {
644 const auto end = fbb_.EndTable(start_);
645 auto o = ::flatbuffers::Offset<BasicBlock>(end);
646 fbb_.Required(o, BasicBlock::VT_ADDRESSES);
647 return o;
648 }
649};
650
651inline ::flatbuffers::Offset<BasicBlock> CreateBasicBlock(
652 ::flatbuffers::FlatBufferBuilder &_fbb,
653 ::flatbuffers::Offset<::flatbuffers::Vector<uint64_t>> addresses = 0) {
654 BasicBlockBuilder builder_(_fbb);
655 builder_.add_addresses(addresses);
656 return builder_.Finish();
657}
658
659inline ::flatbuffers::Offset<BasicBlock> CreateBasicBlockDirect(
660 ::flatbuffers::FlatBufferBuilder &_fbb,
661 const std::vector<uint64_t> *addresses = nullptr) {
662 auto addresses__ = addresses ? _fbb.CreateVector<uint64_t>(*addresses) : 0;
663 return Rose::BinaryAnalysis::Serialization::FlatBuffers::CreateBasicBlock(
664 _fbb,
665 addresses__);
666}
667
669struct BasicBlockList FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
670 typedef BasicBlockListBuilder Builder;
671 enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
672 VT_BASIC_BLOCKS = 4
673 };
675 const ::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::BasicBlock>> *basic_blocks() const {
676 return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::BasicBlock>> *>(VT_BASIC_BLOCKS);
677 }
678 bool Verify(::flatbuffers::Verifier &verifier) const {
679 return VerifyTableStart(verifier) &&
680 VerifyOffsetRequired(verifier, VT_BASIC_BLOCKS) &&
681 verifier.VerifyVector(basic_blocks()) &&
682 verifier.VerifyVectorOfTables(basic_blocks()) &&
683 verifier.EndTable();
684 }
685};
686
688 typedef BasicBlockList Table;
689 ::flatbuffers::FlatBufferBuilder &fbb_;
690 ::flatbuffers::uoffset_t start_;
691 void add_basic_blocks(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::BasicBlock>>> basic_blocks) {
692 fbb_.AddOffset(BasicBlockList::VT_BASIC_BLOCKS, basic_blocks);
693 }
694 explicit BasicBlockListBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
695 : fbb_(_fbb) {
696 start_ = fbb_.StartTable();
697 }
698 ::flatbuffers::Offset<BasicBlockList> Finish() {
699 const auto end = fbb_.EndTable(start_);
700 auto o = ::flatbuffers::Offset<BasicBlockList>(end);
701 fbb_.Required(o, BasicBlockList::VT_BASIC_BLOCKS);
702 return o;
703 }
704};
705
706inline ::flatbuffers::Offset<BasicBlockList> CreateBasicBlockList(
707 ::flatbuffers::FlatBufferBuilder &_fbb,
708 ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::BasicBlock>>> basic_blocks = 0) {
709 BasicBlockListBuilder builder_(_fbb);
710 builder_.add_basic_blocks(basic_blocks);
711 return builder_.Finish();
712}
713
714inline ::flatbuffers::Offset<BasicBlockList> CreateBasicBlockListDirect(
715 ::flatbuffers::FlatBufferBuilder &_fbb,
716 const std::vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::BasicBlock>> *basic_blocks = nullptr) {
717 auto basic_blocks__ = basic_blocks ? _fbb.CreateVector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::BasicBlock>>(*basic_blocks) : 0;
718 return Rose::BinaryAnalysis::Serialization::FlatBuffers::CreateBasicBlockList(
719 _fbb,
720 basic_blocks__);
721}
722
726struct Function FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
727 typedef FunctionBuilder Builder;
728 enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
729 VT_ENTRY_ADDR = 4,
730 VT_INSTRUCTIONS = 6,
731 VT_NAME = 8
732 };
733 uint64_t entry_addr() const {
734 return GetField<uint64_t>(VT_ENTRY_ADDR, 0);
735 }
737 const ::flatbuffers::Vector<uint64_t> *instructions() const {
738 return GetPointer<const ::flatbuffers::Vector<uint64_t> *>(VT_INSTRUCTIONS);
739 }
741 const ::flatbuffers::String *name() const {
742 return GetPointer<const ::flatbuffers::String *>(VT_NAME);
743 }
744 bool Verify(::flatbuffers::Verifier &verifier) const {
745 return VerifyTableStart(verifier) &&
746 VerifyField<uint64_t>(verifier, VT_ENTRY_ADDR, 8) &&
747 VerifyOffsetRequired(verifier, VT_INSTRUCTIONS) &&
748 verifier.VerifyVector(instructions()) &&
749 VerifyOffset(verifier, VT_NAME) &&
750 verifier.VerifyString(name()) &&
751 verifier.EndTable();
752 }
753};
754
756 typedef Function Table;
757 ::flatbuffers::FlatBufferBuilder &fbb_;
758 ::flatbuffers::uoffset_t start_;
759 void add_entry_addr(uint64_t entry_addr) {
760 fbb_.AddElement<uint64_t>(Function::VT_ENTRY_ADDR, entry_addr, 0);
761 }
762 void add_instructions(::flatbuffers::Offset<::flatbuffers::Vector<uint64_t>> instructions) {
763 fbb_.AddOffset(Function::VT_INSTRUCTIONS, instructions);
764 }
765 void add_name(::flatbuffers::Offset<::flatbuffers::String> name) {
766 fbb_.AddOffset(Function::VT_NAME, name);
767 }
768 explicit FunctionBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
769 : fbb_(_fbb) {
770 start_ = fbb_.StartTable();
771 }
772 ::flatbuffers::Offset<Function> Finish() {
773 const auto end = fbb_.EndTable(start_);
774 auto o = ::flatbuffers::Offset<Function>(end);
775 fbb_.Required(o, Function::VT_INSTRUCTIONS);
776 return o;
777 }
778};
779
780inline ::flatbuffers::Offset<Function> CreateFunction(
781 ::flatbuffers::FlatBufferBuilder &_fbb,
782 uint64_t entry_addr = 0,
783 ::flatbuffers::Offset<::flatbuffers::Vector<uint64_t>> instructions = 0,
784 ::flatbuffers::Offset<::flatbuffers::String> name = 0) {
785 FunctionBuilder builder_(_fbb);
786 builder_.add_entry_addr(entry_addr);
787 builder_.add_name(name);
788 builder_.add_instructions(instructions);
789 return builder_.Finish();
790}
791
792inline ::flatbuffers::Offset<Function> CreateFunctionDirect(
793 ::flatbuffers::FlatBufferBuilder &_fbb,
794 uint64_t entry_addr = 0,
795 const std::vector<uint64_t> *instructions = nullptr,
796 const char *name = nullptr) {
797 auto instructions__ = instructions ? _fbb.CreateVector<uint64_t>(*instructions) : 0;
798 auto name__ = name ? _fbb.CreateString(name) : 0;
799 return Rose::BinaryAnalysis::Serialization::FlatBuffers::CreateFunction(
800 _fbb,
801 entry_addr,
802 instructions__,
803 name__);
804}
805
807struct FunctionList FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
808 typedef FunctionListBuilder Builder;
809 enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
810 VT_FUNCTIONS = 4
811 };
813 const ::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Function>> *functions() const {
814 return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Function>> *>(VT_FUNCTIONS);
815 }
816 bool Verify(::flatbuffers::Verifier &verifier) const {
817 return VerifyTableStart(verifier) &&
818 VerifyOffsetRequired(verifier, VT_FUNCTIONS) &&
819 verifier.VerifyVector(functions()) &&
820 verifier.VerifyVectorOfTables(functions()) &&
821 verifier.EndTable();
822 }
823};
824
826 typedef FunctionList Table;
827 ::flatbuffers::FlatBufferBuilder &fbb_;
828 ::flatbuffers::uoffset_t start_;
829 void add_functions(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Function>>> functions) {
830 fbb_.AddOffset(FunctionList::VT_FUNCTIONS, functions);
831 }
832 explicit FunctionListBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
833 : fbb_(_fbb) {
834 start_ = fbb_.StartTable();
835 }
836 ::flatbuffers::Offset<FunctionList> Finish() {
837 const auto end = fbb_.EndTable(start_);
838 auto o = ::flatbuffers::Offset<FunctionList>(end);
839 fbb_.Required(o, FunctionList::VT_FUNCTIONS);
840 return o;
841 }
842};
843
844inline ::flatbuffers::Offset<FunctionList> CreateFunctionList(
845 ::flatbuffers::FlatBufferBuilder &_fbb,
846 ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Function>>> functions = 0) {
847 FunctionListBuilder builder_(_fbb);
848 builder_.add_functions(functions);
849 return builder_.Finish();
850}
851
852inline ::flatbuffers::Offset<FunctionList> CreateFunctionListDirect(
853 ::flatbuffers::FlatBufferBuilder &_fbb,
854 const std::vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Function>> *functions = nullptr) {
855 auto functions__ = functions ? _fbb.CreateVector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Function>>(*functions) : 0;
856 return Rose::BinaryAnalysis::Serialization::FlatBuffers::CreateFunctionList(
857 _fbb,
858 functions__);
859}
860
862struct CfgEdgeData FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
863 typedef CfgEdgeDataBuilder Builder;
864 enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
865 VT_PURPOSE = 4
866 };
867 Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdgePurpose purpose() const {
868 return static_cast<Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdgePurpose>(GetField<uint8_t>(VT_PURPOSE, 0));
869 }
870 bool Verify(::flatbuffers::Verifier &verifier) const {
871 return VerifyTableStart(verifier) &&
872 VerifyField<uint8_t>(verifier, VT_PURPOSE, 1) &&
873 verifier.EndTable();
874 }
875};
876
878 typedef CfgEdgeData Table;
879 ::flatbuffers::FlatBufferBuilder &fbb_;
880 ::flatbuffers::uoffset_t start_;
881 void add_purpose(Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdgePurpose purpose) {
882 fbb_.AddElement<uint8_t>(CfgEdgeData::VT_PURPOSE, static_cast<uint8_t>(purpose), 0);
883 }
884 explicit CfgEdgeDataBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
885 : fbb_(_fbb) {
886 start_ = fbb_.StartTable();
887 }
888 ::flatbuffers::Offset<CfgEdgeData> Finish() {
889 const auto end = fbb_.EndTable(start_);
890 auto o = ::flatbuffers::Offset<CfgEdgeData>(end);
891 return o;
892 }
893};
894
895inline ::flatbuffers::Offset<CfgEdgeData> CreateCfgEdgeData(
896 ::flatbuffers::FlatBufferBuilder &_fbb,
897 Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdgePurpose purpose = Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdgePurpose::FunctionCall) {
898 CfgEdgeDataBuilder builder_(_fbb);
899 builder_.add_purpose(purpose);
900 return builder_.Finish();
901}
902
907struct AddressTarget FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
908 typedef AddressTargetBuilder Builder;
909 enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
910 VT_ADDRESS = 4
911 };
912 uint64_t address() const {
913 return GetField<uint64_t>(VT_ADDRESS, 0);
914 }
915 bool Verify(::flatbuffers::Verifier &verifier) const {
916 return VerifyTableStart(verifier) &&
917 VerifyField<uint64_t>(verifier, VT_ADDRESS, 8) &&
918 verifier.EndTable();
919 }
920};
921
923 typedef AddressTarget Table;
924 ::flatbuffers::FlatBufferBuilder &fbb_;
925 ::flatbuffers::uoffset_t start_;
926 void add_address(uint64_t address) {
927 fbb_.AddElement<uint64_t>(AddressTarget::VT_ADDRESS, address, 0);
928 }
929 explicit AddressTargetBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
930 : fbb_(_fbb) {
931 start_ = fbb_.StartTable();
932 }
933 ::flatbuffers::Offset<AddressTarget> Finish() {
934 const auto end = fbb_.EndTable(start_);
935 auto o = ::flatbuffers::Offset<AddressTarget>(end);
936 return o;
937 }
938};
939
940inline ::flatbuffers::Offset<AddressTarget> CreateAddressTarget(
941 ::flatbuffers::FlatBufferBuilder &_fbb,
942 uint64_t address = 0) {
943 AddressTargetBuilder builder_(_fbb);
944 builder_.add_address(address);
945 return builder_.Finish();
946}
947
949struct IndeterminateTarget FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
950 typedef IndeterminateTargetBuilder Builder;
951 bool Verify(::flatbuffers::Verifier &verifier) const {
952 return VerifyTableStart(verifier) &&
953 verifier.EndTable();
954 }
955};
956
958 typedef IndeterminateTarget Table;
959 ::flatbuffers::FlatBufferBuilder &fbb_;
960 ::flatbuffers::uoffset_t start_;
961 explicit IndeterminateTargetBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
962 : fbb_(_fbb) {
963 start_ = fbb_.StartTable();
964 }
965 ::flatbuffers::Offset<IndeterminateTarget> Finish() {
966 const auto end = fbb_.EndTable(start_);
967 auto o = ::flatbuffers::Offset<IndeterminateTarget>(end);
968 return o;
969 }
970};
971
972inline ::flatbuffers::Offset<IndeterminateTarget> CreateIndeterminateTarget(
973 ::flatbuffers::FlatBufferBuilder &_fbb) {
974 IndeterminateTargetBuilder builder_(_fbb);
975 return builder_.Finish();
976}
977
980struct CfgEdge FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
981 typedef CfgEdgeBuilder Builder;
982 enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
983 VT_SRC = 4,
984 VT_TGT_TYPE = 6,
985 VT_TGT = 8,
986 VT_DATA = 10
987 };
988 uint64_t src() const {
989 return GetField<uint64_t>(VT_SRC, 0);
990 }
991 Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdgeTarget tgt_type() const {
992 return static_cast<Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdgeTarget>(GetField<uint8_t>(VT_TGT_TYPE, 0));
993 }
994 const void *tgt() const {
995 return GetPointer<const void *>(VT_TGT);
996 }
997 template<typename T> const T *tgt_as() const;
998 const Rose::BinaryAnalysis::Serialization::FlatBuffers::AddressTarget *tgt_as_AddressTarget() const {
999 return tgt_type() == Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdgeTarget::AddressTarget ? static_cast<const Rose::BinaryAnalysis::Serialization::FlatBuffers::AddressTarget *>(tgt()) : nullptr;
1000 }
1001 const Rose::BinaryAnalysis::Serialization::FlatBuffers::IndeterminateTarget *tgt_as_IndeterminateTarget() const {
1002 return tgt_type() == Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdgeTarget::IndeterminateTarget ? static_cast<const Rose::BinaryAnalysis::Serialization::FlatBuffers::IndeterminateTarget *>(tgt()) : nullptr;
1003 }
1004 const Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdgeData *data() const {
1005 return GetPointer<const Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdgeData *>(VT_DATA);
1006 }
1007 bool Verify(::flatbuffers::Verifier &verifier) const {
1008 return VerifyTableStart(verifier) &&
1009 VerifyField<uint64_t>(verifier, VT_SRC, 8) &&
1010 VerifyField<uint8_t>(verifier, VT_TGT_TYPE, 1) &&
1011 VerifyOffsetRequired(verifier, VT_TGT) &&
1012 VerifyCfgEdgeTarget(verifier, tgt(), tgt_type()) &&
1013 VerifyOffsetRequired(verifier, VT_DATA) &&
1014 verifier.VerifyTable(data()) &&
1015 verifier.EndTable();
1016 }
1017};
1018
1019template<> inline const Rose::BinaryAnalysis::Serialization::FlatBuffers::AddressTarget *CfgEdge::tgt_as<Rose::BinaryAnalysis::Serialization::FlatBuffers::AddressTarget>() const {
1020 return tgt_as_AddressTarget();
1021}
1022
1023template<> inline const Rose::BinaryAnalysis::Serialization::FlatBuffers::IndeterminateTarget *CfgEdge::tgt_as<Rose::BinaryAnalysis::Serialization::FlatBuffers::IndeterminateTarget>() const {
1024 return tgt_as_IndeterminateTarget();
1025}
1026
1028 typedef CfgEdge Table;
1029 ::flatbuffers::FlatBufferBuilder &fbb_;
1030 ::flatbuffers::uoffset_t start_;
1031 void add_src(uint64_t src) {
1032 fbb_.AddElement<uint64_t>(CfgEdge::VT_SRC, src, 0);
1033 }
1034 void add_tgt_type(Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdgeTarget tgt_type) {
1035 fbb_.AddElement<uint8_t>(CfgEdge::VT_TGT_TYPE, static_cast<uint8_t>(tgt_type), 0);
1036 }
1037 void add_tgt(::flatbuffers::Offset<void> tgt) {
1038 fbb_.AddOffset(CfgEdge::VT_TGT, tgt);
1039 }
1040 void add_data(::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdgeData> data) {
1041 fbb_.AddOffset(CfgEdge::VT_DATA, data);
1042 }
1043 explicit CfgEdgeBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
1044 : fbb_(_fbb) {
1045 start_ = fbb_.StartTable();
1046 }
1047 ::flatbuffers::Offset<CfgEdge> Finish() {
1048 const auto end = fbb_.EndTable(start_);
1049 auto o = ::flatbuffers::Offset<CfgEdge>(end);
1050 fbb_.Required(o, CfgEdge::VT_TGT);
1051 fbb_.Required(o, CfgEdge::VT_DATA);
1052 return o;
1053 }
1054};
1055
1056inline ::flatbuffers::Offset<CfgEdge> CreateCfgEdge(
1057 ::flatbuffers::FlatBufferBuilder &_fbb,
1058 uint64_t src = 0,
1059 Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdgeTarget tgt_type = Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdgeTarget::NONE,
1060 ::flatbuffers::Offset<void> tgt = 0,
1061 ::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdgeData> data = 0) {
1062 CfgEdgeBuilder builder_(_fbb);
1063 builder_.add_src(src);
1064 builder_.add_data(data);
1065 builder_.add_tgt(tgt);
1066 builder_.add_tgt_type(tgt_type);
1067 return builder_.Finish();
1068}
1069
1075struct Cfg FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
1076 typedef CfgBuilder Builder;
1077 enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
1078 VT_EDGES = 4
1079 };
1080 const ::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdge>> *edges() const {
1081 return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdge>> *>(VT_EDGES);
1082 }
1083 bool Verify(::flatbuffers::Verifier &verifier) const {
1084 return VerifyTableStart(verifier) &&
1085 VerifyOffsetRequired(verifier, VT_EDGES) &&
1086 verifier.VerifyVector(edges()) &&
1087 verifier.VerifyVectorOfTables(edges()) &&
1088 verifier.EndTable();
1089 }
1090};
1091
1093 typedef Cfg Table;
1094 ::flatbuffers::FlatBufferBuilder &fbb_;
1095 ::flatbuffers::uoffset_t start_;
1096 void add_edges(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdge>>> edges) {
1097 fbb_.AddOffset(Cfg::VT_EDGES, edges);
1098 }
1099 explicit CfgBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
1100 : fbb_(_fbb) {
1101 start_ = fbb_.StartTable();
1102 }
1103 ::flatbuffers::Offset<Cfg> Finish() {
1104 const auto end = fbb_.EndTable(start_);
1105 auto o = ::flatbuffers::Offset<Cfg>(end);
1106 fbb_.Required(o, Cfg::VT_EDGES);
1107 return o;
1108 }
1109};
1110
1111inline ::flatbuffers::Offset<Cfg> CreateCfg(
1112 ::flatbuffers::FlatBufferBuilder &_fbb,
1113 ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdge>>> edges = 0) {
1114 CfgBuilder builder_(_fbb);
1115 builder_.add_edges(edges);
1116 return builder_.Finish();
1117}
1118
1119inline ::flatbuffers::Offset<Cfg> CreateCfgDirect(
1120 ::flatbuffers::FlatBufferBuilder &_fbb,
1121 const std::vector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdge>> *edges = nullptr) {
1122 auto edges__ = edges ? _fbb.CreateVector<::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::CfgEdge>>(*edges) : 0;
1123 return Rose::BinaryAnalysis::Serialization::FlatBuffers::CreateCfg(
1124 _fbb,
1125 edges__);
1126}
1127
1133struct Root FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
1134 typedef RootBuilder Builder;
1135 enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
1136 VT_ARCHITECTURE = 4,
1137 VT_MEMORY_MAP = 6,
1138 VT_INSTRUCTIONS = 8,
1139 VT_BASIC_BLOCKS = 10,
1140 VT_FUNCTIONS = 12,
1141 VT_CFG = 14
1142 };
1143 const Rose::BinaryAnalysis::Serialization::FlatBuffers::Architecture *architecture() const {
1144 return GetPointer<const Rose::BinaryAnalysis::Serialization::FlatBuffers::Architecture *>(VT_ARCHITECTURE);
1145 }
1146 const Rose::BinaryAnalysis::Serialization::FlatBuffers::MemoryMap *memory_map() const {
1147 return GetPointer<const Rose::BinaryAnalysis::Serialization::FlatBuffers::MemoryMap *>(VT_MEMORY_MAP);
1148 }
1149 const Rose::BinaryAnalysis::Serialization::FlatBuffers::InstructionList *instructions() const {
1150 return GetPointer<const Rose::BinaryAnalysis::Serialization::FlatBuffers::InstructionList *>(VT_INSTRUCTIONS);
1151 }
1152 const Rose::BinaryAnalysis::Serialization::FlatBuffers::BasicBlockList *basic_blocks() const {
1153 return GetPointer<const Rose::BinaryAnalysis::Serialization::FlatBuffers::BasicBlockList *>(VT_BASIC_BLOCKS);
1154 }
1155 const Rose::BinaryAnalysis::Serialization::FlatBuffers::FunctionList *functions() const {
1156 return GetPointer<const Rose::BinaryAnalysis::Serialization::FlatBuffers::FunctionList *>(VT_FUNCTIONS);
1157 }
1158 const Rose::BinaryAnalysis::Serialization::FlatBuffers::Cfg *cfg() const {
1159 return GetPointer<const Rose::BinaryAnalysis::Serialization::FlatBuffers::Cfg *>(VT_CFG);
1160 }
1161 bool Verify(::flatbuffers::Verifier &verifier) const {
1162 return VerifyTableStart(verifier) &&
1163 VerifyOffsetRequired(verifier, VT_ARCHITECTURE) &&
1164 verifier.VerifyTable(architecture()) &&
1165 VerifyOffsetRequired(verifier, VT_MEMORY_MAP) &&
1166 verifier.VerifyTable(memory_map()) &&
1167 VerifyOffsetRequired(verifier, VT_INSTRUCTIONS) &&
1168 verifier.VerifyTable(instructions()) &&
1169 VerifyOffsetRequired(verifier, VT_BASIC_BLOCKS) &&
1170 verifier.VerifyTable(basic_blocks()) &&
1171 VerifyOffsetRequired(verifier, VT_FUNCTIONS) &&
1172 verifier.VerifyTable(functions()) &&
1173 VerifyOffsetRequired(verifier, VT_CFG) &&
1174 verifier.VerifyTable(cfg()) &&
1175 verifier.EndTable();
1176 }
1177};
1178
1180 typedef Root Table;
1181 ::flatbuffers::FlatBufferBuilder &fbb_;
1182 ::flatbuffers::uoffset_t start_;
1183 void add_architecture(::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Architecture> architecture) {
1184 fbb_.AddOffset(Root::VT_ARCHITECTURE, architecture);
1185 }
1186 void add_memory_map(::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::MemoryMap> memory_map) {
1187 fbb_.AddOffset(Root::VT_MEMORY_MAP, memory_map);
1188 }
1189 void add_instructions(::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::InstructionList> instructions) {
1190 fbb_.AddOffset(Root::VT_INSTRUCTIONS, instructions);
1191 }
1192 void add_basic_blocks(::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::BasicBlockList> basic_blocks) {
1193 fbb_.AddOffset(Root::VT_BASIC_BLOCKS, basic_blocks);
1194 }
1195 void add_functions(::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::FunctionList> functions) {
1196 fbb_.AddOffset(Root::VT_FUNCTIONS, functions);
1197 }
1198 void add_cfg(::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Cfg> cfg) {
1199 fbb_.AddOffset(Root::VT_CFG, cfg);
1200 }
1201 explicit RootBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
1202 : fbb_(_fbb) {
1203 start_ = fbb_.StartTable();
1204 }
1205 ::flatbuffers::Offset<Root> Finish() {
1206 const auto end = fbb_.EndTable(start_);
1207 auto o = ::flatbuffers::Offset<Root>(end);
1208 fbb_.Required(o, Root::VT_ARCHITECTURE);
1209 fbb_.Required(o, Root::VT_MEMORY_MAP);
1210 fbb_.Required(o, Root::VT_INSTRUCTIONS);
1211 fbb_.Required(o, Root::VT_BASIC_BLOCKS);
1212 fbb_.Required(o, Root::VT_FUNCTIONS);
1213 fbb_.Required(o, Root::VT_CFG);
1214 return o;
1215 }
1216};
1217
1218inline ::flatbuffers::Offset<Root> CreateRoot(
1219 ::flatbuffers::FlatBufferBuilder &_fbb,
1220 ::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Architecture> architecture = 0,
1221 ::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::MemoryMap> memory_map = 0,
1222 ::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::InstructionList> instructions = 0,
1223 ::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::BasicBlockList> basic_blocks = 0,
1224 ::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::FunctionList> functions = 0,
1225 ::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Cfg> cfg = 0) {
1226 RootBuilder builder_(_fbb);
1227 builder_.add_cfg(cfg);
1228 builder_.add_functions(functions);
1229 builder_.add_basic_blocks(basic_blocks);
1230 builder_.add_instructions(instructions);
1231 builder_.add_memory_map(memory_map);
1232 builder_.add_architecture(architecture);
1233 return builder_.Finish();
1234}
1235
1236inline bool VerifyCfgEdgeTarget(::flatbuffers::Verifier &verifier, const void *obj, CfgEdgeTarget type) {
1237 switch (type) {
1238 case CfgEdgeTarget::NONE: {
1239 return true;
1240 }
1241 case CfgEdgeTarget::AddressTarget: {
1242 auto ptr = reinterpret_cast<const Rose::BinaryAnalysis::Serialization::FlatBuffers::AddressTarget *>(obj);
1243 return verifier.VerifyTable(ptr);
1244 }
1245 case CfgEdgeTarget::IndeterminateTarget: {
1246 auto ptr = reinterpret_cast<const Rose::BinaryAnalysis::Serialization::FlatBuffers::IndeterminateTarget *>(obj);
1247 return verifier.VerifyTable(ptr);
1248 }
1249 default: return true;
1250 }
1251}
1252
1253inline bool VerifyCfgEdgeTargetVector(::flatbuffers::Verifier &verifier, const ::flatbuffers::Vector<::flatbuffers::Offset<void>> *values, const ::flatbuffers::Vector<CfgEdgeTarget> *types) {
1254 if (!values || !types) return !values && !types;
1255 if (values->size() != types->size()) return false;
1256 for (::flatbuffers::uoffset_t i = 0; i < values->size(); ++i) {
1257 if (!VerifyCfgEdgeTarget(
1258 verifier, values->Get(i), types->GetEnum<CfgEdgeTarget>(i))) {
1259 return false;
1260 }
1261 }
1262 return true;
1263}
1264
1265inline const Rose::BinaryAnalysis::Serialization::FlatBuffers::Root *GetRoot(const void *buf) {
1266 return ::flatbuffers::GetRoot<Rose::BinaryAnalysis::Serialization::FlatBuffers::Root>(buf);
1267}
1268
1269inline const Rose::BinaryAnalysis::Serialization::FlatBuffers::Root *GetSizePrefixedRoot(const void *buf) {
1270 return ::flatbuffers::GetSizePrefixedRoot<Rose::BinaryAnalysis::Serialization::FlatBuffers::Root>(buf);
1271}
1272
1273inline bool VerifyRootBuffer(
1274 ::flatbuffers::Verifier &verifier) {
1275 return verifier.VerifyBuffer<Rose::BinaryAnalysis::Serialization::FlatBuffers::Root>(nullptr);
1276}
1277
1278inline bool VerifySizePrefixedRootBuffer(
1279 ::flatbuffers::Verifier &verifier) {
1280 return verifier.VerifySizePrefixedBuffer<Rose::BinaryAnalysis::Serialization::FlatBuffers::Root>(nullptr);
1281}
1282
1283inline void FinishRootBuffer(
1284 ::flatbuffers::FlatBufferBuilder &fbb,
1285 ::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Root> root) {
1286 fbb.Finish(root);
1287}
1288
1289inline void FinishSizePrefixedRootBuffer(
1290 ::flatbuffers::FlatBufferBuilder &fbb,
1291 ::flatbuffers::Offset<Rose::BinaryAnalysis::Serialization::FlatBuffers::Root> root) {
1292 fbb.FinishSizePrefixed(root);
1293}
1294
1295} // namespace FlatBuffers
1296} // namespace Serialization
1297} // namespace BinaryAnalysis
1298} // namespace Rose
1299
1300#endif // FLATBUFFERS_GENERATED_FLATBUFFERSCHEMA_ROSE_BINARYANALYSIS_SERIALIZATION_FLATBUFFERS_H_
An efficient mapping from an address space to stored data.
Definition MemoryMap.h:119
@ ORDER_MSB
Most significant byte first, i.e., big-endian.
Definition ByteOrder.h:23
@ ORDER_UNSPECIFIED
Endianness is unspecified and unknown.
Definition ByteOrder.h:21
@ ORDER_LSB
Least significant byte first, i.e., little-endian.
Definition ByteOrder.h:22
The ROSE library.
const char * Architecture(int64_t)
Convert Rose::BinaryAnalysis::Disassembler::Mips::Decoder::Architecture enum constant to a string.
const ::flatbuffers::String * mnemonic() const
optional mnemonic
const ::flatbuffers::Vector<::flatbuffers::Offset< Rose::BinaryAnalysis::Serialization::FlatBuffers::BasicBlock > > * basic_blocks() const
list of basic blocks with unique starting addresses
const ::flatbuffers::Vector< uint64_t > * addresses() const
addresses of contained instructions in execution order
const ::flatbuffers::String * operands() const
optional operands
const ::flatbuffers::Vector<::flatbuffers::Offset< Rose::BinaryAnalysis::Serialization::FlatBuffers::Function > > * functions() const
list of functions with unique entry addresses
const ::flatbuffers::Vector< uint64_t > * instructions() const
non-empty instruction addresses belonging to this function