summaryrefslogtreecommitdiff
path: root/transpiler/MyString.h
diff options
context:
space:
mode:
authorMatthew Kosarek <mattkae@protonmail.com>2021-05-16 19:50:15 -0400
committerMatthew Kosarek <mattkae@protonmail.com>2021-05-16 19:50:15 -0400
commita00c0aab1eb5a7a55bef8ca08115bdd722ab5699 (patch)
tree45b5c4cc8c380d0630a8e0185af7229f26dc754a /transpiler/MyString.h
parent4941a1874b6ca9d142d94df70b2aec5e0b35b94e (diff)
Moved the frontend directory up so that it no longer exists
Diffstat (limited to 'transpiler/MyString.h')
-rw-r--r--transpiler/MyString.h76
1 files changed, 76 insertions, 0 deletions
diff --git a/transpiler/MyString.h b/transpiler/MyString.h
new file mode 100644
index 0000000..d05d84a
--- /dev/null
+++ b/transpiler/MyString.h
@@ -0,0 +1,76 @@
+#pragma once
+#include "List.h"
+
+struct StringView {
+ bool error = false;
+ char* value = nullptr;
+ size_t length = 0;
+};
+
+struct String {
+ const static int SSO_SIZE = 31;
+
+ char defaultBuffer[String::SSO_SIZE + 1] = { '\0' };
+ char* dynamicBuffer = nullptr;
+
+ int length = 0;
+ int capacity = 0;
+ bool isSSO = true;
+
+ String();
+ String(const char* str);
+ char* getValue();
+ const char* getValueConst() const;
+ void operator =(const char* str);
+ void set(const char* str);
+ void free();
+ int toInteger();
+ float toFloat();
+ int indexOf(char c);
+ inline bool equals(const String& other) { return strcmp(getValueConst(), other.getValueConst()) == 0; };
+ inline bool equalsCstr(const char* str) { return strcmp(getValueConst(), str) == 0; };
+ StringView substring(int start, int end);
+};
+
+struct StringBuffer {
+ const static int BUFFER_SIZE = 31;
+
+ int pointer = 0;
+ char buffer[StringBuffer::BUFFER_SIZE + 1]; // Leave space for trailing escape character
+
+ /*
+ * Appends the string to the buffer
+ * @param str
+ * @returns number of characters copied
+ */
+ int add(const char* str);
+ bool isFull();
+ void reset();
+};
+
+struct StringBuilder {
+ int bufferPointer = 0;
+ int length = 0;
+
+ StringBuffer defaultBuffer;
+ List<StringBuffer> dynamicBuffer;
+
+ StringBuffer* getCurrentBuffer();
+ StringBuffer* getBufferAtIdx(int index);
+ const StringBuffer* getBufferAtIdxConst(int index) const;
+ void addStr(String* str);
+ void addStr(const char* str);
+ void addChar(char c);
+ void format(const char* str, ...);
+ void addInt(int value);
+ void addFloat(float value);
+ void replace(const char* strToReplace, const char* replaceStr);
+ void removeAt(int index, int count);
+ int indexOf(char c);
+ int indexOf(const char* str);
+ String toString();
+ void clear();
+ char getCharAtIdx(int index) const;
+ void insert(char c, int index);
+ void free();
+}; \ No newline at end of file