summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ArchiveEx/CMakeLists.txt2
-rw-r--r--DefinitionEx/CMakeLists.txt24
-rw-r--r--DefinitionEx/include/Parser_ss.h (renamed from DefinitionEx/Parser_ss.h)25
-rw-r--r--DefinitionEx/include/Term.h (renamed from DefinitionEx/Term.h)22
-rw-r--r--DefinitionEx/include/Token.h (renamed from DefinitionEx/Token.h)27
-rw-r--r--DefinitionEx/src/Parser_ss.cpp (renamed from DefinitionEx/Parser_ss.cpp)43
-rw-r--r--DefinitionEx/src/Term.cpp (renamed from DefinitionEx/Term.cpp)14
-rw-r--r--DefinitionEx/src/Token.cpp (renamed from DefinitionEx/Token.cpp)93
-rw-r--r--DefinitionEx/test/parse_utils_like.cpp106
-rw-r--r--FoundationEx/CMakeLists.txt3
-rw-r--r--FoundationEx/include/Reader.h44
-rw-r--r--FoundationEx/src/Reader_.cpp55
-rw-r--r--InfoEx/CMakeLists.txt2
-rw-r--r--StarsEx/AudioConfig.cpp5
-rw-r--r--StarsEx/Campaign.cpp8
-rw-r--r--StarsEx/CampaignSaveGame.cpp2
-rw-r--r--StarsEx/CombatGroup.cpp4
-rw-r--r--StarsEx/CombatZone.cpp2
-rw-r--r--StarsEx/Explosion.cpp2
-rw-r--r--StarsEx/Font.cpp2
-rw-r--r--StarsEx/FormDef.cpp2
-rw-r--r--StarsEx/Galaxy.cpp2
-rw-r--r--StarsEx/Mission.cpp2
-rw-r--r--StarsEx/MissionTemplate.cpp2
-rw-r--r--StarsEx/ModConfig.cpp2
-rw-r--r--StarsEx/ModInfo.cpp2
-rw-r--r--StarsEx/MsnEventDlg.cpp4
-rw-r--r--StarsEx/NetClientConfig.cpp2
-rw-r--r--StarsEx/NetLobby.cpp3
-rw-r--r--StarsEx/NetServerConfig.cpp4
-rw-r--r--StarsEx/ParseUtil.h11
-rw-r--r--StarsEx/Player.cpp4
-rw-r--r--StarsEx/Ship.cpp1
-rw-r--r--StarsEx/ShipDesign.cpp8
-rw-r--r--StarsEx/StarSystem.cpp2
-rw-r--r--StarsEx/Starshatter.cpp2
-rw-r--r--StarsEx/SystemDesign.cpp2
-rw-r--r--StarsEx/WeaponDesign.cpp2
38 files changed, 279 insertions, 263 deletions
diff --git a/ArchiveEx/CMakeLists.txt b/ArchiveEx/CMakeLists.txt
index a40fcdc..ce17999 100644
--- a/ArchiveEx/CMakeLists.txt
+++ b/ArchiveEx/CMakeLists.txt
@@ -1,12 +1,10 @@
project(ArchiveEx)
-
add_library(${PROJECT_NAME} SHARED Archive.cpp)
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(${PROJECT_NAME} PRIVATE Zlib::zlibstatic)
install(TARGETS ${PROJECT_NAME} RUNTIME COMPONENT Runtime DESTINATION ${CMAKE_INSTALL_PREFIX})
-
add_executable(dat dat.cpp)
target_link_libraries(dat PRIVATE ${PROJECT_NAME})
if(WIN32)
diff --git a/DefinitionEx/CMakeLists.txt b/DefinitionEx/CMakeLists.txt
index fe4e819..f098670 100644
--- a/DefinitionEx/CMakeLists.txt
+++ b/DefinitionEx/CMakeLists.txt
@@ -1,15 +1,15 @@
project(DefinitionEx)
+
add_library(
- DefinitionEx STATIC
- Parser_ss.cpp
- Term.cpp
- Token.cpp
- )
-target_include_directories(
- DefinitionEx
- PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
- )
-target_link_libraries(
- DefinitionEx
- PUBLIC FoundationEx
+ ${PROJECT_NAME} STATIC
+ src/Parser_ss.cpp
+ src/Term.cpp
+ src/Token.cpp
)
+target_include_directories(${PROJECT_NAME} PUBLIC include)
+target_link_libraries(${PROJECT_NAME} PUBLIC FoundationEx)
+
+add_executable(${PROJECT_NAME}_test test/parse_utils_like.cpp)
+target_link_libraries(${PROJECT_NAME}_test PRIVATE ${PROJECT_NAME} GTest::gtest_main)
+generate_emulator(${PROJECT_NAME}_test)
+gtest_discover_tests(${PROJECT_NAME}_test DISCOVERY_TIMEOUT 60)
diff --git a/DefinitionEx/Parser_ss.h b/DefinitionEx/include/Parser_ss.h
index 5019f61..50659b9 100644
--- a/DefinitionEx/Parser_ss.h
+++ b/DefinitionEx/include/Parser_ss.h
@@ -3,23 +3,23 @@
Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
Copyright (c) 1997-2006, Destroyer Studios LLC.
- AUTHOR: John DiCamillo
+ AUTHOR: John DiCamillo
- OVERVIEW
- ========
- Declaration of the generic Parser class
+ OVERVIEW
+ ========
+ Declaration of the generic Parser class
*/
-#ifndef Parser_h
-#define Parser_h
+#pragma once
+
+#include <starshatter/foundation/reader.h>
+#include <Text.h>
-#include "Text.h"
#include "Term.h"
// +-------------------------------------------------------------------+
-class Reader;
class Scanner;
// +-------------------------------------------------------------------+
@@ -27,7 +27,8 @@ class Scanner;
class Parser
{
public:
- Parser(Reader* r = 0);
+ Parser();
+ Parser(starshatter::foundation::Reader r);
~Parser();
Term* ParseTerm();
@@ -38,9 +39,5 @@ public:
TermStruct* ParseStruct();
private:
- Reader* reader;
- Scanner* lexer;
+ Scanner* lexer;
};
-
-
-#endif // Parser_h
diff --git a/DefinitionEx/Term.h b/DefinitionEx/include/Term.h
index f7e2b86..1bc30b6 100644
--- a/DefinitionEx/Term.h
+++ b/DefinitionEx/include/Term.h
@@ -3,19 +3,18 @@
Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
Copyright (c) 1997-2006, Destroyer Studios LLC.
- AUTHOR: John DiCamillo
+ AUTHOR: John DiCamillo
- OVERVIEW
- ========
- Declaration of the Abstract Syntax Tree classes
+ OVERVIEW
+ ========
+ Declaration of the Abstract Syntax Tree classes
*/
-#ifndef Term_h
-#define Term_h
+#pragma once
-#include "Text.h"
-#include "List.h"
+#include <Text.h>
+#include <List.h>
// +-------------------------------------------------------------------+
@@ -32,7 +31,7 @@ class TermStruct;
class Term
{
public:
- static const char* TYPENAME() { return "Term"; }
+ static const char* TYPENAME() { return "Term"; }
Term() { }
virtual ~Term() { }
@@ -51,7 +50,7 @@ public:
virtual TermStruct* isStruct() { return 0; }
};
-Term* error(char*, char* = 0);
+Term* error(const char*, const char* = 0);
// +-------------------------------------------------------------------+
@@ -166,6 +165,3 @@ private:
TermText* mname;
Term* mval;
};
-
-
-#endif // Term_h
diff --git a/DefinitionEx/Token.h b/DefinitionEx/include/Token.h
index 59a3414..3dd8eb9 100644
--- a/DefinitionEx/Token.h
+++ b/DefinitionEx/include/Token.h
@@ -3,25 +3,24 @@
Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
Copyright (c) 1997-2006, Destroyer Studios LLC.
- AUTHOR: John DiCamillo
+ AUTHOR: John DiCamillo
- OVERVIEW
- ========
- Scanner class definition
+ OVERVIEW
+ ========
+ Scanner class definition
*/
-#ifndef Token_h
-#define Token_h
+#pragma once
-#include "Text.h"
-#include "Dictionary.h"
+#include <Dictionary.h>
+#include <starshatter/foundation/reader.h>
+#include <Text.h>
#pragma warning( disable : 4237)
// +-------------------------------------------------------------------+
-class Reader;
class Token;
class Scanner;
@@ -104,7 +103,8 @@ protected:
class Scanner
{
public:
- Scanner(Reader* r = 0);
+ Scanner();
+ Scanner(starshatter::foundation::Reader r);
Scanner(const Text& s);
Scanner(const Scanner& rhs);
virtual ~Scanner();
@@ -127,8 +127,8 @@ protected:
virtual bool IsSymbolic(char c);
virtual bool IsAlpha(char c);
- Reader* reader;
- char* str;
+ starshatter::foundation::Reader reader;
+ char* str;
const char* p;
const char* eos;
@@ -141,6 +141,3 @@ protected:
size_t old_line;
size_t lineStart;
};
-
-
-#endif // Token_h
diff --git a/DefinitionEx/Parser_ss.cpp b/DefinitionEx/src/Parser_ss.cpp
index d02b7ee..1b80d48 100644
--- a/DefinitionEx/Parser_ss.cpp
+++ b/DefinitionEx/src/Parser_ss.cpp
@@ -3,29 +3,34 @@
Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
Copyright (c) 1997-2006, Destroyer Studios LLC.
- AUTHOR: John DiCamillo
+ AUTHOR: John DiCamillo
- OVERVIEW
- ========
- Implementation of the generic Parser class
+ OVERVIEW
+ ========
+ Implementation of the generic Parser class
*/
-#include "Reader.h"
-#include "Token.h"
-#include "Parser_ss.h"
-#include "Term.h"
-#include "Utils.h"
+#include <Parser_ss.h>
+
#include <stdio.h>
#include <stdlib.h>
+#include <utility>
+
+#include <starshatter/foundation/reader.h>
+#include <Utils.h>
+
+#include <Term.h>
+#include <Token.h>
+
enum KEYS { KEY_TRUE, KEY_FALSE, KEY_DEF, KEY_MINUS };
static int dump_tokens = 0;
// +-------------------------------------------------------------------+
-Term* error(char* msg, const Token& token)
+Term* error(const char* msg, const Token& token)
{
static char buf[1024];
snprintf(buf, 1024, " near '%s' in line %d", (const char*) token.symbol(), token.line());
@@ -34,11 +39,19 @@ Term* error(char* msg, const Token& token)
// +-------------------------------------------------------------------+
-Parser::Parser(Reader* r)
+Parser::Parser() :
+ lexer {nullptr}
{
- reader = r;
- lexer = new Scanner(reader);
+ Token::addKey("true", KEY_TRUE);
+ Token::addKey("false", KEY_FALSE);
+ Token::addKey(":", KEY_DEF);
+ Token::addKey("-", KEY_MINUS);
+}
+
+Parser::Parser(starshatter::foundation::Reader r) :
+ lexer {new Scanner(std::move(r))}
+{
Token::addKey("true", KEY_TRUE);
Token::addKey("false", KEY_FALSE);
Token::addKey(":", KEY_DEF);
@@ -47,8 +60,8 @@ Parser::Parser(Reader* r)
Parser::~Parser()
{
- delete lexer;
- delete reader;
+ if (lexer)
+ delete lexer;
//Token::close();
}
diff --git a/DefinitionEx/Term.cpp b/DefinitionEx/src/Term.cpp
index c27eb4e..acfdcb8 100644
--- a/DefinitionEx/Term.cpp
+++ b/DefinitionEx/src/Term.cpp
@@ -3,22 +3,22 @@
Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
Copyright (c) 1997-2006, Destroyer Studios LLC.
- AUTHOR: John DiCamillo
+ AUTHOR: John DiCamillo
- OVERVIEW
- ========
- Implementation of the Term class
+ OVERVIEW
+ ========
+ Implementation of the Term class
*/
+#include <Term.h>
-#include "Term.h"
-#include "Utils.h"
+#include <Utils.h>
// +-------------------------------------------------------------------+
Term*
-error(char* s1, char* s2)
+error(const char* s1, const char* s2)
{
Print("ERROR: ");
if (s1) Print(s1);
diff --git a/DefinitionEx/Token.cpp b/DefinitionEx/src/Token.cpp
index 2d060b9..3f516de 100644
--- a/DefinitionEx/Token.cpp
+++ b/DefinitionEx/src/Token.cpp
@@ -3,20 +3,24 @@
Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
Copyright (c) 1997-2006, Destroyer Studios LLC.
- AUTHOR: John DiCamillo
+ AUTHOR: John DiCamillo
- OVERVIEW
- ========
- Scanner class implementation
+ OVERVIEW
+ ========
+ Scanner class implementation
*/
-#include "Token.h"
-#include "Reader.h"
-#include "Text.h"
+#include <Token.h>
#include <ctype.h>
+#include <cstddef>
+#include <utility>
+
+#include <starshatter/foundation/reader.h>
+#include <Text.h>
+
// +-------------------------------------------------------------------+
bool Token::hidecom = true;
@@ -285,50 +289,51 @@ Token::describe(const Text& tok)
// +-------------------------------------------------------------------+
-Scanner::Scanner(Reader* r)
- : reader(r), str(0), index(0), old_index(0),
- length(0), line(0), old_line(0), lineStart(0)
-{ }
-
-Scanner::Scanner(const Scanner& rhs)
- : index(rhs.index), old_index(rhs.old_index), length(rhs.length),
- reader(rhs.reader),
- line(rhs.line), old_line(0), lineStart(rhs.lineStart)
+Scanner::Scanner() :
+ reader {},
+ str {nullptr},
+ index {0},
+ old_index {0},
+ length {0},
+ line {0},
+ old_line {0},
+ lineStart {0}
{
- str = new char [strlen(rhs.str) + 1];
- strcpy(str, rhs.str);
}
-Scanner::Scanner(const Text& s)
- : reader(0), index(0), old_index(0), length(s.length()), line(0),
- old_line(0), lineStart(0)
-{
- str = new char [s.length() + 1];
- strcpy(str, s.data());
-}
-Scanner::~Scanner()
+Scanner::Scanner(starshatter::foundation::Reader r) :
+ reader {std::move(r)},
+ str {nullptr},
+ index {0},
+ old_index {0},
+ length {0},
+ line {0},
+ old_line {0},
+ lineStart {0}
{
- delete [] str;
}
-// +-------------------------------------------------------------------+
-Scanner&
-Scanner::operator = (const Scanner& rhs)
+Scanner::Scanner(const Text& s) :
+ reader {},
+ str {nullptr},
+ index {0},
+ old_index {0},
+ length {static_cast<std::size_t>(s.length())},
+ line {0},
+ old_line {0},
+ lineStart {0}
{
- delete [] str;
- str = new char [strlen(rhs.str) + 1];
- strcpy(str, rhs.str);
+ str = new char [s.length() + 1];
+ strcpy(str, s.data());
+}
- index = rhs.index;
- old_index = rhs.old_index;
- length = rhs.length;
- line = rhs.line;
- old_line = rhs.old_line;
- lineStart = rhs.lineStart;
- return *this;
+Scanner::~Scanner()
+{
+ if (str)
+ delete [] str;
}
// +-------------------------------------------------------------------+
@@ -362,8 +367,8 @@ Scanner::Get(Need need)
p = str + index;
if (p >= eos) {
- if (need == Demand && reader) {
- Load(reader->more());
+ if (need == Demand && reader.valid()) {
+ Load(reader.more());
if (length > 0)
return Get(need);
}
@@ -379,8 +384,8 @@ Scanner::Get(Need need)
}
if (p >= eos) {
- if (need == Demand && reader) {
- Load(reader->more());
+ if (need == Demand && reader.valid()) {
+ Load(reader.more());
if (length > 0)
return Get(need);
}
diff --git a/DefinitionEx/test/parse_utils_like.cpp b/DefinitionEx/test/parse_utils_like.cpp
new file mode 100644
index 0000000..fc943f7
--- /dev/null
+++ b/DefinitionEx/test/parse_utils_like.cpp
@@ -0,0 +1,106 @@
+#include <gtest/gtest.h>
+
+#include <Parser_ss.h>
+#include <Term.h>
+#include <Token.h>
+
+
+TEST(DefinitionEx, ParseUtilsLike)
+{
+ std::string content {
+ "TEST\n\n"
+ "number: 3\n"
+ "bool: true\n"
+ "short: hello\n"
+ "longer: \"hello there\"\n"
+ "array: (0.98, -1.0, 0.35)\n"
+ "struct: {\n"
+ " name: \"trailing comma\",\n"
+ "}\n"
+ };
+ Parser parser({content.data(), content.size()});
+ Term* term = parser.ParseTerm();
+ ASSERT_NE(nullptr, term);
+ {
+ TermText* text = term->isText();
+ ASSERT_NE(nullptr, text);
+ EXPECT_STREQ("TEST", text->value());
+ }
+ {
+ delete term;
+ term = parser.ParseTerm();
+ ASSERT_NE(nullptr, term);
+ TermDef* def = term->isDef();
+ ASSERT_NE(nullptr, def);
+ EXPECT_STREQ("number", def->name()->value());
+ TermNumber* num = def->term()->isNumber();
+ ASSERT_NE(nullptr, num);
+ EXPECT_EQ(3, static_cast<int>(num->value()));
+ }
+ {
+ delete term;
+ term = parser.ParseTerm();
+ ASSERT_NE(nullptr, term);
+ TermDef* def = term->isDef();
+ ASSERT_NE(nullptr, def);
+ EXPECT_STREQ("bool", def->name()->value());
+ TermBool* boolean = def->term()->isBool();
+ ASSERT_NE(nullptr, boolean);
+ EXPECT_TRUE(boolean->value());
+ }
+ {
+ delete term;
+ term = parser.ParseTerm();
+ ASSERT_NE(nullptr, term);
+ TermDef* def = term->isDef();
+ ASSERT_NE(nullptr, def);
+ EXPECT_STREQ("short", def->name()->value());
+ TermText* text = def->term()->isText();
+ ASSERT_NE(nullptr, text);
+ EXPECT_STREQ("hello", text->value());
+ }
+ {
+ delete term;
+ term = parser.ParseTerm();
+ ASSERT_NE(nullptr, term);
+ TermDef* def = term->isDef();
+ ASSERT_NE(nullptr, def);
+ EXPECT_STREQ("longer", def->name()->value());
+ TermText* text = def->term()->isText();
+ ASSERT_NE(nullptr, text);
+ EXPECT_STREQ("hello there", text->value());
+ }
+ {
+ delete term;
+ term = parser.ParseTerm();
+ ASSERT_NE(nullptr, term);
+ TermDef* def = term->isDef();
+ ASSERT_NE(nullptr, def);
+ EXPECT_STREQ("array", def->name()->value());
+ TermArray* array = def->term()->isArray();
+ ASSERT_NE(nullptr, array);
+ ASSERT_EQ(3, array->elements()->size());
+ EXPECT_FLOAT_EQ(0.98, array->elements()->at(0)->isNumber()->value()); // what if not a number?
+ EXPECT_FLOAT_EQ(-1.0, array->elements()->at(1)->isNumber()->value());
+ EXPECT_FLOAT_EQ(0.35, array->elements()->at(2)->isNumber()->value());
+ }
+ {
+ delete term;
+ term = parser.ParseTerm();
+ ASSERT_NE(nullptr, term);
+ TermDef* def = term->isDef();
+ ASSERT_NE(nullptr, def);
+ EXPECT_STREQ("struct", def->name()->value());
+ ASSERT_NE(nullptr, def->term());
+ TermStruct* strukt = def->term()->isStruct();
+ ASSERT_NE(nullptr, strukt);
+ ASSERT_EQ(1, strukt->elements()->size());
+ def = strukt->elements()->at(0)->isDef();
+ ASSERT_NE(nullptr, def);
+ EXPECT_STREQ("name", def->name()->value());
+ TermText* text = def->term()->isText();
+ ASSERT_NE(nullptr, text);
+ EXPECT_STREQ("trailing comma", text->value());
+ }
+ Token::close();
+}
diff --git a/FoundationEx/CMakeLists.txt b/FoundationEx/CMakeLists.txt
index 972a242..d7d6ffa 100644
--- a/FoundationEx/CMakeLists.txt
+++ b/FoundationEx/CMakeLists.txt
@@ -1,7 +1,7 @@
project(FoundationEx)
+
add_library(
${PROJECT_NAME} STATIC
- src/Reader_.cpp
src/Text.cpp
src/Utils.cpp
src/reader.cpp
@@ -9,6 +9,7 @@ add_library(
src/reader/file.cpp
)
target_include_directories(${PROJECT_NAME} PUBLIC include)
+
add_executable(${PROJECT_NAME}_test test/Text.cpp test/reader.cpp test/data.cpp)
target_link_libraries(${PROJECT_NAME}_test PRIVATE ${PROJECT_NAME} GTest::gtest_main)
generate_emulator(${PROJECT_NAME}_test)
diff --git a/FoundationEx/include/Reader.h b/FoundationEx/include/Reader.h
deleted file mode 100644
index 2226366..0000000
--- a/FoundationEx/include/Reader.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Starshatter: The Open Source Project
- Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors
- Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
- Copyright (c) 1997-2006, Destroyer Studios LLC.
-
- AUTHOR: John DiCamillo
-
-
- OVERVIEW
- ========
- Declaration of the Reader class
-*/
-
-#ifndef Reader_h
-#define Reader_h
-
-#include "Text.h"
-
-
-class Reader
-{
-public:
- Reader() { }
- virtual ~Reader() { }
-
- virtual Text more() = 0;
-};
-
-
-class BlockReader : public Reader
-{
-public:
- BlockReader(const char* block);
- BlockReader(const char* block, int len);
- virtual Text more();
-
-private:
- char* data;
- int done;
- int length;
-};
-
-
-#endif // Reader_h
diff --git a/FoundationEx/src/Reader_.cpp b/FoundationEx/src/Reader_.cpp
deleted file mode 100644
index 7efdc6a..0000000
--- a/FoundationEx/src/Reader_.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Starshatter: The Open Source Project
- Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors
- Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
- Copyright (c) 1997-2006, Destroyer Studios LLC.
-
- AUTHOR: John DiCamillo
-
-
- OVERVIEW
- ========
- Implementation of the Reader class
-*/
-
-#include <Reader.h>
-
-#include <cstdio>
-
-#include <Utils.h>
-
-
-BlockReader::BlockReader(const char* block) :
- data((char*) block),
- done(0),
- length(0)
-{
-}
-
-
-BlockReader::BlockReader(const char* block, int len) :
- data((char*) block),
- done(0),
- length(len)
-{
-}
-
-
-Text
-BlockReader::more()
-{
- if (done) return Text();
-
- if (length) {
- Text result(data, length);
- done = 1;
- return result;
- }
- else if (data) {
- Text result(data);
- done = 1;
- return result;
- }
-
- done = 1;
- return Text();
-}
diff --git a/InfoEx/CMakeLists.txt b/InfoEx/CMakeLists.txt
index dab78ff..dcba526 100644
--- a/InfoEx/CMakeLists.txt
+++ b/InfoEx/CMakeLists.txt
@@ -1,4 +1,5 @@
project(InfoEx)
+
add_library(${PROJECT_NAME} STATIC src/description.cpp)
target_include_directories(${PROJECT_NAME} PUBLIC include/)
if(WIN32)
@@ -7,6 +8,7 @@ else()
target_sources(${PROJECT_NAME} PRIVATE src/directx_other.cpp)
endif()
target_link_libraries(${PROJECT_NAME} PUBLIC FoundationEx PRIVATE iware::infoware)
+
add_executable(${PROJECT_NAME}_test test/description.cpp test/directx.cpp)
generate_emulator(${PROJECT_NAME}_test)
target_link_libraries(${PROJECT_NAME}_test PRIVATE ${PROJECT_NAME} GTest::gtest_main)
diff --git a/StarsEx/AudioConfig.cpp b/StarsEx/AudioConfig.cpp
index c8939a1..6f8ceb8 100644
--- a/StarsEx/AudioConfig.cpp
+++ b/StarsEx/AudioConfig.cpp
@@ -14,6 +14,7 @@
#include "AudioConfig.h"
#include <algorithm>
+#include <cstddef>
#include "DataLoader.h"
#include "ParseUtil.h"
@@ -243,7 +244,7 @@ AudioConfig::Load()
// read the config file:
BYTE* block = 0;
- int blocklen = 0;
+ std::size_t blocklen = 0;
const char* filename = "audio.cfg";
FILE* f;
@@ -264,7 +265,7 @@ AudioConfig::Load()
if (blocklen == 0)
return;
- Parser parser(new BlockReader((const char*) block, blocklen));
+ Parser parser({reinterpret_cast<const char*>(block), blocklen});
Term* term = parser.ParseTerm();
if (!term) {
diff --git a/StarsEx/Campaign.cpp b/StarsEx/Campaign.cpp
index 63c9e3b..70846f0 100644
--- a/StarsEx/Campaign.cpp
+++ b/StarsEx/Campaign.cpp
@@ -432,7 +432,7 @@ Campaign::LoadCampaign(DataLoader* loader, bool full)
loader->UseFileSystem(true);
loader->LoadBuffer(filename, block, true);
loader->UseFileSystem(Starshatter::UseFileSystem());
- Parser parser(new BlockReader((const char*) block));
+ Parser parser(starshatter::foundation::Reader{reinterpret_cast<const char*>(block)});
Term* term = parser.ParseTerm();
@@ -970,7 +970,7 @@ Campaign::LoadMissionList(DataLoader* loader)
loader->UseFileSystem(true);
loader->LoadBuffer(filename, block, true);
loader->UseFileSystem(Starshatter::UseFileSystem());
- Parser parser(new BlockReader((const char*) block));
+ Parser parser(starshatter::foundation::Reader{reinterpret_cast<const char*>(block)});
Term* term = parser.ParseTerm();
@@ -1112,7 +1112,7 @@ Campaign::LoadCustomMissions(DataLoader* loader)
int type = 0;
int msn_id = 0;
- Parser parser(new BlockReader((const char*) block));
+ Parser parser(starshatter::foundation::Reader{reinterpret_cast<const char*>(block)});
Term* term = parser.ParseTerm();
if (!term) {
@@ -1225,7 +1225,7 @@ Campaign::LoadTemplateList(DataLoader* loader)
loader->UseFileSystem(true);
loader->LoadBuffer(filename, block, true);
loader->UseFileSystem(Starshatter::UseFileSystem());
- Parser parser(new BlockReader((const char*) block));
+ Parser parser(starshatter::foundation::Reader{reinterpret_cast<const char*>(block)});
Term* term = parser.ParseTerm();
diff --git a/StarsEx/CampaignSaveGame.cpp b/StarsEx/CampaignSaveGame.cpp
index cc64dbf..b959f01 100644
--- a/StarsEx/CampaignSaveGame.cpp
+++ b/StarsEx/CampaignSaveGame.cpp
@@ -167,7 +167,7 @@ CampaignSaveGame::Load(const char* filename)
Sleep(10);
- Parser parser(new BlockReader((const char*) block));
+ Parser parser(reinterpret_cast<const char*>(block));
Term* term = parser.ParseTerm();
if (!term) {
diff --git a/StarsEx/CombatGroup.cpp b/StarsEx/CombatGroup.cpp
index 57afd7b..6963a36 100644
--- a/StarsEx/CombatGroup.cpp
+++ b/StarsEx/CombatGroup.cpp
@@ -969,7 +969,7 @@ CombatGroup::LoadOrderOfBattle(const char* filename, int team, Combatant* combat
BYTE* block;
loader->LoadBuffer(filename, block, true);
- Parser parser(new BlockReader((const char*) block));
+ Parser parser(starshatter::foundation::Reader{reinterpret_cast<const char*>(block)});
Term* term = parser.ParseTerm();
if (!term) {
@@ -1213,7 +1213,7 @@ CombatGroup::MergeOrderOfBattle(BYTE* block, const char* filename, int team, Com
{
CombatGroup* force = 0;
- Parser parser(new BlockReader((const char*) block));
+ Parser parser(starshatter::foundation::Reader{reinterpret_cast<const char*>(block)});
Term* term = parser.ParseTerm();
if (!term) {
diff --git a/StarsEx/CombatZone.cpp b/StarsEx/CombatZone.cpp
index cd2ad1b..4b0655c 100644
--- a/StarsEx/CombatZone.cpp
+++ b/StarsEx/CombatZone.cpp
@@ -145,7 +145,7 @@ CombatZone::Load(const char* filename)
BYTE* block = 0;
loader->LoadBuffer(filename, block, true);
- Parser parser(new BlockReader((const char*) block));
+ Parser parser(starshatter::foundation::Reader{reinterpret_cast<const char*>(block)});
Term* term = parser.ParseTerm();
diff --git a/StarsEx/Explosion.cpp b/StarsEx/Explosion.cpp
index 1f613e7..925343d 100644
--- a/StarsEx/Explosion.cpp
+++ b/StarsEx/Explosion.cpp
@@ -203,7 +203,7 @@ Explosion::Initialize()
loader->SetDataPath("Explosions/");
int blocklen = loader->LoadBuffer(filename, block, true);
- Parser parser(new BlockReader((const char*) block, blocklen));
+ Parser parser({reinterpret_cast<const char*>(block), blocklen});
Term* term = parser.ParseTerm();
if (!term) {
diff --git a/StarsEx/Font.cpp b/StarsEx/Font.cpp
index 9dca717..92e4723 100644
--- a/StarsEx/Font.cpp
+++ b/StarsEx/Font.cpp
@@ -159,7 +159,7 @@ Font::LoadDef(char* defname, char* imgname)
if (!block || blocklen < 4)
return;
- Parser parser(new BlockReader((const char*) block, blocklen));
+ Parser parser({reinterpret_cast<const char*>(block), blocklen});
Term* term = parser.ParseTerm();
if (!term) {
diff --git a/StarsEx/FormDef.cpp b/StarsEx/FormDef.cpp
index 7a521ff..53f8218 100644
--- a/StarsEx/FormDef.cpp
+++ b/StarsEx/FormDef.cpp
@@ -580,7 +580,7 @@ FormDef::Load(const char* fname)
if (!block || blocklen < 4)
return;
- Parser parser(new BlockReader((const char*) block, blocklen));
+ Parser parser({reinterpret_cast<const char*>(block), blocklen});
Term* term = parser.ParseTerm();
if (!term) {
diff --git a/StarsEx/Galaxy.cpp b/StarsEx/Galaxy.cpp
index 3d4e02d..5759738 100644
--- a/StarsEx/Galaxy.cpp
+++ b/StarsEx/Galaxy.cpp
@@ -98,7 +98,7 @@ Galaxy::Load(const char* filename)
DataLoader* loader = DataLoader::GetLoader();
loader->LoadBuffer(filename, block, true);
- Parser parser(new BlockReader((const char*) block));
+ Parser parser(starshatter::foundation::Reader{reinterpret_cast<const char*>(block)});
Term* term = parser.ParseTerm();
diff --git a/StarsEx/Mission.cpp b/StarsEx/Mission.cpp
index cb3ef86..2350a8d 100644
--- a/StarsEx/Mission.cpp
+++ b/StarsEx/Mission.cpp
@@ -267,7 +267,7 @@ Mission::Load(const char* fname, const char* pname)
bool
Mission::ParseMission(const char* block)
{
- Parser parser(new BlockReader(block));
+ Parser parser(starshatter::foundation::Reader{block});
Term* term = parser.ParseTerm();
char err[256];
diff --git a/StarsEx/MissionTemplate.cpp b/StarsEx/MissionTemplate.cpp
index 55bec50..3e527a4 100644
--- a/StarsEx/MissionTemplate.cpp
+++ b/StarsEx/MissionTemplate.cpp
@@ -303,7 +303,7 @@ MissionTemplate::Load(const char* fname, const char* pname)
loader->SetDataPath(0);
loader->UseFileSystem(old_fs);
- Parser parser(new BlockReader((const char*) block));
+ Parser parser(starshatter::foundation::Reader{reinterpret_cast<const char*>(block)});
Term* term = parser.ParseTerm();
diff --git a/StarsEx/ModConfig.cpp b/StarsEx/ModConfig.cpp
index ad7e852..674e0b1 100644
--- a/StarsEx/ModConfig.cpp
+++ b/StarsEx/ModConfig.cpp
@@ -102,7 +102,7 @@ ModConfig::Load()
if (blocklen == 0)
return;
- Parser parser(new BlockReader((const char*) block, blocklen));
+ Parser parser({reinterpret_cast<const char*>(block), blocklen});
Term* term = parser.ParseTerm();
if (!term) {
diff --git a/StarsEx/ModInfo.cpp b/StarsEx/ModInfo.cpp
index 7f025b7..f48b46d 100644
--- a/StarsEx/ModInfo.cpp
+++ b/StarsEx/ModInfo.cpp
@@ -106,7 +106,7 @@ bool
ModInfo::ParseModInfo(const char* block)
{
bool ok = false;
- Parser parser(new BlockReader(block));
+ Parser parser(starshatter::foundation::Reader{block});
Term* term = parser.ParseTerm();
if (!term) {
diff --git a/StarsEx/MsnEventDlg.cpp b/StarsEx/MsnEventDlg.cpp
index 268c70c..5940d2c 100644
--- a/StarsEx/MsnEventDlg.cpp
+++ b/StarsEx/MsnEventDlg.cpp
@@ -309,7 +309,7 @@ MsnEventDlg::OnAccept(AWEvent* e)
event->event_nparams = 1;
}
else if (*buf == '(') {
- Parser parser(new BlockReader(buf));
+ Parser parser(starshatter::foundation::Reader{buf});
Term* term = parser.ParseTerm();
if (term && term->isArray()) {
@@ -360,7 +360,7 @@ MsnEventDlg::OnAccept(AWEvent* e)
}
else if (*buf == '(') {
- Parser parser(new BlockReader(buf));
+ Parser parser(starshatter::foundation::Reader{buf});
Term* term = parser.ParseTerm();
if (term && term->isArray()) {
diff --git a/StarsEx/NetClientConfig.cpp b/StarsEx/NetClientConfig.cpp
index 97cd11c..c90eff9 100644
--- a/StarsEx/NetClientConfig.cpp
+++ b/StarsEx/NetClientConfig.cpp
@@ -164,7 +164,7 @@ NetClientConfig::Load()
servers.destroy();
- Parser parser(new BlockReader((const char*) block, blocklen));
+ Parser parser({reinterpret_cast<const char*>(block), blocklen});
Term* term = parser.ParseTerm();
if (!term) {
diff --git a/StarsEx/NetLobby.cpp b/StarsEx/NetLobby.cpp
index 8222c75..10047d1 100644
--- a/StarsEx/NetLobby.cpp
+++ b/StarsEx/NetLobby.cpp
@@ -360,8 +360,7 @@ NetLobby::ParseMsg(Text msg, List<NetLobbyParam>& params)
{
params.destroy();
- BlockReader reader(msg.data(), msg.length());
- Scanner lexer(&reader);
+ Scanner lexer(starshatter::foundation::Reader{msg.data(), msg.length()});
Token name = lexer.Get();
diff --git a/StarsEx/NetServerConfig.cpp b/StarsEx/NetServerConfig.cpp
index 831c4da..47197f6 100644
--- a/StarsEx/NetServerConfig.cpp
+++ b/StarsEx/NetServerConfig.cpp
@@ -109,7 +109,7 @@ NetServerConfig::Load()
return;
}
- Parser parser(new BlockReader((const char*) block, blocklen));
+ Parser parser({reinterpret_cast<const char*>(block), blocklen});
Term* term = parser.ParseTerm();
if (!term) {
@@ -359,7 +359,7 @@ NetServerConfig::LoadBanList()
return;
}
- Parser parser(new BlockReader((const char*) block, blocklen));
+ Parser parser({reinterpret_cast<const char*>(block), blocklen});
Term* term = parser.ParseTerm();
if (!term) {
diff --git a/StarsEx/ParseUtil.h b/StarsEx/ParseUtil.h
index 947b4c7..554393c 100644
--- a/StarsEx/ParseUtil.h
+++ b/StarsEx/ParseUtil.h
@@ -15,15 +15,16 @@
#define ParseUtil_h
#include <vector>
+
+#include <Parser_ss.h>
+#include <starshatter/foundation/reader.h>
+#include <Text.h>
+#include <Token.h>
+
#include "Types.h"
#include "Geometry.h"
#include "Color.h"
-#include "Text.h"
-#include "Parser_ss.h"
-#include "Reader.h"
-#include "Token.h"
-
// +--------------------------------------------------------------------+
bool GetDefBool(bool& dst, TermDef* def, const char* file);
diff --git a/StarsEx/Player.cpp b/StarsEx/Player.cpp
index a5e31b0..4be2cff 100644
--- a/StarsEx/Player.cpp
+++ b/StarsEx/Player.cpp
@@ -962,7 +962,7 @@ Player::Load()
if (blocklen == 0)
return;
- Parser parser(new BlockReader((const char*) block, blocklen));
+ Parser parser(starshatter::foundation::Reader{reinterpret_cast<const char*>(block), blocklen});
Term* term = parser.ParseTerm();
if (!term) {
@@ -1340,7 +1340,7 @@ Player::LoadAwardTables()
loader->SetDataPath("Awards/");
loader->LoadBuffer(filename, block, true);
- Parser parser(new BlockReader((const char*) block));
+ Parser parser(starshatter::foundation::Reader{reinterpret_cast<const char*>(block)});
Term* term = parser.ParseTerm();
diff --git a/StarsEx/Ship.cpp b/StarsEx/Ship.cpp
index aebb1f0..251f92a 100644
--- a/StarsEx/Ship.cpp
+++ b/StarsEx/Ship.cpp
@@ -85,7 +85,6 @@
#include "Panic.h"
#include "Parser_ss.h"
-#include "Reader.h"
// +----------------------------------------------------------------------+
diff --git a/StarsEx/ShipDesign.cpp b/StarsEx/ShipDesign.cpp
index 9b4be4c..3fb11f3 100644
--- a/StarsEx/ShipDesign.cpp
+++ b/StarsEx/ShipDesign.cpp
@@ -264,7 +264,7 @@ bolt_hit_sound_resource(0), beam_hit_sound_resource(0), lod_levels(0)
return;
}
- Parser parser(new BlockReader((const char*) block, blocklen));
+ Parser parser({reinterpret_cast<const char*>(block), blocklen});
Term* term = parser.ParseTerm();
if (!term) {
@@ -527,7 +527,7 @@ void AddModCatalogEntry(const char* design_name, const char* design_path)
return;
}
- Parser parser(new BlockReader((const char*) block, blocklen));
+ Parser parser({reinterpret_cast<const char*>(block), blocklen});
Term* term = parser.ParseTerm();
if (!term) {
@@ -665,7 +665,7 @@ ShipDesign::LoadCatalog(const char* path, const char* fname, bool mod)
BYTE* block;
int blocklen = loader->LoadBuffer(filename, block, true);
- Parser parser(new BlockReader((const char*) block, blocklen));
+ Parser parser({reinterpret_cast<const char*>(block), blocklen});
Term* term = parser.ParseTerm();
if (!term) {
@@ -771,7 +771,7 @@ ShipDesign::LoadSkins(const char* path, int source)
continue;
}
- Parser parser(new BlockReader((const char*) block, blocklen));
+ Parser parser({reinterpret_cast<const char*>(block), blocklen});
Term* term = parser.ParseTerm();
ShipDesign* design = 0;
diff --git a/StarsEx/StarSystem.cpp b/StarsEx/StarSystem.cpp
index b6037b5..b8340f6 100644
--- a/StarsEx/StarSystem.cpp
+++ b/StarsEx/StarSystem.cpp
@@ -137,7 +137,7 @@ StarSystem::Load()
return;
}
- Parser parser(new BlockReader((const char*) block));
+ Parser parser(starshatter::foundation::Reader{reinterpret_cast<const char*>(block)});
Term* term = parser.ParseTerm();
diff --git a/StarsEx/Starshatter.cpp b/StarsEx/Starshatter.cpp
index 3decdae..adb519a 100644
--- a/StarsEx/Starshatter.cpp
+++ b/StarsEx/Starshatter.cpp
@@ -2292,7 +2292,7 @@ Starshatter::LoadVideoConfig(const char* filename)
if (blocklen == 0)
return;
- Parser parser(new BlockReader((const char*) block, blocklen));
+ Parser parser({reinterpret_cast<const char*>(block), blocklen});
Term* term = parser.ParseTerm();
if (!term) {
diff --git a/StarsEx/SystemDesign.cpp b/StarsEx/SystemDesign.cpp
index 4c64f57..a0f877d 100644
--- a/StarsEx/SystemDesign.cpp
+++ b/StarsEx/SystemDesign.cpp
@@ -48,7 +48,7 @@ SystemDesign::Initialize(const char* filename)
BYTE* block;
int blocklen = loader->LoadBuffer(filename, block, true);
- Parser parser(new BlockReader((const char*) block, blocklen));
+ Parser parser({reinterpret_cast<const char*>(block), blocklen});
Term* term = parser.ParseTerm();
if (!term) {
diff --git a/StarsEx/WeaponDesign.cpp b/StarsEx/WeaponDesign.cpp
index 3dd826d..ff26ec1 100644
--- a/StarsEx/WeaponDesign.cpp
+++ b/StarsEx/WeaponDesign.cpp
@@ -186,7 +186,7 @@ WeaponDesign::LoadDesign(const char* path, const char* filename, bool mod)
BYTE* block;
int blocklen = loader->LoadBuffer(filename, block, true);
- Parser parser(new BlockReader((const char*) block, blocklen));
+ Parser parser({reinterpret_cast<const char*>(block), blocklen});
Term* term = parser.ParseTerm();
if (!term) {