diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-24 22:49:47 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-24 22:49:47 +1000 |
commit | 7eb010d4a1c6a90d5040b3ec2e7d189fb387b9b2 (patch) | |
tree | 44445bce5cee5387511ac0045072539f5a928294 /source/core/StarDirectives.cpp | |
parent | aa08eaac993a309d3aebc2cd4321513a1e413254 (diff) |
Pretty much working now
Diffstat (limited to 'source/core/StarDirectives.cpp')
-rw-r--r-- | source/core/StarDirectives.cpp | 60 |
1 files changed, 59 insertions, 1 deletions
diff --git a/source/core/StarDirectives.cpp b/source/core/StarDirectives.cpp index e486ea9..8dcf8da 100644 --- a/source/core/StarDirectives.cpp +++ b/source/core/StarDirectives.cpp @@ -10,6 +10,16 @@ Directives::Entry::Entry(ImageOperation&& newOperation, String&& newString) { string = move(newString); } +Directives::Entry::Entry(ImageOperation const& newOperation, String const& newString) { + operation = newOperation; + string = newString; +} + +Directives::Entry::Entry(Entry const& other) { + operation = other.operation; + string = other.string; +} + Directives::Directives() {} Directives::Directives(String const& directives) { parse(directives); @@ -20,6 +30,17 @@ Directives::Directives(String&& directives) { parse(mine); } +Directives::Directives(const char* directives) { + String string(directives); + parse(string); +} + +Directives::Directives(List<Entry>&& newEntries) { + entries = std::make_shared<List<Entry> const>(move(newEntries)); + String directives = toString(); // This needs to be better + hash = XXH3_64bits(directives.utf8Ptr(), directives.utf8Size()); +} + void Directives::parse(String const& directives) { List<Entry> newList; StringList split = directives.split('?'); @@ -41,6 +62,32 @@ void Directives::buildString(String& out) const { } } +String Directives::toString() const { + String result; + buildString(result); + return result; +} + +inline bool Directives::empty() const { + return entries->empty(); +} + + +DataStream& operator>>(DataStream& ds, Directives& directives) { + String string; + ds.read(string); + + directives.parse(string); + + return ds; +} + +DataStream& operator<<(DataStream& ds, Directives const& directives) { + ds.write(directives.toString()); + + return ds; +} + DirectivesGroup::DirectivesGroup() : m_count(0) {} DirectivesGroup::DirectivesGroup(String const& directives) { m_directives.emplace_back(directives); @@ -66,10 +113,21 @@ inline bool DirectivesGroup::compare(DirectivesGroup const& other) const { } void DirectivesGroup::append(Directives const& directives) { - m_directives.push_back(directives); + m_directives.emplace_back(directives); m_count += m_directives.back().entries->size(); } +void DirectivesGroup::append(List<Directives::Entry>&& entries) { + size_t size = entries.size(); + m_directives.emplace_back(move(entries)); + m_count += size; +} + +void DirectivesGroup::clear() { + m_directives.clear(); + m_count = 0; +} + DirectivesGroup& DirectivesGroup::operator+=(Directives const& other) { append(other); return *this; |