Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/core/StarDirectives.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-06-24 22:49:47 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-06-24 22:49:47 +1000
commit7eb010d4a1c6a90d5040b3ec2e7d189fb387b9b2 (patch)
tree44445bce5cee5387511ac0045072539f5a928294 /source/core/StarDirectives.cpp
parentaa08eaac993a309d3aebc2cd4321513a1e413254 (diff)
Pretty much working now
Diffstat (limited to 'source/core/StarDirectives.cpp')
-rw-r--r--source/core/StarDirectives.cpp60
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;