#pragma once #include "Text.h" #include "Array.h" #include "ReferenceCounter.h" namespace Framework { namespace JSON { enum class JSONType { NULL_, BOOLEAN, NUMBER, STRING, ARRAY, OBJECT }; class JSONArray; class JSONObject; class JSONValue : public virtual ReferenceCounter { private: JSONType type; protected: __declspec(dllexport) JSONValue( JSONType type ); public: __declspec(dllexport) JSONValue(); __declspec(dllexport) virtual ~JSONValue(); __declspec(dllexport) JSONType getType() const; __declspec(dllexport) virtual Text toString() const; }; class JSONBool : public JSONValue { private: bool b; public: __declspec(dllexport) JSONBool( bool b ); __declspec(dllexport) bool getBool() const; __declspec(dllexport) Text toString() const override; }; class JSONNumber : public JSONValue { private: double number; public: __declspec(dllexport) JSONNumber( double num ); __declspec(dllexport) double getNumber() const; __declspec(dllexport) Text toString() const override; }; class JSONString : public JSONValue { private: Text string; public: __declspec(dllexport) JSONString( Text string ); __declspec(dllexport) Text getString() const; __declspec(dllexport) Text toString() const override; }; class JSONArray : public JSONValue { private: RCArray< JSONValue >* array; public: __declspec(dllexport) JSONArray(); __declspec(dllexport) JSONArray( Text string ); __declspec(dllexport) JSONArray( const JSONArray& arr ); __declspec(dllexport) ~JSONArray(); __declspec(dllexport) JSONArray& operator=( const JSONArray& arr ); __declspec(dllexport) void addValue( JSONValue* value ); __declspec(dllexport) JSONValue* getValue( int i ) const; __declspec(dllexport) int getLength() const; __declspec(dllexport) bool isValueOfType( int i, JSONType type ) const; __declspec(dllexport) Text toString() const override; }; class JSONObject : public JSONValue { private: Array< Text >* fields; RCArray< JSONValue >* values; public: __declspec(dllexport) JSONObject(); __declspec(dllexport) JSONObject( Text string ); __declspec(dllexport) JSONObject( const JSONObject& obj ); __declspec(dllexport) ~JSONObject(); __declspec(dllexport) JSONObject& operator=( const JSONObject& obj ); __declspec(dllexport) bool addValue( Text field, JSONValue* value ); __declspec(dllexport) bool removeValue( Text field ); __declspec(dllexport) bool hasValue( Text field ); __declspec(dllexport) JSONValue* getValue( Text field ); __declspec(dllexport) Iterator< Text > getFields(); __declspec(dllexport) Iterator< JSONValue* > getValues(); __declspec(dllexport) int getFieldCount() const; __declspec(dllexport) bool isValueOfType( Text field, JSONType type ) const; __declspec(dllexport) Text toString() const override; }; __declspec(dllexport) JSONValue* loadJSONFromFile( Text path ); namespace Parser { __declspec(dllexport) int findObjectEndInArray( const char* str ); __declspec(dllexport) Text removeWhitespace( const char* str ); __declspec(dllexport) JSONValue* getValue( const char* str ); __declspec(dllexport) int findFieldEndInObject( const char* str ); __declspec(dllexport) int findValueEndInObject( const char* str ); }; } }