Skip to content

Commit

Permalink
upload and download simulations
Browse files Browse the repository at this point in the history
  • Loading branch information
chrxh committed Jun 4, 2022
1 parent 15e6ca7 commit 17d0d13
Show file tree
Hide file tree
Showing 26 changed files with 365 additions and 43 deletions.
7 changes: 6 additions & 1 deletion imgui.ini
Original file line number Diff line number Diff line change
Expand Up @@ -260,14 +260,19 @@ Collapsed=0

[Window][Browser]
Pos=274,112
Size=800,387
Size=850,387
Collapsed=0

[Window][Login]
Pos=749,421
Size=268,171
Collapsed=0

[Window][Upload simulation]
Pos=733,403
Size=400,218
Collapsed=0

[Table][0xFB3C2B09,3]
RefScale=13
Column 0 Sort=0v
Expand Down
135 changes: 128 additions & 7 deletions source/EngineInterface/Serializer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ namespace cereal

}

bool Serializer::serializeSimulationToFile(std::string const& filename, DeserializedSimulation const& data)
bool Serializer::serializeSimulationToFiles(std::string const& filename, DeserializedSimulation const& data)
{
try {

Expand All @@ -220,11 +220,11 @@ bool Serializer::serializeSimulationToFile(std::string const& filename, Deserial
symbolsFilename.replace_extension(std::filesystem::path(".symbols.json"));

{
zstr::ofstream fileStream(filename, std::ios::binary);
if (!fileStream) {
zstr::ofstream stream(filename, std::ios::binary);
if (!stream) {
return false;
}
serializeDataDescription(data.content, fileStream);
serializeDataDescription(data.content, stream);
}
{
std::ofstream stream(settingsFilename.string(), std::ios::binary);
Expand All @@ -248,7 +248,7 @@ bool Serializer::serializeSimulationToFile(std::string const& filename, Deserial
}
}

bool Serializer::deserializeSimulationFromFile(std::string const& filename, DeserializedSimulation& data)
bool Serializer::deserializeSimulationFromFiles(DeserializedSimulation& data, std::string const& filename)
{
try {
std::filesystem::path settingsFilename(filename);
Expand Down Expand Up @@ -282,6 +282,127 @@ bool Serializer::deserializeSimulationFromFile(std::string const& filename, Dese
}
}

bool Serializer::serializeSimulationToStrings(
std::string& content,
std::string& timestepAndSettings,
std::string& symbolMap,
DeserializedSimulation const& data)
{
try {
{
std::stringstream stdStream;
zstr::ostream stream(stdStream, std::ios::binary);
if (!stream) {
return false;
}
serializeDataDescription(data.content, stream);
stream.flush();
content = stdStream.str();
}
{
std::stringstream stream;
serializeTimestepAndSettings(data.timestep, data.settings, stream);
timestepAndSettings = stream.str();
}
{
std::stringstream stream;
serializeSymbolMap(data.symbolMap, stream);
symbolMap = stream.str();
}
return true;
} catch (...) {
return false;
}
}

bool Serializer::deserializeSimulationFromStrings(
DeserializedSimulation& data,
std::string const& content,
std::string const& timestepAndSettings,
std::string const& symbolMap)
{
try {
{
std::stringstream stdStream(content);
zstr::istream stream(stdStream, std::ios::binary);
if (!stream) {
return false;
}
deserializeDataDescription(data.content, stream);
}
{
std::stringstream stream(timestepAndSettings);
deserializeTimestepAndSettings(data.timestep, data.settings, stream);
}
{
std::stringstream stream(symbolMap);
deserializeSymbolMap(data.symbolMap, stream);
}
return true;
} catch (...) {
return false;
}
}

/*
bool Serializer::serializeSimulationToSingleString(std::string& output, DeserializedSimulation const& data)
{
try {
std::stringstream stream;
zstr::ostream zstrStream(stream);
if (!zstrStream) {
return false;
}
serializeDataDescription(data.content, zstrStream);
{
std::stringstream auxStream;
serializeTimestepAndSettings(data.timestep, data.settings, auxStream);
auto auxData = auxStream.str();
zstrStream << auxData;
}
{
std::stringstream auxStream;
serializeSymbolMap(data.symbolMap, auxStream);
auto auxData = auxStream.str();
zstrStream << auxData;
}
zstrStream.flush();
output = stream.str();
return true;
} catch (...) {
return false;
}
}
bool Serializer::deserializeSimulationFromSingleString(DeserializedSimulation& data, std::string const& input)
{
try {
std::stringstream stream(input);
zstr::istream zstrStream(stream);
if (!zstrStream) {
return false;
}
deserializeDataDescription(data.content, zstrStream);
{
std::string auxData;
zstrStream >> auxData;
std::stringstream auxStream(auxData);
deserializeTimestepAndSettings(data.timestep, data.settings, zstrStream);
}
{
std::string auxData;
zstrStream >> auxData;
std::stringstream auxStream(auxData);
deserializeSymbolMap(data.symbolMap, zstrStream);
}
return true;
} catch (...) {
return false;
}
}
*/


bool Serializer::serializeContentToFile(std::string const& filename, ClusteredDataDescription const& content)
{
try {
Expand All @@ -297,7 +418,7 @@ bool Serializer::serializeContentToFile(std::string const& filename, ClusteredDa
}
}

bool Serializer::deserializeContentFromFile(std::string const& filename, ClusteredDataDescription& content)
bool Serializer::deserializeContentFromFile(ClusteredDataDescription& content, std::string const& filename)
{
try {
if (!deserializeDataDescription(content, filename)) {
Expand All @@ -324,7 +445,7 @@ bool Serializer::serializeSymbolsToFile(std::string const& filename, SymbolMap c
}
}

bool Serializer::deserializeSymbolsFromFile(std::string const& filename, SymbolMap& symbolMap)
bool Serializer::deserializeSymbolsFromFile(SymbolMap& symbolMap, std::string const& filename)
{
try {
std::ifstream stream(filename, std::ios::binary);
Expand Down
24 changes: 20 additions & 4 deletions source/EngineInterface/Serializer.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,30 @@ struct DeserializedSimulation
class Serializer
{
public:
static bool serializeSimulationToFile(std::string const& filename, DeserializedSimulation const& data);
static bool deserializeSimulationFromFile(std::string const& filename, DeserializedSimulation& data);
static bool serializeSimulationToFiles(std::string const& filename, DeserializedSimulation const& data);
static bool deserializeSimulationFromFiles(DeserializedSimulation& data, std::string const& filename);

static bool serializeSimulationToStrings(
std::string& content,
std::string& timestepAndSettings,
std::string& symbolMap,
DeserializedSimulation const& data);
static bool deserializeSimulationFromStrings(
DeserializedSimulation& data,
std::string const& content,
std::string const& timestepAndSettings,
std::string const& symbolMap);

/*
static bool serializeSimulationToSingleString(std::string& output, DeserializedSimulation const& data);
static bool deserializeSimulationFromSingleString(DeserializedSimulation& data, std::string const& input);
*/

static bool serializeContentToFile(std::string const& filename, ClusteredDataDescription const& content);
static bool deserializeContentFromFile(std::string const& filename, ClusteredDataDescription& content);
static bool deserializeContentFromFile(ClusteredDataDescription& content, std::string const& filenam);

static bool serializeSymbolsToFile(std::string const& filename, SymbolMap const& symbolMap);
static bool deserializeSymbolsFromFile(std::string const& filename, SymbolMap& symbolMap);
static bool deserializeSymbolsFromFile(SymbolMap& symbolMap, std::string const& filename);

private:
static void serializeDataDescription(ClusteredDataDescription const& data, std::ostream& stream);
Expand Down
26 changes: 21 additions & 5 deletions source/Gui/AlienImGui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,12 @@ bool AlienImGui::InputText(InputTextParameters const& parameters, char* buffer,
if (parameters._password) {
flags |= ImGuiInputTextFlags_Password;
}
auto result = ImGui::InputText(("##" + parameters._name).c_str(), buffer, bufferSize, flags);
auto result = [&] {
if(!parameters._hint.empty()) {
return ImGui::InputTextWithHint(("##" + parameters._hint).c_str(), parameters._hint.c_str(), buffer, bufferSize, flags);
}
return ImGui::InputText(("##" + parameters._name).c_str(), buffer, bufferSize, flags);
}();
if (parameters._monospaceFont) {
ImGui::PopFont();
}
Expand All @@ -163,24 +168,35 @@ bool AlienImGui::InputText(InputTextParameters const& parameters, char* buffer,

bool AlienImGui::InputText(InputTextParameters const& parameters, std::string& text)
{
char buffer[1024];
static char buffer[1024];
StringHelper::copy(buffer, IM_ARRAYSIZE(buffer), text);
auto result = InputText(parameters, buffer, IM_ARRAYSIZE(buffer));
text = std::string(buffer);

return result;
}

void AlienImGui::InputTextMultiline(InputTextMultilineParameters const& parameters, char* buffer, int bufferSize)
void AlienImGui::InputTextMultiline(InputTextMultilineParameters const& parameters, std::string& text)
{
static char buffer[1024*16];
StringHelper::copy(buffer, IM_ARRAYSIZE(buffer), text);

auto textWidth = StyleRepository::getInstance().scaleContent(parameters._textWidth);
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x - textWidth);
auto height = parameters._height == 0
? ImGui::GetContentRegionAvail().y
: StyleRepository::getInstance().scaleContent(parameters._height);
ImGui::InputTextMultiline(("##" + parameters._name).c_str(), buffer, bufferSize, {0, height});
auto id = parameters._hint.empty() ? ("##" + parameters._name).c_str() : ("##" + parameters._hint).c_str();
ImGui::InputTextEx(
("##" + parameters._name).c_str(),
parameters._hint.c_str(),
buffer,
IM_ARRAYSIZE(buffer),
{ImGui::GetContentRegionAvail().x - textWidth, height},
ImGuiInputTextFlags_Multiline);
ImGui::SameLine();
ImGui::TextUnformatted(parameters._name.c_str());

text = std::string(buffer);
}

namespace
Expand Down
4 changes: 3 additions & 1 deletion source/Gui/AlienImGui.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ class AlienImGui
struct InputTextParameters
{
MEMBER_DECLARATION(InputTextParameters, std::string, name, "");
MEMBER_DECLARATION(InputTextParameters, std::string, hint, "");
MEMBER_DECLARATION(InputTextParameters, int, textWidth, 100);
MEMBER_DECLARATION(InputTextParameters, bool, monospaceFont, false);
MEMBER_DECLARATION(InputTextParameters, bool, readOnly, false);
Expand All @@ -78,10 +79,11 @@ class AlienImGui
struct InputTextMultilineParameters
{
MEMBER_DECLARATION(InputTextMultilineParameters, std::string, name, "");
MEMBER_DECLARATION(InputTextMultilineParameters, std::string, hint, "");
MEMBER_DECLARATION(InputTextMultilineParameters, int, textWidth, 100);
MEMBER_DECLARATION(InputTextMultilineParameters, float, height, 100.0f);
};
static void InputTextMultiline(InputTextMultilineParameters const& parameters, char* buffer, int bufferSize);
static void InputTextMultiline(InputTextMultilineParameters const& parameters, std::string& text);

struct ComboParameters
{
Expand Down
2 changes: 1 addition & 1 deletion source/Gui/AutosaveController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,5 +59,5 @@ void _AutosaveController::onSave()
sim.settings = _simController->getSettings();
sim.symbolMap = _simController->getSymbolMap();
sim.content = _simController->getClusteredSimulationData();
Serializer::serializeSimulationToFile(Const::AutosaveFile, sim);
Serializer::serializeSimulationToFiles(Const::AutosaveFile, sim);
}
Loading

0 comments on commit 17d0d13

Please sign in to comment.