|
|
@@ -180,7 +180,8 @@ public:
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-#define ANKI_SERIALIZER_LOGE(...) ANKI_SCENE_LOGE("%s", (SceneString().sprintf(__VA_ARGS__) + SceneString().sprintf(". Line %u: ", m_lineno)).cstr())
|
|
|
+#define ANKI_SERIALIZER_LOGE(...) \
|
|
|
+ ANKI_SCENE_LOGE("%s", (SceneString().sprintf(__VA_ARGS__) + SceneString().sprintf(". Line %u: ", m_read.m_lineno)).cstr())
|
|
|
#define ANKI_SERIALIZER_CHECK(expr) \
|
|
|
do \
|
|
|
{ \
|
|
|
@@ -196,32 +197,36 @@ public:
|
|
|
class TextSceneSerializer : public SceneSerializer
|
|
|
{
|
|
|
public:
|
|
|
- TextSceneSerializer(File* file, Bool writingMode)
|
|
|
- : SceneSerializer(writingMode)
|
|
|
- , m_file(*file)
|
|
|
+ // Write mode
|
|
|
+ TextSceneSerializer(File* file)
|
|
|
+ : SceneSerializer(true)
|
|
|
{
|
|
|
- if(!m_writeMode)
|
|
|
- {
|
|
|
- SceneString txt;
|
|
|
- ANKI_CHECKF(file->readAllText(txt));
|
|
|
+ m_write.m_file = file;
|
|
|
+ }
|
|
|
|
|
|
- m_lines.splitString(txt, '\n');
|
|
|
- m_linesIt = m_lines.getBegin();
|
|
|
- }
|
|
|
+ // Read mode
|
|
|
+ TextSceneSerializer(ResourceFile* file)
|
|
|
+ : SceneSerializer(false)
|
|
|
+ {
|
|
|
+ ResourceString txt;
|
|
|
+ ANKI_CHECKF(file->readAllText(txt));
|
|
|
+
|
|
|
+ m_read.m_lines.splitString(txt, '\n');
|
|
|
+ m_read.m_linesIt = m_read.m_lines.getBegin();
|
|
|
}
|
|
|
|
|
|
Error write(CString name, ConstWeakArray<U32> values) final
|
|
|
{
|
|
|
if(values.getSize() == 1)
|
|
|
{
|
|
|
- ANKI_CHECK(m_file.writeTextf("%s %u\n", name.cstr(), values[0]));
|
|
|
+ ANKI_CHECK(m_write.m_file->writeTextf("%s %u\n", name.cstr(), values[0]));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- ANKI_CHECK(m_file.writeTextf("%s %u ", name.cstr(), values[0]));
|
|
|
+ ANKI_CHECK(m_write.m_file->writeTextf("%s %u ", name.cstr(), values[0]));
|
|
|
for(U32 i = 1; i < values.getSize(); ++i)
|
|
|
{
|
|
|
- ANKI_CHECK(m_file.writeTextf((i < values.getSize() - 1) ? "%u " : "%u\n", values[i]));
|
|
|
+ ANKI_CHECK(m_write.m_file->writeTextf((i < values.getSize() - 1) ? "%u " : "%u\n", values[i]));
|
|
|
}
|
|
|
}
|
|
|
return Error::kNone;
|
|
|
@@ -245,14 +250,14 @@ public:
|
|
|
{
|
|
|
if(values.getSize() == 1)
|
|
|
{
|
|
|
- ANKI_CHECK(m_file.writeTextf("%s %d\n", name.cstr(), values[0]));
|
|
|
+ ANKI_CHECK(m_write.m_file->writeTextf("%s %d\n", name.cstr(), values[0]));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- ANKI_CHECK(m_file.writeTextf("%s %d ", name.cstr(), values[0]));
|
|
|
+ ANKI_CHECK(m_write.m_file->writeTextf("%s %d ", name.cstr(), values[0]));
|
|
|
for(U32 i = 1; i < values.getSize(); ++i)
|
|
|
{
|
|
|
- ANKI_CHECK(m_file.writeTextf((i < values.getSize() - 1) ? "%d " : "%d\n", values[i]));
|
|
|
+ ANKI_CHECK(m_write.m_file->writeTextf((i < values.getSize() - 1) ? "%d " : "%d\n", values[i]));
|
|
|
}
|
|
|
}
|
|
|
return Error::kNone;
|
|
|
@@ -276,14 +281,14 @@ public:
|
|
|
{
|
|
|
if(values.getSize() == 1)
|
|
|
{
|
|
|
- ANKI_CHECK(m_file.writeTextf("%s %f\n", name.cstr(), values[0]));
|
|
|
+ ANKI_CHECK(m_write.m_file->writeTextf("%s %f\n", name.cstr(), values[0]));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- ANKI_CHECK(m_file.writeTextf("%s %f ", name.cstr(), values[0]));
|
|
|
+ ANKI_CHECK(m_write.m_file->writeTextf("%s %f ", name.cstr(), values[0]));
|
|
|
for(U32 i = 1; i < values.getSize(); ++i)
|
|
|
{
|
|
|
- ANKI_CHECK(m_file.writeTextf((i < values.getSize() - 1) ? "%f " : "%f\n", values[i]));
|
|
|
+ ANKI_CHECK(m_write.m_file->writeTextf((i < values.getSize() - 1) ? "%f " : "%f\n", values[i]));
|
|
|
}
|
|
|
}
|
|
|
return Error::kNone;
|
|
|
@@ -305,7 +310,7 @@ public:
|
|
|
|
|
|
Error write(CString name, CString value) final
|
|
|
{
|
|
|
- return m_file.writeTextf("%s %s\n", name.cstr(), value.cstr());
|
|
|
+ return m_write.m_file->writeTextf("%s %s\n", name.cstr(), value.cstr());
|
|
|
}
|
|
|
|
|
|
Error read([[maybe_unused]] CString name, [[maybe_unused]] SceneString& value) final
|
|
|
@@ -323,11 +328,19 @@ public:
|
|
|
}
|
|
|
|
|
|
private:
|
|
|
- File& m_file;
|
|
|
+ class
|
|
|
+ {
|
|
|
+ public:
|
|
|
+ File* m_file = nullptr;
|
|
|
+ } m_write;
|
|
|
|
|
|
- SceneStringList m_lines;
|
|
|
- SceneStringList::Iterator m_linesIt;
|
|
|
- U32 m_lineno = 0;
|
|
|
+ class
|
|
|
+ {
|
|
|
+ public:
|
|
|
+ SceneStringList m_lines;
|
|
|
+ SceneStringList::Iterator m_linesIt;
|
|
|
+ U32 m_lineno = 0;
|
|
|
+ } m_read;
|
|
|
|
|
|
Error parseCurrentLine(SceneStringList& tokens, CString fieldName, U32 checkTokenCount = kMaxU32);
|
|
|
};
|