#ifndef EmojicodeString_h
#define EmojicodeString_h
#include "EmojicodeAPI.hpp"
namespace Emojicode {
struct String {
EmojicodeInteger length;
Object *charactersObject;
EmojicodeChar* characters() { return charactersObject->val<EmojicodeChar>(); }
};
extern Object **stringPool;
#define emptyString (stringPool[0])
bool stringEqual(String *a, String *b);
const char* stringToCString(Object *str);
Object* stringFromChar(const char *cstring);
void parseJSON(Thread *thread, Box *destination);
void stringMark(Object *self);
struct List;
void initStringFromSymbolList(String *string, List *list);
void stringPrintStdoutBrigde(Thread *thread);
void stringEqualBridge(Thread *thread);
void stringSubstringBridge(Thread *thread);
void stringIndexOf(Thread *thread);
void stringTrimBridge(Thread *thread);
void stringGetInput(Thread *thread);
void stringSplitByStringBridge(Thread *thread);
void stringLengthBridge(Thread *thread);
void stringUTF8LengthBridge(Thread *thread);
void stringByAppendingSymbolBridge(Thread *thread);
void stringSymbolAtBridge(Thread *thread);
void stringBeginsWithBridge(Thread *thread);
void stringEndsWithBridge(Thread *thread);
void stringSplitBySymbolBridge(Thread *thread);
void stringToData(Thread *thread);
void stringToCharacterList(Thread *thread);
void stringJSON(Thread *thread);
void stringFromSymbolListBridge(Thread *thread);
void stringFromStringList(Thread *thread);
void stringToInteger(Thread *thread);
void stringToDouble(Thread *thread);
void stringToUppercase(Thread *thread);
void stringToLowercase(Thread *thread);
void stringCompareBridge(Thread *thread);
}
#endif