summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2019-12-18 13:50:16 -0500
committerRusty Wagner <rusty@vector35.com>2019-12-18 13:50:16 -0500
commit2c84a4aaf3abacab15a5f0d81987c620922a3f2d (patch)
tree172d1e3ab6caab1d81ace5e1f26add1ea785b3a9
parent142004d7f31ad2eee58dc6c9bdec7bdcc530cf58 (diff)
Return self reference from builders for chaining
-rw-r--r--binaryninjaapi.h36
-rw-r--r--type.cpp58
2 files changed, 56 insertions, 38 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 5c11d0b8..c4911697 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -2589,19 +2589,19 @@ __attribute__ ((format (printf, 1, 2)))
Ref<Enumeration> GetEnumeration() const;
Ref<NamedTypeReference> GetNamedTypeReference() const;
Confidence<BNMemberScope> GetScope() const;
- void SetScope(const Confidence<BNMemberScope>& scope);
+ TypeBuilder& SetScope(const Confidence<BNMemberScope>& scope);
Confidence<BNMemberAccess> GetAccess() const;
- void SetAccess(const Confidence<BNMemberAccess>& access);
- void SetConst(const Confidence<bool>& cnst);
- void SetVolatile(const Confidence<bool>& vltl);
- void SetTypeName(const QualifiedName& name);
+ TypeBuilder& SetAccess(const Confidence<BNMemberAccess>& access);
+ TypeBuilder& SetConst(const Confidence<bool>& cnst);
+ TypeBuilder& SetVolatile(const Confidence<bool>& vltl);
+ TypeBuilder& SetTypeName(const QualifiedName& name);
Confidence<int64_t> GetStackAdjustment() const;
QualifiedName GetStructureName() const;
uint64_t GetElementCount() const;
uint64_t GetOffset() const;
- void SetFunctionCanReturn(const Confidence<bool>& canReturn);
+ TypeBuilder& SetFunctionCanReturn(const Confidence<bool>& canReturn);
std::string GetString(Platform* platform = nullptr) const;
std::string GetTypeAndName(const QualifiedName& name) const;
@@ -2729,18 +2729,18 @@ __attribute__ ((format (printf, 1, 2)))
bool GetMemberAtOffset(int64_t offset, StructureMember& result) const;
bool GetMemberAtOffset(int64_t offset, StructureMember& result, size_t& idx) const;
uint64_t GetWidth() const;
- void SetWidth(size_t width);
+ StructureBuilder& SetWidth(size_t width);
size_t GetAlignment() const;
- void SetAlignment(size_t align);
+ StructureBuilder& SetAlignment(size_t align);
bool IsPacked() const;
- void SetPacked(bool packed);
+ StructureBuilder& SetPacked(bool packed);
bool IsUnion() const;
- void SetStructureType(BNStructureType type);
+ StructureBuilder& SetStructureType(BNStructureType type);
BNStructureType GetStructureType() const;
- void AddMember(const Confidence<Ref<Type>>& type, const std::string& name);
- void AddMemberAtOffset(const Confidence<Ref<Type>>& type, const std::string& name, uint64_t offset);
- void RemoveMember(size_t idx);
- void ReplaceMember(size_t idx, const Confidence<Ref<Type>>& type, const std::string& name);
+ StructureBuilder& AddMember(const Confidence<Ref<Type>>& type, const std::string& name);
+ StructureBuilder& AddMemberAtOffset(const Confidence<Ref<Type>>& type, const std::string& name, uint64_t offset);
+ StructureBuilder& RemoveMember(size_t idx);
+ StructureBuilder& ReplaceMember(size_t idx, const Confidence<Ref<Type>>& type, const std::string& name);
};
struct EnumerationMember
@@ -2777,10 +2777,10 @@ __attribute__ ((format (printf, 1, 2)))
std::vector<EnumerationMember> GetMembers() const;
- void AddMember(const std::string& name);
- void AddMemberWithValue(const std::string& name, uint64_t value);
- void RemoveMember(size_t idx);
- void ReplaceMember(size_t idx, const std::string& name, uint64_t value);
+ EnumerationBuilder& AddMember(const std::string& name);
+ EnumerationBuilder& AddMemberWithValue(const std::string& name, uint64_t value);
+ EnumerationBuilder& RemoveMember(size_t idx);
+ EnumerationBuilder& ReplaceMember(size_t idx, const std::string& name, uint64_t value);
};
class DisassemblySettings: public CoreRefCountObject<BNDisassemblySettings,
diff --git a/type.cpp b/type.cpp
index bf96a32c..42ec5431 100644
--- a/type.cpp
+++ b/type.cpp
@@ -1051,12 +1051,13 @@ Confidence<BNMemberScope> TypeBuilder::GetScope() const
}
-void TypeBuilder::SetScope(const Confidence<BNMemberScope>& scope)
+TypeBuilder& TypeBuilder::SetScope(const Confidence<BNMemberScope>& scope)
{
BNMemberScopeWithConfidence mc;
mc.value = scope.GetValue();
mc.confidence = scope.GetConfidence();
- return BNTypeBuilderSetMemberScope(m_object, &mc);
+ BNTypeBuilderSetMemberScope(m_object, &mc);
+ return *this;
}
@@ -1067,30 +1068,33 @@ Confidence<BNMemberAccess> TypeBuilder::GetAccess() const
}
-void TypeBuilder::SetAccess(const Confidence<BNMemberAccess>& access)
+TypeBuilder& TypeBuilder::SetAccess(const Confidence<BNMemberAccess>& access)
{
BNMemberAccessWithConfidence mc;
mc.value = access.GetValue();
mc.confidence = access.GetConfidence();
- return BNTypeBuilderSetMemberAccess(m_object, &mc);
+ BNTypeBuilderSetMemberAccess(m_object, &mc);
+ return *this;
}
-void TypeBuilder::SetConst(const Confidence<bool>& cnst)
+TypeBuilder& TypeBuilder::SetConst(const Confidence<bool>& cnst)
{
BNBoolWithConfidence bc;
bc.value = cnst.GetValue();
bc.confidence = cnst.GetConfidence();
BNTypeBuilderSetConst(m_object, &bc);
+ return *this;
}
-void TypeBuilder::SetVolatile(const Confidence<bool>& vltl)
+TypeBuilder& TypeBuilder::SetVolatile(const Confidence<bool>& vltl)
{
BNBoolWithConfidence bc;
bc.value = vltl.GetValue();
bc.confidence = vltl.GetConfidence();
BNTypeBuilderSetVolatile(m_object, &bc);
+ return *this;
}
@@ -1417,12 +1421,13 @@ TypeBuilder TypeBuilder::FunctionType(const Confidence<Ref<Type>>& returnValue,
}
-void TypeBuilder::SetFunctionCanReturn(const Confidence<bool>& canReturn)
+TypeBuilder& TypeBuilder::SetFunctionCanReturn(const Confidence<bool>& canReturn)
{
BNBoolWithConfidence bc;
bc.value = canReturn.GetValue();
bc.confidence = canReturn.GetConfidence();
BNSetFunctionTypeBuilderCanReturn(m_object, &bc);
+ return *this;
}
@@ -1441,11 +1446,12 @@ QualifiedName TypeBuilder::GetTypeName() const
}
-void TypeBuilder::SetTypeName(const QualifiedName& names)
+TypeBuilder& TypeBuilder::SetTypeName(const QualifiedName& names)
{
BNQualifiedName nameObj = names.GetAPIObject();
BNTypeBuilderSetTypeName(m_object, &nameObj);
QualifiedName::FreeAPIObject(&nameObj);
+ return *this;
}
@@ -1790,9 +1796,10 @@ uint64_t StructureBuilder::GetWidth() const
}
-void StructureBuilder::SetWidth(size_t width)
+StructureBuilder& StructureBuilder::SetWidth(size_t width)
{
BNSetStructureBuilderWidth(m_object, width);
+ return *this;
}
@@ -1802,9 +1809,10 @@ size_t StructureBuilder::GetAlignment() const
}
-void StructureBuilder::SetAlignment(size_t align)
+StructureBuilder& StructureBuilder::SetAlignment(size_t align)
{
BNSetStructureBuilderAlignment(m_object, align);
+ return *this;
}
@@ -1814,9 +1822,10 @@ bool StructureBuilder::IsPacked() const
}
-void StructureBuilder::SetPacked(bool packed)
+StructureBuilder& StructureBuilder::SetPacked(bool packed)
{
BNSetStructureBuilderPacked(m_object, packed);
+ return *this;
}
@@ -1826,9 +1835,10 @@ bool StructureBuilder::IsUnion() const
}
-void StructureBuilder::SetStructureType(BNStructureType t)
+StructureBuilder& StructureBuilder::SetStructureType(BNStructureType t)
{
BNSetStructureBuilderType(m_object, t);
+ return *this;
}
@@ -1838,36 +1848,40 @@ BNStructureType StructureBuilder::GetStructureType() const
}
-void StructureBuilder::AddMember(const Confidence<Ref<Type>>& type, const string& name)
+StructureBuilder& StructureBuilder::AddMember(const Confidence<Ref<Type>>& type, const string& name)
{
BNTypeWithConfidence tc;
tc.type = type->GetObject();
tc.confidence = type.GetConfidence();
BNAddStructureBuilderMember(m_object, &tc, name.c_str());
+ return *this;
}
-void StructureBuilder::AddMemberAtOffset(const Confidence<Ref<Type>>& type, const string& name, uint64_t offset)
+StructureBuilder& StructureBuilder::AddMemberAtOffset(const Confidence<Ref<Type>>& type, const string& name, uint64_t offset)
{
BNTypeWithConfidence tc;
tc.type = type->GetObject();
tc.confidence = type.GetConfidence();
BNAddStructureBuilderMemberAtOffset(m_object, &tc, name.c_str(), offset);
+ return *this;
}
-void StructureBuilder::RemoveMember(size_t idx)
+StructureBuilder& StructureBuilder::RemoveMember(size_t idx)
{
BNRemoveStructureBuilderMember(m_object, idx);
+ return *this;
}
-void StructureBuilder::ReplaceMember(size_t idx, const Confidence<Ref<Type>>& type, const std::string& name)
+StructureBuilder& StructureBuilder::ReplaceMember(size_t idx, const Confidence<Ref<Type>>& type, const std::string& name)
{
BNTypeWithConfidence tc;
tc.type = type->GetObject();
tc.confidence = type.GetConfidence();
BNReplaceStructureBuilderMember(m_object, idx, &tc, name.c_str());
+ return *this;
}
@@ -1989,27 +2003,31 @@ vector<EnumerationMember> EnumerationBuilder::GetMembers() const
}
-void EnumerationBuilder::AddMember(const string& name)
+EnumerationBuilder& EnumerationBuilder::AddMember(const string& name)
{
BNAddEnumerationBuilderMember(m_object, name.c_str());
+ return *this;
}
-void EnumerationBuilder::AddMemberWithValue(const string& name, uint64_t value)
+EnumerationBuilder& EnumerationBuilder::AddMemberWithValue(const string& name, uint64_t value)
{
BNAddEnumerationBuilderMemberWithValue(m_object, name.c_str(), value);
+ return *this;
}
-void EnumerationBuilder::RemoveMember(size_t idx)
+EnumerationBuilder& EnumerationBuilder::RemoveMember(size_t idx)
{
BNRemoveEnumerationBuilderMember(m_object, idx);
+ return *this;
}
-void EnumerationBuilder::ReplaceMember(size_t idx, const string& name, uint64_t value)
+EnumerationBuilder& EnumerationBuilder::ReplaceMember(size_t idx, const string& name, uint64_t value)
{
BNReplaceEnumerationBuilderMember(m_object, idx, name.c_str(), value);
+ return *this;
}