Merge pull request #172 from lioncash/move

CCharacterInfo: Minor allocation related changes
This commit is contained in:
Luke S 2020-02-28 10:39:35 -05:00 committed by GitHub
commit e0b84df5de
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 28 deletions

View File

@ -3,38 +3,42 @@
namespace urde {
CCharacterInfo::CParticleResData::CParticleResData(CInputStream& in, u16 tableCount) {
u32 partCount = in.readUint32Big();
const u32 partCount = in.readUint32Big();
x0_part.reserve(partCount);
for (u32 i = 0; i < partCount; ++i)
x0_part.push_back(in.readUint32Big());
for (u32 i = 0; i < partCount; ++i) {
x0_part.emplace_back(in.readUint32Big());
}
u32 swhcCount = in.readUint32Big();
const u32 swhcCount = in.readUint32Big();
x10_swhc.reserve(swhcCount);
for (u32 i = 0; i < swhcCount; ++i)
x10_swhc.push_back(in.readUint32Big());
for (u32 i = 0; i < swhcCount; ++i) {
x10_swhc.emplace_back(in.readUint32Big());
}
u32 unkCount = in.readUint32Big();
const u32 unkCount = in.readUint32Big();
x20_elsc.reserve(unkCount);
for (u32 i = 0; i < unkCount; ++i)
x20_elsc.push_back(in.readUint32Big());
for (u32 i = 0; i < unkCount; ++i) {
x20_elsc.emplace_back(in.readUint32Big());
}
if (tableCount > 5) {
u32 elscCount = in.readUint32Big();
const u32 elscCount = in.readUint32Big();
x30_elsc.reserve(elscCount);
for (u32 i = 0; i < elscCount; ++i)
x30_elsc.push_back(in.readUint32Big());
for (u32 i = 0; i < elscCount; ++i) {
x30_elsc.emplace_back(in.readUint32Big());
}
}
}
static std::vector<std::pair<s32, std::pair<std::string, std::string>>> MakeAnimInfoVector(CInputStream& in) {
std::vector<std::pair<s32, std::pair<std::string, std::string>>> ret;
u32 animInfoCount = in.readUint32Big();
const u32 animInfoCount = in.readUint32Big();
ret.reserve(animInfoCount);
for (u32 i = 0; i < animInfoCount; ++i) {
s32 idx = in.readInt32Big();
const s32 idx = in.readInt32Big();
std::string a = in.readString();
std::string b = in.readString();
ret.emplace_back(idx, std::make_pair(a, b));
ret.emplace_back(idx, std::make_pair(std::move(a), std::move(b)));
}
return ret;
}
@ -50,26 +54,27 @@ CCharacterInfo::CCharacterInfo(CInputStream& in)
, x44_partRes(in, x0_tableCount)
, x84_unk(in.readUint32Big()) {
if (x0_tableCount > 1) {
u32 aabbCount = in.readUint32Big();
const u32 aabbCount = in.readUint32Big();
x88_aabbs.reserve(aabbCount);
for (u32 i = 0; i < aabbCount; ++i) {
std::string name = in.readString();
x88_aabbs.emplace_back(name, zeus::CAABox());
x88_aabbs.emplace_back(std::move(name), zeus::CAABox());
x88_aabbs.back().second.readBoundingBoxBig(in);
}
}
if (x0_tableCount > 2) {
u32 effectCount = in.readUint32Big();
const u32 effectCount = in.readUint32Big();
x98_effects.reserve(effectCount);
for (u32 i = 0; i < effectCount; ++i) {
std::string name = in.readString();
x98_effects.emplace_back(name, std::vector<CEffectComponent>());
x98_effects.emplace_back(std::move(name), std::vector<CEffectComponent>());
std::vector<CEffectComponent>& comps = x98_effects.back().second;
u32 compCount = in.readUint32Big();
const u32 compCount = in.readUint32Big();
comps.reserve(compCount);
for (u32 j = 0; j < compCount; ++j)
for (u32 j = 0; j < compCount; ++j) {
comps.emplace_back(in);
}
}
}
@ -79,14 +84,15 @@ CCharacterInfo::CCharacterInfo(CInputStream& in)
}
if (x0_tableCount > 4) {
u32 aidxCount = in.readUint32Big();
const u32 aidxCount = in.readUint32Big();
xb0_animIdxs.reserve(aidxCount);
for (u32 i = 0; i < aidxCount; ++i)
for (u32 i = 0; i < aidxCount; ++i) {
xb0_animIdxs.push_back(in.readInt32Big());
}
}
}
const s32 CCharacterInfo::GetAnimationIndex(std::string_view name) const {
s32 CCharacterInfo::GetAnimationIndex(std::string_view name) const {
for (const auto& pair : x20_animInfo) {
if (pair.second.second == name)
return pair.first;

View File

@ -23,9 +23,9 @@ public:
std::vector<CAssetId> x20_elsc;
std::vector<CAssetId> x30_elsc;
CParticleResData(CInputStream& in, u16 tableCount);
CParticleResData(const std::vector<CAssetId>& part, const std::vector<CAssetId>& swhc,
const std::vector<CAssetId>& elsc1, const std::vector<CAssetId>& elsc2)
: x0_part(part), x10_swhc(swhc), x20_elsc(elsc1), x30_elsc(elsc2) {}
CParticleResData(std::vector<CAssetId> part, std::vector<CAssetId> swhc, std::vector<CAssetId> elsc1,
std::vector<CAssetId> elsc2)
: x0_part(std::move(part)), x10_swhc(std::move(swhc)), x20_elsc(std::move(elsc1)), x30_elsc(std::move(elsc2)) {}
};
private:
@ -66,6 +66,6 @@ public:
s32 GetAnimationIndex(s32 idx) const { return xb0_animIdxs.at(idx); }
const CPASDatabase& GetPASDatabase() const { return x30_pasDatabase; }
const s32 GetAnimationIndex(std::string_view) const;
s32 GetAnimationIndex(std::string_view) const;
};
} // namespace urde