summaryrefslogtreecommitdiff
path: root/ZAPD/ZVector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ZAPD/ZVector.cpp')
-rw-r--r--ZAPD/ZVector.cpp72
1 files changed, 34 insertions, 38 deletions
diff --git a/ZAPD/ZVector.cpp b/ZAPD/ZVector.cpp
index 011ed2a..51c8452 100644
--- a/ZAPD/ZVector.cpp
+++ b/ZAPD/ZVector.cpp
@@ -10,22 +10,8 @@ REGISTER_ZFILENODE(Vector, ZVector);
ZVector::ZVector(ZFile* nParent) : ZResource(nParent)
{
- scalars = std::vector<ZScalar*>();
- this->scalarType = ZSCALAR_NONE;
- this->dimensions = 0;
-}
-
-ZVector::~ZVector()
-{
- ClearScalars();
-}
-
-void ZVector::ClearScalars()
-{
- for (auto s : scalars)
- delete s;
-
- scalars.clear();
+ scalarType = ZScalarType::ZSCALAR_NONE;
+ dimensions = 0;
}
void ZVector::ExtractFromXML(tinyxml2::XMLElement* reader, const std::vector<uint8_t>& nRawData,
@@ -47,23 +33,23 @@ void ZVector::ParseXML(tinyxml2::XMLElement* reader)
void ZVector::ParseRawData()
{
- int32_t currentRawDataIndex = this->rawDataIndex;
-
- ClearScalars();
+ int32_t currentRawDataIndex = rawDataIndex;
+ // TODO: this shouldn't be necessary.
+ scalars.clear();
- for (uint32_t i = 0; i < this->dimensions; i++)
+ for (uint32_t i = 0; i < dimensions; i++)
{
- ZScalar* scalar = new ZScalar(this->scalarType, this->parent);
- scalar->rawDataIndex = currentRawDataIndex;
- scalar->rawData = this->rawData;
- scalar->ParseRawData();
- currentRawDataIndex += scalar->GetRawDataSize();
+ ZScalar scalar(scalarType, parent);
+ scalar.rawDataIndex = currentRawDataIndex;
+ scalar.rawData = rawData;
+ scalar.ParseRawData();
+ currentRawDataIndex += scalar.GetRawDataSize();
- this->scalars.push_back(scalar);
+ scalars.push_back(scalar);
}
// Ensure the scalars vector has the same number of elements as the vector dimension.
- assert(this->scalars.size() == this->dimensions);
+ assert(scalars.size() == dimensions);
}
size_t ZVector::GetRawDataSize() const
@@ -71,7 +57,7 @@ size_t ZVector::GetRawDataSize() const
size_t size = 0;
for (size_t i = 0; i < this->scalars.size(); i++)
- size += this->scalars[i]->GetRawDataSize();
+ size += this->scalars[i].GetRawDataSize();
return size;
}
@@ -83,11 +69,11 @@ bool ZVector::DoesSupportArray() const
std::string ZVector::GetSourceTypeName() const
{
- if (dimensions == 3 && scalarType == ZSCALAR_F32)
+ if (dimensions == 3 && scalarType == ZScalarType::ZSCALAR_F32)
return "Vec3f";
- else if (dimensions == 3 && scalarType == ZSCALAR_S16)
+ else if (dimensions == 3 && scalarType == ZScalarType::ZSCALAR_S16)
return "Vec3s";
- else if (dimensions == 3 && scalarType == ZSCALAR_S32)
+ else if (dimensions == 3 && scalarType == ZScalarType::ZSCALAR_S32)
return "Vec3i";
else
{
@@ -95,28 +81,28 @@ std::string ZVector::GetSourceTypeName() const
"Encountered unsupported vector type: %d dimensions, %s type", dimensions,
ZScalar::MapScalarTypeToOutputType(scalarType).c_str());
- if (Globals::Instance->verbosity >= VERBOSITY_DEBUG)
+ if (Globals::Instance->verbosity >= VerbosityLevel::VERBOSITY_DEBUG)
printf("%s\n", output.c_str());
throw std::runtime_error(output);
}
}
-std::string ZVector::GetSourceValue() const
+std::string ZVector::GetBodySourceCode() const
{
- std::vector<std::string> strings = std::vector<std::string>();
+ std::string body = "";
for (size_t i = 0; i < this->scalars.size(); i++)
- strings.push_back(scalars[i]->GetSourceValue());
+ body += StringHelper::Sprintf("%6s, ", scalars[i].GetBodySourceCode().c_str());
- return "{ " + StringHelper::Implode(strings, ", ") + " }";
+ return "{ " + body + "}";
}
std::string ZVector::GetSourceOutputCode(const std::string& prefix)
{
if (parent != nullptr)
parent->AddDeclaration(rawDataIndex, DeclarationAlignment::None, GetRawDataSize(),
- GetSourceTypeName(), GetName(), GetSourceValue());
+ GetSourceTypeName(), GetName(), GetBodySourceCode());
return "";
}
@@ -124,4 +110,14 @@ std::string ZVector::GetSourceOutputCode(const std::string& prefix)
ZResourceType ZVector::GetResourceType() const
{
return ZResourceType::Vector;
-} \ No newline at end of file
+}
+
+void ZVector::SetScalarType(ZScalarType type)
+{
+ scalarType = type;
+}
+
+void ZVector::SetDimensions(uint32_t dim)
+{
+ dimensions = dim;
+}