mirror of https://github.com/AxioDL/metaforce.git
Use StringView in MultiProgressPrinter
Also fixes the SpecMP1/2/3 using string_view instead of SystemStringView
This commit is contained in:
parent
de4ddcaa9c
commit
d310dcfecb
|
@ -486,7 +486,7 @@ void SpecBase::copyBuildListData(std::vector<std::tuple<size_t, size_t, bool>>&
|
||||||
int loadIdx = 0;
|
int loadIdx = 0;
|
||||||
for (const auto& tag : buildList) {
|
for (const auto& tag : buildList) {
|
||||||
hecl::SystemString str = fmt::format(FMT_STRING(_SYS_STR("Copying {}")), tag);
|
hecl::SystemString str = fmt::format(FMT_STRING(_SYS_STR("Copying {}")), tag);
|
||||||
progress.print(str.c_str(), nullptr, ++loadIdx / float(buildList.size()));
|
progress.print(str, std::nullopt, ++loadIdx / float(buildList.size()));
|
||||||
|
|
||||||
auto& [positionOut, sizeOut, compressedOut] = fileIndex.emplace_back();
|
auto& [positionOut, sizeOut, compressedOut] = fileIndex.emplace_back();
|
||||||
|
|
||||||
|
|
|
@ -325,9 +325,8 @@ struct SpecMP1 : SpecBase {
|
||||||
progress.startNewLine();
|
progress.startNewLine();
|
||||||
progress.print(_SYS_STR("MP1 Root"), _SYS_STR(""), 0.0);
|
progress.print(_SYS_STR("MP1 Root"), _SYS_STR(""), 0.0);
|
||||||
int prog = 0;
|
int prog = 0;
|
||||||
ctx.progressCB = [&](std::string_view name, float) {
|
ctx.progressCB = [&](nod::SystemStringView name, float) {
|
||||||
hecl::SystemStringConv nameView(name);
|
progress.print(_SYS_STR("MP1 Root"), name, prog / (float)m_nonPaks.size());
|
||||||
progress.print(_SYS_STR("MP1 Root"), nameView.c_str(), prog / (float)m_nonPaks.size());
|
|
||||||
};
|
};
|
||||||
for (const nod::Node* node : m_nonPaks) {
|
for (const nod::Node* node : m_nonPaks) {
|
||||||
node->extractToDirectory(mp1OutPath.getAbsolutePath(), ctx);
|
node->extractToDirectory(mp1OutPath.getAbsolutePath(), ctx);
|
||||||
|
@ -367,7 +366,7 @@ struct SpecMP1 : SpecBase {
|
||||||
int threadIdx = hecl::ClientProcess::GetThreadWorkerIdx();
|
int threadIdx = hecl::ClientProcess::GetThreadWorkerIdx();
|
||||||
m_pakRouter.extractResources(pak, force, btok,
|
m_pakRouter.extractResources(pak, force, btok,
|
||||||
[&progress, &pakName, threadIdx](const hecl::SystemChar* substr, float factor) {
|
[&progress, &pakName, threadIdx](const hecl::SystemChar* substr, float factor) {
|
||||||
progress.print(pakName.c_str(), substr, factor, threadIdx);
|
progress.print(pakName, substr, factor, threadIdx);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -285,9 +285,8 @@ struct SpecMP2 : SpecBase {
|
||||||
progress.startNewLine();
|
progress.startNewLine();
|
||||||
progress.print(_SYS_STR("MP2 Root"), _SYS_STR(""), 0.0);
|
progress.print(_SYS_STR("MP2 Root"), _SYS_STR(""), 0.0);
|
||||||
int prog = 0;
|
int prog = 0;
|
||||||
ctx.progressCB = [&prog, &progress](std::string_view name, float) {
|
ctx.progressCB = [&prog, &progress](nod::SystemStringView name, float) {
|
||||||
hecl::SystemStringConv nameView(name);
|
progress.print(_SYS_STR("MP2 Root"), name, prog);
|
||||||
progress.print(_SYS_STR("MP2 Root"), nameView.c_str(), prog);
|
|
||||||
};
|
};
|
||||||
for (const nod::Node* node : m_nonPaks) {
|
for (const nod::Node* node : m_nonPaks) {
|
||||||
node->extractToDirectory(mp2OutPath.getAbsolutePath(), ctx);
|
node->extractToDirectory(mp2OutPath.getAbsolutePath(), ctx);
|
||||||
|
@ -310,7 +309,7 @@ struct SpecMP2 : SpecBase {
|
||||||
int threadIdx = hecl::ClientProcess::GetThreadWorkerIdx();
|
int threadIdx = hecl::ClientProcess::GetThreadWorkerIdx();
|
||||||
m_pakRouter.extractResources(pak, force, btok,
|
m_pakRouter.extractResources(pak, force, btok,
|
||||||
[&progress, &pakName, threadIdx](const hecl::SystemChar* substr, float factor) {
|
[&progress, &pakName, threadIdx](const hecl::SystemChar* substr, float factor) {
|
||||||
progress.print(pakName.c_str(), substr, factor, threadIdx);
|
progress.print(pakName, substr, factor, threadIdx);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -372,9 +372,8 @@ struct SpecMP3 : SpecBase {
|
||||||
hecl::SystemString currentTarget;
|
hecl::SystemString currentTarget;
|
||||||
size_t nodeCount = 0;
|
size_t nodeCount = 0;
|
||||||
int prog = 0;
|
int prog = 0;
|
||||||
nod::ExtractionContext ctx = {force, [&](std::string_view name, float) {
|
nod::ExtractionContext ctx = {force, [&](nod::SystemStringView name, float) {
|
||||||
hecl::SystemStringConv nameView(name);
|
progress.print(currentTarget, name, prog / (float)nodeCount);
|
||||||
progress.print(currentTarget.c_str(), nameView.c_str(), prog / (float)nodeCount);
|
|
||||||
}};
|
}};
|
||||||
if (doMP3) {
|
if (doMP3) {
|
||||||
m_workPath.makeDir();
|
m_workPath.makeDir();
|
||||||
|
@ -420,7 +419,7 @@ struct SpecMP3 : SpecBase {
|
||||||
process.addLambdaTransaction([this, &progress, &pak, pakName, force](hecl::blender::Token& btok) {
|
process.addLambdaTransaction([this, &progress, &pak, pakName, force](hecl::blender::Token& btok) {
|
||||||
m_pakRouter.extractResources(pak, force, btok,
|
m_pakRouter.extractResources(pak, force, btok,
|
||||||
[&progress, &pakName](const hecl::SystemChar* substr, float factor) {
|
[&progress, &pakName](const hecl::SystemChar* substr, float factor) {
|
||||||
progress.print(pakName.c_str(), substr, factor);
|
progress.print(pakName, substr, factor);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -470,7 +469,7 @@ struct SpecMP3 : SpecBase {
|
||||||
process.addLambdaTransaction([this, &progress, &pak, pakName, force](hecl::blender::Token& btok) {
|
process.addLambdaTransaction([this, &progress, &pak, pakName, force](hecl::blender::Token& btok) {
|
||||||
m_fePakRouter.extractResources(pak, force, btok,
|
m_fePakRouter.extractResources(pak, force, btok,
|
||||||
[&progress, &pakName](const hecl::SystemChar* substr, float factor) {
|
[&progress, &pakName](const hecl::SystemChar* substr, float factor) {
|
||||||
progress.print(pakName.c_str(), substr, factor);
|
progress.print(pakName, substr, factor);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,7 +107,7 @@ public:
|
||||||
hecl::SystemString fileOut = hecl::SystemString(outPath.getAbsolutePath()) + _SYS_STR('/') + idView.c_str();
|
hecl::SystemString fileOut = hecl::SystemString(outPath.getAbsolutePath()) + _SYS_STR('/') + idView.c_str();
|
||||||
hecl::MultiProgressPrinter printer(true);
|
hecl::MultiProgressPrinter printer(true);
|
||||||
auto progFunc = [&printer](float totalProg, nod::SystemStringView fileName, size_t fileBytesXfered) {
|
auto progFunc = [&printer](float totalProg, nod::SystemStringView fileName, size_t fileBytesXfered) {
|
||||||
printer.print(fileName.data(), nullptr, totalProg);
|
printer.print(fileName, std::nullopt, totalProg);
|
||||||
};
|
};
|
||||||
if (id[0] == 'G') {
|
if (id[0] == 'G') {
|
||||||
fileOut += _SYS_STR(".gcm");
|
fileOut += _SYS_STR(".gcm");
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
#include <optional>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
@ -55,7 +56,8 @@ class MultiProgressPrinter {
|
||||||
public:
|
public:
|
||||||
MultiProgressPrinter(bool activate = false);
|
MultiProgressPrinter(bool activate = false);
|
||||||
~MultiProgressPrinter();
|
~MultiProgressPrinter();
|
||||||
void print(const hecl::SystemChar* message, const hecl::SystemChar* submessage, float factor = -1.f,
|
void print(std::optional<hecl::SystemStringView> message, std::optional<hecl::SystemStringView> submessage,
|
||||||
|
float factor = -1.f,
|
||||||
int threadIdx = 0) const;
|
int threadIdx = 0) const;
|
||||||
void setMainFactor(float factor) const;
|
void setMainFactor(float factor) const;
|
||||||
void setMainIndeterminate(bool indeterminate) const;
|
void setMainIndeterminate(bool indeterminate) const;
|
||||||
|
|
|
@ -184,7 +184,7 @@ bool ClientProcess::syncCook(const hecl::ProjectPath& path, Database::IDataSpec*
|
||||||
str = fmt::format(FMT_STRING(_SYS_STR("Cooking {}")), path.getRelativePath());
|
str = fmt::format(FMT_STRING(_SYS_STR("Cooking {}")), path.getRelativePath());
|
||||||
else
|
else
|
||||||
str = fmt::format(FMT_STRING(_SYS_STR("Cooking {}|{}")), path.getRelativePath(), path.getAuxInfo());
|
str = fmt::format(FMT_STRING(_SYS_STR("Cooking {}|{}")), path.getRelativePath(), path.getAuxInfo());
|
||||||
m_progPrinter->print(str.c_str(), nullptr, -1.f, hecl::ClientProcess::GetThreadWorkerIdx());
|
m_progPrinter->print(str, std::nullopt, -1.f, hecl::ClientProcess::GetThreadWorkerIdx());
|
||||||
m_progPrinter->flush();
|
m_progPrinter->flush();
|
||||||
} else {
|
} else {
|
||||||
if (path.getAuxInfo().empty())
|
if (path.getAuxInfo().empty())
|
||||||
|
@ -199,7 +199,7 @@ bool ClientProcess::syncCook(const hecl::ProjectPath& path, Database::IDataSpec*
|
||||||
str = fmt::format(FMT_STRING(_SYS_STR("Cooked {}")), path.getRelativePath());
|
str = fmt::format(FMT_STRING(_SYS_STR("Cooked {}")), path.getRelativePath());
|
||||||
else
|
else
|
||||||
str = fmt::format(FMT_STRING(_SYS_STR("Cooked {}|{}")), path.getRelativePath(), path.getAuxInfo());
|
str = fmt::format(FMT_STRING(_SYS_STR("Cooked {}|{}")), path.getRelativePath(), path.getAuxInfo());
|
||||||
m_progPrinter->print(str.c_str(), nullptr, -1.f, hecl::ClientProcess::GetThreadWorkerIdx());
|
m_progPrinter->print(str, std::nullopt, -1.f, hecl::ClientProcess::GetThreadWorkerIdx());
|
||||||
m_progPrinter->flush();
|
m_progPrinter->flush();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -286,7 +286,9 @@ MultiProgressPrinter::~MultiProgressPrinter() {
|
||||||
m_logThread.join();
|
m_logThread.join();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MultiProgressPrinter::print(const hecl::SystemChar* message, const hecl::SystemChar* submessage, float factor,
|
void MultiProgressPrinter::print(std::optional<hecl::SystemStringView> message,
|
||||||
|
std::optional<hecl::SystemStringView> submessage,
|
||||||
|
float factor,
|
||||||
int threadIdx) const {
|
int threadIdx) const {
|
||||||
if (!m_running) {
|
if (!m_running) {
|
||||||
return;
|
return;
|
||||||
|
@ -302,12 +304,12 @@ void MultiProgressPrinter::print(const hecl::SystemChar* message, const hecl::Sy
|
||||||
|
|
||||||
ThreadStat& stat = m_threadStats[threadIdx];
|
ThreadStat& stat = m_threadStats[threadIdx];
|
||||||
if (message) {
|
if (message) {
|
||||||
stat.m_message = message;
|
stat.m_message = *message;
|
||||||
} else {
|
} else {
|
||||||
stat.m_message.clear();
|
stat.m_message.clear();
|
||||||
}
|
}
|
||||||
if (submessage) {
|
if (submessage) {
|
||||||
stat.m_submessage = submessage;
|
stat.m_submessage = *submessage;
|
||||||
} else {
|
} else {
|
||||||
stat.m_submessage.clear();
|
stat.m_submessage.clear();
|
||||||
}
|
}
|
||||||
|
|
|
@ -322,7 +322,7 @@ public:
|
||||||
submsg += _SYS_STR(" (");
|
submsg += _SYS_STR(" (");
|
||||||
submsg += specEnt->m_name.data();
|
submsg += specEnt->m_name.data();
|
||||||
submsg += _SYS_STR(')');
|
submsg += _SYS_STR(')');
|
||||||
m_progPrinter.print(m_dir, submsg.c_str(), m_prog);
|
m_progPrinter.print(m_dir, submsg, m_prog);
|
||||||
}
|
}
|
||||||
void reportFile(const DataSpecEntry* specEnt, const SystemChar* extra) {
|
void reportFile(const DataSpecEntry* specEnt, const SystemChar* extra) {
|
||||||
SystemString submsg(m_file);
|
SystemString submsg(m_file);
|
||||||
|
@ -331,9 +331,9 @@ public:
|
||||||
submsg += _SYS_STR(", ");
|
submsg += _SYS_STR(", ");
|
||||||
submsg += extra;
|
submsg += extra;
|
||||||
submsg += _SYS_STR(')');
|
submsg += _SYS_STR(')');
|
||||||
m_progPrinter.print(m_dir, submsg.c_str(), m_prog);
|
m_progPrinter.print(m_dir, submsg, m_prog);
|
||||||
}
|
}
|
||||||
void reportDirComplete() { m_progPrinter.print(m_dir, nullptr, 1.f); }
|
void reportDirComplete() { m_progPrinter.print(m_dir, std::nullopt, 1.f); }
|
||||||
};
|
};
|
||||||
|
|
||||||
static void VisitFile(const ProjectPath& path, bool force, bool fast,
|
static void VisitFile(const ProjectPath& path, bool force, bool fast,
|
||||||
|
|
Loading…
Reference in New Issue