Bladeren bron

JSONParser changes, TODO: a lot of things must be fixed

mikymod 12 jaren geleden
bovenliggende
commit
19689c0986
4 gewijzigde bestanden met toevoegingen van 69 en 61 verwijderingen
  1. 18 35
      samples/json/json.cpp
  2. 2 11
      src/Device.cpp
  3. 22 3
      src/JSONParser.cpp
  4. 27 12
      src/JSONParser.h

+ 18 - 35
samples/json/json.cpp

@@ -6,48 +6,31 @@
 
 using namespace crown;
 
+// REMOVE JSON SAMPLE, ADD UNIT TEST
 int main(int argc, char** argv)
 {
-	if (argc != 2)
-	{
-		printf("Configuration root path must be provided. Aborting!");
-		return -1;
-	}
-
-	Filesystem conf_root(argv[1]);
-
-	if (!conf_root.exists("json.json"))
-	{
-		printf("Configuration file does not exists. Aborting!\n");
-		return -1;
-	}
+	// if (argc != 2)
+	// {
+	// 	printf("Configuration root path must be provided. Aborting!");
+	// 	return -1;
+	// }
+
+	// Filesystem conf_root(argv[1]);
+
+	// if (!conf_root.exists("json.json"))
+	// {
+	// 	printf("Configuration file does not exists. Aborting!\n");
+	// 	return -1;
+	// }
 	
-	char dst[10][256];
+	// char dst[10][256];
 
-	DiskFile* stream = (DiskFile*)conf_root.open("json.json", FOM_READ);
+	// DiskFile* stream = (DiskFile*)conf_root.open("json.json", FOM_READ);
 
- 	JSONParser* parser = new JSONParser(stream);
+ // 	JSONParser* parser = new JSONParser(stream);
 
-	JSONError error;
-	JSONToken* tokens;
 
-	error = parser->parse();
-	tokens = parser->get_tokens();
-
-	for (int i = 0; i < parser->get_tokens_number(); i++)
-	{
-		printf("token[%d]\n", i);
-		printf("type: %d\n", tokens[i].m_type);
-		printf("size: %d\n", tokens[i].m_size);
-		printf("start: %d\n",tokens[i].m_start);
-		printf("end: %d\n",tokens[i].m_end);
-		printf("parent token: %d\n",tokens[i].m_parent);
-		printf("\n");
-	}
-
-	printf("return: %d\n", error);
-
-	conf_root.close(stream);
+	// conf_root.close(stream);
 
 	return 0;
 }

+ 2 - 11
src/Device.cpp

@@ -528,19 +528,10 @@ void Device::read_engine_settings()
 {
 	DiskFile* file = m_filesystem->open("crown.cfg", FOM_READ);
 	JSONParser json(file);
-	json.parse();
-	JSONToken* tokens = json.get_tokens();
-
-	for (int i = 0; i < json.get_tokens_number(); i++)
-	{
-		tokens[i].print();
-	}
-
 	
-	const char* value = json.get_array("crown").get_object("utils").get_string("file").to_string();
-
-	os::printf("Value:\t%s\n", value);
+	// const char* value = json.get_array("crown").get_object("utils").get_string("file").to_string();
 
+	// os::printf("Value:\t%s\n", value);
 }
 
 

+ 22 - 3
src/JSONParser.cpp

@@ -27,6 +27,13 @@ JSONParser::JSONParser(File* file, size_t size) :
 
 	m_pos = m_file->position();
 
+	parse();
+
+	// Test
+	for (int i = 0; i < m_next_token; i++)
+	{
+		m_tokens[i].print();
+	}
 }
 
 //--------------------------------------------------------------------------
@@ -114,6 +121,7 @@ JSONError JSONParser::parse()
 				break;
 			}
 			case '\"':
+			case '\'':
 			{
 				error = parse_string();
             	if (m_prev_token != -1)
@@ -235,6 +243,7 @@ JSONError JSONParser::parse_string()
 JSONError JSONParser::parse_primitive()
 {
 	JSONToken* token;
+	JSONType type = JSON_INT;
 
 	int start = m_file->position();
 
@@ -247,7 +256,17 @@ JSONError JSONParser::parse_primitive()
 
 		switch (c)
 		{
-
+			case '.':
+			{
+				type = JSON_FLOAT;
+				break;
+			}
+			case 'r':
+			case 'a':
+			{
+				type = JSON_BOOL;
+				break;
+			}
 			case ' ':
 			case ',': 
 			case '}':
@@ -261,11 +280,11 @@ JSONError JSONParser::parse_primitive()
 					return JSON_NO_MEMORY;
 				}
 
-				fill_token(token, JSON_PRIMITIVE, start, m_pos);
+				fill_token(token, type, start, m_pos);
 
 				token->m_parent = m_prev_token;
 
-				m_file->seek(start);
+				// m_file->seek(start);
 
 				return JSON_SUCCESS;
 			}

+ 27 - 12
src/JSONParser.h

@@ -16,7 +16,11 @@ enum JSONType
 	JSON_PRIMITIVE 	= 0,	// Number, boolean or null
 	JSON_OBJECT 	= 1,	// Object
 	JSON_ARRAY 		= 2,	// Array
-	JSON_STRING 	= 3		// String
+	JSON_STRING 	= 3,
+	JSON_FLOAT		= 4,
+	JSON_INT		= 5,
+	JSON_BOOL 		= 6,
+
 };
 
 /// JSON error typology
@@ -83,12 +87,6 @@ public:
 					JSONParser(File* file, size_t size = 1024);
 	/// Destructor
 					~JSONParser();
-	/// Parse JSON data and fill tokens
-	JSONError 		parse();
-	/// Get all tokens
-	JSONToken*		get_tokens();
-	/// Get next token
-	int32_t			get_tokens_number();
 
 	JSONParser&		get_object(const char* key);
 
@@ -96,20 +94,37 @@ public:
 
 	JSONParser& 	get_string(const char* key);
 
-	JSONParser&		get_float(const char* key);
+	JSONParser&		get_float(const char* key);				// MUST BE IMPLEMENTED
+
+	JSONParser&		get_int(const char* key);				// MUST BE IMPLEMENTED
 
-	JSONParser&		get_int(const char* key);
+	JSONParser&		get_bool(const char* key);				// MUST BE IMPLEMENTED
 
-	JSONParser&		get_bool(const char* key);
+	void			to_string(List<const char*>& values);	// MUST BE IMPLEMENTED
 
-	const char*		to_string();
+	void			to_float(float* values);				// MUST BE IMPLEMENTED
 
+	void			to_int(int* values);					// MUST BE IMPLEMENTED
+
+	void			to_bool(bool* values);					// MUST BE IMPLEMENTED
 
 private:
+	/// Parse JSON data and fill tokens
+	JSONError 		parse();
+	/// Get all tokens
+	JSONToken*		get_tokens();			// MUST BE REMOVED
+	/// Get next token
+	int32_t			get_tokens_number();	// MUST BE REMOVED
 	/// Parse string in JSON data
 	JSONError		parse_string();
 	/// Parse number or boolean in JSON data
-	JSONError		parse_primitive();
+	JSONError		parse_primitive();	// MUST BE REMOVED
+	/// Parse boolean in JSON data
+	JSONError		parse_bool();	// MUST BE IMPLEMENTED
+	/// Parse integer in JSON data
+	JSONError		parse_int();	// MUST BE IMPLEMENTED
+	/// Parse float in JSON data
+	JSONError		parse_float();	// MUST BE IMPLEMENTED
 	/// Allocate token node
 	JSONToken* 		allocate_token();
 	/// Fill token and set boundaries