summaryrefslogtreecommitdiff
path: root/type.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'type.cpp')
-rw-r--r--type.cpp78
1 files changed, 44 insertions, 34 deletions
diff --git a/type.cpp b/type.cpp
index ae8f04d3..e71077e6 100644
--- a/type.cpp
+++ b/type.cpp
@@ -209,6 +209,34 @@ string QualifiedName::GetString() const
}
+BNQualifiedName QualifiedName::GetAPIObject() const
+{
+ BNQualifiedName result;
+ result.nameCount = m_name.size();
+ result.name = new char*[m_name.size()];
+ for (size_t i = 0; i < m_name.size(); i++)
+ result.name[i] = BNAllocString(m_name[i].c_str());
+ return result;
+}
+
+
+void QualifiedName::FreeAPIObject(BNQualifiedName* name)
+{
+ for (size_t i = 0; i < name->nameCount; i++)
+ BNFreeString(name->name[i]);
+ delete[] name->name;
+}
+
+
+QualifiedName QualifiedName::FromAPIObject(BNQualifiedName* name)
+{
+ QualifiedName result;
+ for (size_t i = 0; i < name->nameCount; i++)
+ result.push_back(name->name[i]);
+ return result;
+}
+
+
Type::Type(BNType* type)
{
m_object = type;
@@ -344,13 +372,9 @@ string Type::GetString() const
string Type::GetTypeAndName(const QualifiedName& nameList) const
{
- const char ** str = new const char*[nameList.size()];
- for (size_t i = 0; i < nameList.size(); i++)
- {
- str[i] = nameList[i].c_str();
- }
- char* outName = BNGetTypeAndName(m_object, str, nameList.size());
- delete [] str;
+ BNQualifiedName name = nameList.GetAPIObject();
+ char* outName = BNGetTypeAndName(m_object, &name);
+ QualifiedName::FreeAPIObject(&name);
return outName;
}
@@ -488,12 +512,9 @@ Ref<Type> Type::NamedType(NamedTypeReference* ref, size_t width, size_t align)
Ref<Type> Type::NamedType(const QualifiedName& name, Type* type)
{
- const char** nameList = new const char*[name.size()];
- for (size_t i = 0; i < name.size(); i++)
- nameList[i] = name[i].c_str();
- Type* result = new Type(BNCreateNamedTypeReferenceFromType(nameList, name.size(),
- type ? type->GetObject() : nullptr));
- delete[] nameList;
+ BNQualifiedName nameObj = name.GetAPIObject();
+ Type* result = new Type(BNCreateNamedTypeReferenceFromType(&nameObj, type ? type->GetObject() : nullptr));
+ QualifiedName::FreeAPIObject(&nameObj);
return result;
}
@@ -550,13 +571,12 @@ NamedTypeReference::NamedTypeReference(BNNamedTypeReferenceClass cls, const Qual
{
m_object = BNCreateNamedType();
BNSetTypeReferenceClass(m_object, cls);
- const char ** nameList = new const char*[names.size()];
- for (size_t i = 0; i < names.size(); i++)
+ if (names.size() != 0)
{
- nameList[i] = names[i].c_str();
+ BNQualifiedName nameObj = names.GetAPIObject();
+ BNSetTypeReferenceName(m_object, &nameObj);
+ QualifiedName::FreeAPIObject(&nameObj);
}
- BNSetTypeReferenceName(m_object, nameList, names.size());
- delete [] nameList;
}
@@ -574,27 +594,17 @@ BNNamedTypeReferenceClass NamedTypeReference::GetTypeClass() const
void NamedTypeReference::SetName(const QualifiedName& names)
{
- const char ** nameList = new const char*[names.size()];
- for (size_t i = 0; i < names.size(); i++)
- {
- nameList[i] = names[i].c_str();
- }
- BNSetTypeReferenceName(m_object, nameList, names.size());
- delete [] nameList;
+ BNQualifiedName nameObj = names.GetAPIObject();
+ BNSetTypeReferenceName(m_object, &nameObj);
+ QualifiedName::FreeAPIObject(&nameObj);
}
QualifiedName NamedTypeReference::GetName() const
{
- size_t size;
- char** name = BNGetTypeReferenceName(m_object, &size);
- QualifiedName result;
- for (size_t i = 0; i < size; i++)
- {
- result.push_back(name[i]);
- BNFreeString(name[i]);
- }
- delete [] name;
+ BNQualifiedName name = BNGetTypeReferenceName(m_object);
+ QualifiedName result = QualifiedName::FromAPIObject(&name);
+ BNFreeQualifiedName(&name);
return result;
}