diff options
author | Mike Buland <mbuland@penny-arcade.com> | 2017-06-06 12:30:52 -0700 |
---|---|---|
committer | Mike Buland <mbuland@penny-arcade.com> | 2017-06-06 12:30:52 -0700 |
commit | b7751f0136502592e9b1897b51859b1133339a93 (patch) | |
tree | 835b4a78c6b2322039d7b4b70652976bd539a06b /src/unstable/json.h | |
parent | 8e0f468e79263dc7f9a6364ca1a26036906642bc (diff) | |
download | libbu++-b7751f0136502592e9b1897b51859b1133339a93.tar.gz libbu++-b7751f0136502592e9b1897b51859b1133339a93.tar.bz2 libbu++-b7751f0136502592e9b1897b51859b1133339a93.tar.xz libbu++-b7751f0136502592e9b1897b51859b1133339a93.zip |
Hey! This is a much better structure for the Json class.
This new setup is one class for everything, the values are kept in a union, and
the instance knows what type it is. The tree of objects is a tree of
instantiations of the same class. It's much simpler, it's much easier to write,
and maybe even easier to use.
Diffstat (limited to '')
-rw-r--r-- | src/unstable/json.h | 113 |
1 files changed, 43 insertions, 70 deletions
diff --git a/src/unstable/json.h b/src/unstable/json.h index 660d1c6..47009cb 100644 --- a/src/unstable/json.h +++ b/src/unstable/json.h | |||
@@ -1,89 +1,62 @@ | |||
1 | #ifndef BU_JSON_H | 1 | #ifndef BU_JSON_H |
2 | #define BU_JSON_H | 2 | #define BU_JSON_H |
3 | 3 | ||
4 | #include "bu/hash.h" | ||
5 | #include "bu/list.h" | ||
6 | #include "bu/string.h" | ||
7 | |||
4 | namespace Bu | 8 | namespace Bu |
5 | { | 9 | { |
10 | class Stream; | ||
11 | |||
6 | class Json | 12 | class Json |
7 | { | 13 | { |
8 | public: | 14 | public: |
9 | Json(); | ||
10 | virtual ~Json(); | ||
11 | |||
12 | public: | ||
13 | enum Type | 15 | enum Type |
14 | { | 16 | { |
15 | tObject, | 17 | Invalid, |
16 | tArray, | 18 | Object, |
17 | tString, | 19 | Array, |
18 | tNumber, | 20 | String, |
19 | tBoolean, | 21 | Number, |
20 | tNull | 22 | Boolean, |
21 | }; | 23 | Null |
22 | |||
23 | class Base | ||
24 | { | ||
25 | public: | ||
26 | Base(); | ||
27 | virtual ~Base(); | ||
28 | |||
29 | virtual Type getType()=0; | ||
30 | }; | ||
31 | |||
32 | class Object : public Base | ||
33 | { | ||
34 | public: | ||
35 | Object(); | ||
36 | virtual ~Object(); | ||
37 | |||
38 | virtual Type getType(); | ||
39 | }; | ||
40 | |||
41 | class Array : public Base | ||
42 | { | ||
43 | public: | ||
44 | Array(); | ||
45 | virtual ~Array(); | ||
46 | |||
47 | virtual Type getType(); | ||
48 | }; | 24 | }; |
49 | 25 | ||
50 | class String : public Base | 26 | public: |
51 | { | 27 | Json(); |
52 | public: | 28 | Json( const Bu::String &sJson ); |
53 | String(); | 29 | Json( Bu::Stream &sInput ); |
54 | virtual ~String(); | 30 | virtual ~Json(); |
55 | |||
56 | virtual Type getType(); | ||
57 | }; | ||
58 | |||
59 | class Number : public Base | ||
60 | { | ||
61 | public: | ||
62 | Number(); | ||
63 | virtual ~Number(); | ||
64 | |||
65 | virtual Type getType(); | ||
66 | }; | ||
67 | |||
68 | class Boolean : public Base | ||
69 | { | ||
70 | public: | ||
71 | Boolean(); | ||
72 | virtual ~Boolean(); | ||
73 | |||
74 | virtual Type getType(); | ||
75 | }; | ||
76 | 31 | ||
77 | class Null : public Base | 32 | void parse( Bu::Stream &sInput ); |
78 | { | 33 | void reset(); |
79 | public: | ||
80 | Null(); | ||
81 | virtual ~Null(); | ||
82 | 34 | ||
83 | virtual Type getType(); | 35 | private: |
84 | }; | 36 | void parseString( char &c, Bu::Stream &sInput, Bu::String &sOut ); |
37 | void parseString( char &c, Bu::Stream &sInput ); | ||
38 | void parseObject( char &c, Bu::Stream &sInput ); | ||
39 | void parseArray( char &c, Bu::Stream &sInput ); | ||
40 | void parseNumber( char &c, Bu::Stream &sInput ); | ||
41 | void parseLiteral( char &c, Bu::Stream &sInput ); | ||
42 | bool readChar( char &c, Bu::Stream &sInput ); | ||
43 | void readChar( char &c, Bu::Stream &sInput, const char *sSection ); | ||
44 | bool isWs( char c ); | ||
85 | 45 | ||
86 | private: | 46 | private: |
47 | typedef Bu::Hash<Bu::String, Json *> JsonHash; | ||
48 | typedef Bu::List<Json *> JsonList; | ||
49 | |||
50 | Type eType; | ||
51 | union DatUnion | ||
52 | { | ||
53 | DatUnion() : pObject( NULL ) { } | ||
54 | JsonHash *pObject; | ||
55 | JsonList *pArray; | ||
56 | Bu::String *pString; | ||
57 | double dNumber; | ||
58 | bool bBoolean; | ||
59 | } uDat; | ||
87 | }; | 60 | }; |
88 | }; | 61 | }; |
89 | 62 | ||