Skip to content

Commit

Permalink
Remove all use of lcf::Data globals
Browse files Browse the repository at this point in the history
  • Loading branch information
mateofio committed Jan 9, 2021
1 parent 8bdca2e commit 9847d84
Show file tree
Hide file tree
Showing 12 changed files with 204 additions and 199 deletions.
4 changes: 2 additions & 2 deletions bench/readldb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ int main(int argc, char** argv) {
return 1;
}
const auto& infile = argv[1];
auto rc = LDB_Reader::Load(infile, "");
if (!rc) {
auto db = LDB_Reader::Load(infile, "");
if (db == nullptr) {
std::cerr << "Failed to load file : " << infile << std::endl;
return 1;
}
Expand Down
37 changes: 9 additions & 28 deletions src/lcf/ldb/reader.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,26 +12,7 @@

#include <string>
#include <vector>
#include "lcf/rpg/actor.h"
#include "lcf/rpg/skill.h"
#include "lcf/rpg/item.h"
#include "lcf/rpg/enemy.h"
#include "lcf/rpg/troop.h"
#include "lcf/rpg/attribute.h"
#include "lcf/rpg/state.h"
#include "lcf/rpg/terrain.h"
#include "lcf/rpg/chipset.h"
#include "lcf/rpg/animation.h"
#include "lcf/rpg/terms.h"
#include "lcf/rpg/system.h"
#include "lcf/rpg/commonevent.h"
#include "lcf/rpg/music.h"
#include "lcf/rpg/sound.h"
#include "lcf/rpg/class.h"
#include "lcf/rpg/battlecommand.h"
#include "lcf/rpg/battleranimation.h"
#include "lcf/rpg/parameters.h"
#include "lcf/rpg/equipment.h"
#include <memory>
#include "lcf/rpg/database.h"
#include "lcf/saveopt.h"

Expand All @@ -49,42 +30,42 @@ namespace LDB_Reader {
/**
* Loads Database.
*/
bool Load(const std::string& filename, const std::string& encoding);
std::unique_ptr<lcf::rpg::Database> Load(const std::string& filename, const std::string& encoding);

/**
* Saves Database.
*/
bool Save(const std::string& filename, const std::string& encoding, SaveOpt opt = SaveOpt::eNone);
bool Save(const std::string& filename, const lcf::rpg::Database& db, const std::string& encoding, SaveOpt opt = SaveOpt::eNone);

/**
* Saves Database as XML.
*/
bool SaveXml(const std::string& filename);
bool SaveXml(const std::string& filename, const lcf::rpg::Database& db);

/**
* Load Database as XML.
*/
bool LoadXml(const std::string& filename);
std::unique_ptr<lcf::rpg::Database> LoadXml(const std::string& filename);

/**
* Loads Database.
*/
bool Load(std::istream& filestream, const std::string& encoding);
std::unique_ptr<lcf::rpg::Database> Load(std::istream& filestream, const std::string& encoding);

/**
* Saves Database.
*/
bool Save(std::ostream& filestream, const std::string& encoding, SaveOpt opt = SaveOpt::eNone);
bool Save(std::ostream& filestream, const lcf::rpg::Database& db, const std::string& encoding, SaveOpt opt = SaveOpt::eNone);

/**
* Saves Database as XML.
*/
bool SaveXml(std::ostream& filestream);
bool SaveXml(std::ostream& filestream, const lcf::rpg::Database& db);

/**
* Load Database as XML.
*/
bool LoadXml(std::istream& filestream);
std::unique_ptr<lcf::rpg::Database> LoadXml(std::istream& filestream);
}

} // namespace lcf
Expand Down
20 changes: 9 additions & 11 deletions src/lcf/lmt/reader.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,7 @@
#define LCF_LMT_READER_H

#include <string>
#include "lcf/reader_lcf.h"
#include "lcf/writer_lcf.h"
#include "lcf/writer_xml.h"
#include <memory>
#include "lcf/rpg/treemap.h"
#include "lcf/saveopt.h"

Expand All @@ -27,42 +25,42 @@ namespace LMT_Reader {
/**
* Loads Map Tree.
*/
bool Load(const std::string& filename, const std::string &encoding);
std::unique_ptr<lcf::rpg::TreeMap> Load(const std::string& filename, const std::string &encoding);

/**
* Saves Map Tree.
*/
bool Save(const std::string& filename, const std::string &encoding, SaveOpt opt = SaveOpt::eNone);
bool Save(const std::string& filename, const lcf::rpg::TreeMap& tmap, bool is2k3, const std::string &encoding, SaveOpt opt = SaveOpt::eNone);

/**
* Saves Map Tree as XML.
*/
bool SaveXml(const std::string& filename);
bool SaveXml(const std::string& filename, const lcf::rpg::TreeMap& tmap, bool is2k3);

/**
* Loads Map Tree as XML.
*/
bool LoadXml(const std::string& filename);
std::unique_ptr<lcf::rpg::TreeMap> LoadXml(const std::string& filename);

/**
* Loads Map Tree.
*/
bool Load(std::istream& filestream, const std::string &encoding);
std::unique_ptr<lcf::rpg::TreeMap> Load(std::istream& filestream, const std::string &encoding);

/**
* Saves Map Tree.
*/
bool Save(std::ostream& filestream, const std::string &encoding, SaveOpt opt = SaveOpt::eNone);
bool Save(std::ostream& filestream, const lcf::rpg::TreeMap& tmap, bool is2k3, const std::string &encoding, SaveOpt opt = SaveOpt::eNone);

/**
* Saves Map Tree as XML.
*/
bool SaveXml(std::ostream& filestream);
bool SaveXml(std::ostream& filestream, const lcf::rpg::TreeMap& tmap, bool is2k3);

/**
* Loads Map Tree as XML.
*/
bool LoadXml(std::istream& filestream);
std::unique_ptr<lcf::rpg::TreeMap> LoadXml(std::istream& filestream);
}

} //namespace lcf
Expand Down
8 changes: 4 additions & 4 deletions src/lcf/lmu/reader.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ namespace LMU_Reader {
/**
* Saves map.
*/
bool Save(const std::string& filename, const rpg::Map& map, const std::string& encoding, SaveOpt opt = SaveOpt::eNone);
bool Save(const std::string& filename, const rpg::Map& map, bool is2k3, const std::string& encoding, SaveOpt opt = SaveOpt::eNone);

/**
* Saves map as XML.
*/
bool SaveXml(const std::string& filename, const rpg::Map& map);
bool SaveXml(const std::string& filename, const rpg::Map& map, bool is2k3);

/**
* Loads map as XML.
Expand All @@ -55,12 +55,12 @@ namespace LMU_Reader {
/**
* Saves map.
*/
bool Save(std::ostream& filestream, const rpg::Map& map, const std::string& encoding, SaveOpt opt = SaveOpt::eNone);
bool Save(std::ostream& filestream, const rpg::Map& map, bool is2k3, const std::string& encoding, SaveOpt opt = SaveOpt::eNone);

/**
* Saves map as XML.
*/
bool SaveXml(std::ostream& filestream, const rpg::Map& map);
bool SaveXml(std::ostream& filestream, const rpg::Map& map, bool is2k3);

/**
* Loads map as XML.
Expand Down
8 changes: 4 additions & 4 deletions src/lcf/lsd/reader.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,12 @@ namespace LSD_Reader {
/**
* Saves Savegame.
*/
bool Save(const std::string& filename, const rpg::Save& save, const std::string &encoding);
bool Save(const std::string& filename, const rpg::Save& save, bool is2k3, const std::string &encoding);

/*
* Saves Savegame as XML.
*/
bool SaveXml(const std::string& filename, const rpg::Save& save);
bool SaveXml(const std::string& filename, const rpg::Save& save, bool is2k3);

/**
* Loads Savegame as XML.
Expand All @@ -71,12 +71,12 @@ namespace LSD_Reader {
/**
* Saves Savegame.
*/
bool Save(std::ostream& filestream, const rpg::Save& save, const std::string &encoding);
bool Save(std::ostream& filestream, const rpg::Save& save, bool is2k3, const std::string &encoding);

/*
* Saves Savegame as XML.
*/
bool SaveXml(std::ostream& filestream, const rpg::Save& save);
bool SaveXml(std::ostream& filestream, const rpg::Save& save, bool is2k3);

/**
* Loads Savegame as XML.
Expand Down
66 changes: 37 additions & 29 deletions src/ldb_reader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@

#include "lcf/ldb/reader.h"
#include "lcf/ldb/chunks.h"
#include "lcf/data.h"
#include "lcf/reader_util.h"
#include "reader_struct.h"

Expand All @@ -23,108 +22,117 @@ void LDB_Reader::PrepareSave(rpg::Database& db) {
++db.system.save_count;
}

bool LDB_Reader::Load(const std::string& filename, const std::string& encoding) {
std::unique_ptr<lcf::rpg::Database> LDB_Reader::Load(const std::string& filename, const std::string& encoding) {
std::ifstream stream(filename.c_str(), std::ios::binary);
if (!stream.is_open()) {
fprintf(stderr, "Failed to open LDB file `%s' for reading : %s\n", filename.c_str(), strerror(errno));
return false;
return nullptr;
}
return LDB_Reader::Load(stream, encoding);
}

bool LDB_Reader::Save(const std::string& filename, const std::string& encoding, SaveOpt opt) {
bool LDB_Reader::Save(const std::string& filename, const lcf::rpg::Database& db, const std::string& encoding, SaveOpt opt) {
std::ofstream stream(filename.c_str(), std::ios::binary);
if (!stream.is_open()) {
fprintf(stderr, "Failed to open LDB file `%s' for writing : %s\n", filename.c_str(), strerror(errno));
return false;
}
return LDB_Reader::Save(stream, encoding, opt);
return LDB_Reader::Save(stream, db, encoding, opt);
}

bool LDB_Reader::SaveXml(const std::string& filename) {
bool LDB_Reader::SaveXml(const std::string& filename, const lcf::rpg::Database& db) {
std::ofstream stream(filename.c_str(), std::ios::binary);
if (!stream.is_open()) {
fprintf(stderr, "Failed to open LDB XML file `%s' for writing : %s\n", filename.c_str(), strerror(errno));
return false;
}
return LDB_Reader::SaveXml(stream);
return LDB_Reader::SaveXml(stream, db);
}

bool LDB_Reader::LoadXml(const std::string& filename) {
std::unique_ptr<lcf::rpg::Database> LDB_Reader::LoadXml(const std::string& filename) {
std::ifstream stream(filename.c_str(), std::ios::binary);
if (!stream.is_open()) {
fprintf(stderr, "Failed to open LDB XML file `%s' for reading : %s\n", filename.c_str(), strerror(errno));
return false;
return nullptr;
}
return LDB_Reader::LoadXml(stream);
}

bool LDB_Reader::Load(std::istream& filestream, const std::string& encoding) {
std::unique_ptr<lcf::rpg::Database> LDB_Reader::Load(std::istream& filestream, const std::string& encoding) {
LcfReader reader(filestream, encoding);
if (!reader.IsOk()) {
LcfReader::SetError("Couldn't parse database file.\n");
return false;
return nullptr;
}
std::string header;
reader.ReadString(header, reader.ReadInt());
if (header.length() != 11) {
LcfReader::SetError("This is not a valid RPG2000 database.\n");
return false;
return nullptr;
}
if (header != "LcfDataBase") {
fprintf(stderr, "Warning: This header is not LcfDataBase and might not be a valid RPG2000 database.\n");
}
Data::data.ldb_header = header;
TypeReader<rpg::Database>::ReadLcf(Data::data, reader, 0);
auto db = std::make_unique<lcf::rpg::Database>();
db->ldb_header = header;
TypeReader<rpg::Database>::ReadLcf(*db, reader, 0);

// Delayed initialization of some actor fields because they are engine
// dependent
for (auto& actor: Data::actors) {
actor.Setup(Data::system.ldb_id == 2003);
for (auto& actor: db->actors) {
actor.Setup(db->system.ldb_id == 2003);
}

return true;
return db;
}

bool LDB_Reader::Save(std::ostream& filestream, const std::string& encoding, SaveOpt opt) {
LcfWriter writer(filestream, Data::system.ldb_id == 2003, encoding);
bool LDB_Reader::Save(std::ostream& filestream, const lcf::rpg::Database& db, const std::string& encoding, SaveOpt opt) {
LcfWriter writer(filestream, db.system.ldb_id == 2003, encoding);
if (!writer.IsOk()) {
LcfReader::SetError("Couldn't parse database file.\n");
return false;
}
std::string header;
if ( Data::data.ldb_header.empty() || !bool(opt & SaveOpt::ePreserveHeader)) {
if ( db.ldb_header.empty() || !bool(opt & SaveOpt::ePreserveHeader)) {
header = "LcfDataBase";
} else {
header= Data::data.ldb_header;
header= db.ldb_header;
}
writer.WriteInt(header.size());
writer.Write(header);
TypeReader<rpg::Database>::WriteLcf(Data::data, writer);
TypeReader<rpg::Database>::WriteLcf(db, writer);
return true;
}

bool LDB_Reader::SaveXml(std::ostream& filestream) {
XmlWriter writer(filestream, Data::system.ldb_id == 2003);
bool LDB_Reader::SaveXml(std::ostream& filestream, const lcf::rpg::Database& db) {
XmlWriter writer(filestream, db.system.ldb_id == 2003);
if (!writer.IsOk()) {
LcfReader::SetError("Couldn't parse database file.\n");
return false;
}
writer.BeginElement("LDB");
TypeReader<rpg::Database>::WriteXml(Data::data, writer);
TypeReader<rpg::Database>::WriteXml(db, writer);
writer.EndElement("LDB");
return true;
}

bool LDB_Reader::LoadXml(std::istream& filestream) {
std::unique_ptr<lcf::rpg::Database> LDB_Reader::LoadXml(std::istream& filestream) {
XmlReader reader(filestream);
if (!reader.IsOk()) {
LcfReader::SetError("Couldn't parse database file.\n");
return false;
return nullptr;;
}
reader.SetHandler(new RootXmlHandler<rpg::Database>(Data::data, "LDB"));
auto db = std::make_unique<lcf::rpg::Database>();
reader.SetHandler(new RootXmlHandler<rpg::Database>(*db, "LDB"));
reader.Parse();
return true;

// Delayed initialization of some actor fields because they are engine
// dependent
for (auto& actor: db->actors) {
actor.Setup(db->system.ldb_id == 2003);
}

return db;
}

} // namespace lcf
Loading

0 comments on commit 9847d84

Please sign in to comment.