#ifndef CJ_H # define CJ_H # define CJ_STRING_LENGTH (256) typedef struct { char mData[CJ_STRING_LENGTH]; } CJString; CJString makeCJString(void); typedef enum { CJ_TT_NONE, CJ_TT_LEFT_CURLY, CJ_TT_RIGHT_CURLY, CJ_TT_LEFT_SQUARE, CJ_TT_RIGHT_SQUARE, CJ_TT_COMMA, CJ_TT_COLON, CJ_TT_TRUE, CJ_TT_FALSE, CJ_TT_NULL, CJ_TT_STRING, CJ_TT_NUMBER } TokenType; typedef struct { TokenType mType; CJString mText; int mLineNumber; } Token; typedef struct { int mCount; int mCapacity; Token *mTokens; } TokenList; typedef enum { CJ_ET_NONE, CJ_ET_OBJECT, CJ_ET_ARRAY, CJ_ET_STRING, CJ_ET_NUMBER, CJ_ET_BOOLEAN, CJ_ET_NULL } EntityType; struct EntityObject; struct EntityArray; typedef struct { EntityType mType; CJString mString; double mValue; bool mBool; struct EntityObject *mObject; struct EntityArray *mArray; Token mToken; } Entity; typedef struct { CJString mKey; Entity mEntity; } EntityObjectEntry; typedef struct EntityObject { int mCount; int mCapacity; EntityObjectEntry *mEntries; } EntityObject; typedef struct EntityArray { int mCount; int mCapacity; Entity *mEntities; } EntityArray; #endif