From ece59d9114f566a0f364cf8c56d555b70952f70b Mon Sep 17 00:00:00 2001 From: Glenn Smith Date: Thu, 3 Feb 2022 21:45:09 -0500 Subject: Move TypeView::getLinesForType into core as Type::GetLines --- type.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'type.cpp') diff --git a/type.cpp b/type.cpp index ff0f3ff9..475f0143 100644 --- a/type.cpp +++ b/type.cpp @@ -419,6 +419,20 @@ NameSpace NameSpace::FromAPIObject(const BNNameSpace* name) } +TypeDefinitionLine TypeDefinitionLine::FromAPIObject(BNTypeDefinitionLine* line) +{ + TypeDefinitionLine result; + result.lineType = line->lineType; + result.tokens = InstructionTextToken::ConvertInstructionTextTokenList(line->tokens, line->count); + result.type = new Type(BNNewTypeReference(line->type)); + result.rootType = new Type(BNNewTypeReference(line->rootType)); + result.rootTypeName = line->rootTypeName; + result.offset = line->offset; + result.fieldIndex = line->fieldIndex; + return result; +} + + Type::Type(BNType* type) { m_object = type; @@ -989,6 +1003,32 @@ bool Type::AddTypeMemberTokens(BinaryView* data, vector& t } +std::vector Type::GetLines(Ref data, const std::string& name, + int lineWidth, bool collapsed) +{ + size_t count; + BNTypeDefinitionLine* list = + BNGetTypeLines(m_object, data->m_object, name.c_str(), lineWidth, collapsed, &count); + + std::vector results; + for (size_t i = 0; i < count; i++) + { + TypeDefinitionLine line; + line.lineType = list[i].lineType; + line.tokens = InstructionTextToken::ConvertInstructionTextTokenList(list[i].tokens, list[i].count); + line.type = new Type(BNNewTypeReference(list[i].type)); + line.rootType = list[i].rootType ? new Type(BNNewTypeReference(list[i].rootType)) : nullptr; + line.rootTypeName = list[i].rootTypeName; + line.offset = list[i].offset; + line.fieldIndex = list[i].fieldIndex; + results.push_back(line); + } + + BNFreeTypeDefinitionLineList(list, count); + return results; +} + + string Type::GetSizeSuffix(size_t size) { char sizeStr[32]; -- cgit v1.3.1