rapidjson 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/CODE_OF_CONDUCT.md +84 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +110 -0
  5. data/Rakefile +20 -0
  6. data/ext/rapidjson/buffer.hh +66 -0
  7. data/ext/rapidjson/cext.cc +77 -0
  8. data/ext/rapidjson/cext.hh +20 -0
  9. data/ext/rapidjson/encoder.hh +150 -0
  10. data/ext/rapidjson/extconf.rb +19 -0
  11. data/ext/rapidjson/parser.hh +149 -0
  12. data/ext/rapidjson/rapidjson/include/rapidjson/allocators.h +692 -0
  13. data/ext/rapidjson/rapidjson/include/rapidjson/cursorstreamwrapper.h +78 -0
  14. data/ext/rapidjson/rapidjson/include/rapidjson/document.h +3027 -0
  15. data/ext/rapidjson/rapidjson/include/rapidjson/encodedstream.h +299 -0
  16. data/ext/rapidjson/rapidjson/include/rapidjson/encodings.h +716 -0
  17. data/ext/rapidjson/rapidjson/include/rapidjson/error/en.h +122 -0
  18. data/ext/rapidjson/rapidjson/include/rapidjson/error/error.h +216 -0
  19. data/ext/rapidjson/rapidjson/include/rapidjson/filereadstream.h +99 -0
  20. data/ext/rapidjson/rapidjson/include/rapidjson/filewritestream.h +104 -0
  21. data/ext/rapidjson/rapidjson/include/rapidjson/fwd.h +151 -0
  22. data/ext/rapidjson/rapidjson/include/rapidjson/internal/biginteger.h +297 -0
  23. data/ext/rapidjson/rapidjson/include/rapidjson/internal/clzll.h +71 -0
  24. data/ext/rapidjson/rapidjson/include/rapidjson/internal/diyfp.h +261 -0
  25. data/ext/rapidjson/rapidjson/include/rapidjson/internal/dtoa.h +249 -0
  26. data/ext/rapidjson/rapidjson/include/rapidjson/internal/ieee754.h +78 -0
  27. data/ext/rapidjson/rapidjson/include/rapidjson/internal/itoa.h +308 -0
  28. data/ext/rapidjson/rapidjson/include/rapidjson/internal/meta.h +186 -0
  29. data/ext/rapidjson/rapidjson/include/rapidjson/internal/pow10.h +55 -0
  30. data/ext/rapidjson/rapidjson/include/rapidjson/internal/regex.h +739 -0
  31. data/ext/rapidjson/rapidjson/include/rapidjson/internal/stack.h +232 -0
  32. data/ext/rapidjson/rapidjson/include/rapidjson/internal/strfunc.h +83 -0
  33. data/ext/rapidjson/rapidjson/include/rapidjson/internal/strtod.h +293 -0
  34. data/ext/rapidjson/rapidjson/include/rapidjson/internal/swap.h +46 -0
  35. data/ext/rapidjson/rapidjson/include/rapidjson/istreamwrapper.h +128 -0
  36. data/ext/rapidjson/rapidjson/include/rapidjson/memorybuffer.h +70 -0
  37. data/ext/rapidjson/rapidjson/include/rapidjson/memorystream.h +71 -0
  38. data/ext/rapidjson/rapidjson/include/rapidjson/msinttypes/inttypes.h +316 -0
  39. data/ext/rapidjson/rapidjson/include/rapidjson/msinttypes/stdint.h +300 -0
  40. data/ext/rapidjson/rapidjson/include/rapidjson/ostreamwrapper.h +81 -0
  41. data/ext/rapidjson/rapidjson/include/rapidjson/pointer.h +1482 -0
  42. data/ext/rapidjson/rapidjson/include/rapidjson/prettywriter.h +277 -0
  43. data/ext/rapidjson/rapidjson/include/rapidjson/rapidjson.h +741 -0
  44. data/ext/rapidjson/rapidjson/include/rapidjson/reader.h +2246 -0
  45. data/ext/rapidjson/rapidjson/include/rapidjson/schema.h +2795 -0
  46. data/ext/rapidjson/rapidjson/include/rapidjson/stream.h +223 -0
  47. data/ext/rapidjson/rapidjson/include/rapidjson/stringbuffer.h +121 -0
  48. data/ext/rapidjson/rapidjson/include/rapidjson/uri.h +481 -0
  49. data/ext/rapidjson/rapidjson/include/rapidjson/writer.h +710 -0
  50. data/lib/rapidjson/json_gem.rb +36 -0
  51. data/lib/rapidjson/version.rb +5 -0
  52. data/lib/rapidjson.rb +9 -0
  53. metadata +98 -0
@@ -0,0 +1,223 @@
1
+ // Tencent is pleased to support the open source community by making RapidJSON available.
2
+ //
3
+ // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
4
+ //
5
+ // Licensed under the MIT License (the "License"); you may not use this file except
6
+ // in compliance with the License. You may obtain a copy of the License at
7
+ //
8
+ // http://opensource.org/licenses/MIT
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software distributed
11
+ // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
12
+ // CONDITIONS OF ANY KIND, either express or implied. See the License for the
13
+ // specific language governing permissions and limitations under the License.
14
+
15
+ #include "rapidjson.h"
16
+
17
+ #ifndef RAPIDJSON_STREAM_H_
18
+ #define RAPIDJSON_STREAM_H_
19
+
20
+ #include "encodings.h"
21
+
22
+ RAPIDJSON_NAMESPACE_BEGIN
23
+
24
+ ///////////////////////////////////////////////////////////////////////////////
25
+ // Stream
26
+
27
+ /*! \class rapidjson::Stream
28
+ \brief Concept for reading and writing characters.
29
+
30
+ For read-only stream, no need to implement PutBegin(), Put(), Flush() and PutEnd().
31
+
32
+ For write-only stream, only need to implement Put() and Flush().
33
+
34
+ \code
35
+ concept Stream {
36
+ typename Ch; //!< Character type of the stream.
37
+
38
+ //! Read the current character from stream without moving the read cursor.
39
+ Ch Peek() const;
40
+
41
+ //! Read the current character from stream and moving the read cursor to next character.
42
+ Ch Take();
43
+
44
+ //! Get the current read cursor.
45
+ //! \return Number of characters read from start.
46
+ size_t Tell();
47
+
48
+ //! Begin writing operation at the current read pointer.
49
+ //! \return The begin writer pointer.
50
+ Ch* PutBegin();
51
+
52
+ //! Write a character.
53
+ void Put(Ch c);
54
+
55
+ //! Flush the buffer.
56
+ void Flush();
57
+
58
+ //! End the writing operation.
59
+ //! \param begin The begin write pointer returned by PutBegin().
60
+ //! \return Number of characters written.
61
+ size_t PutEnd(Ch* begin);
62
+ }
63
+ \endcode
64
+ */
65
+
66
+ //! Provides additional information for stream.
67
+ /*!
68
+ By using traits pattern, this type provides a default configuration for stream.
69
+ For custom stream, this type can be specialized for other configuration.
70
+ See TEST(Reader, CustomStringStream) in readertest.cpp for example.
71
+ */
72
+ template<typename Stream>
73
+ struct StreamTraits {
74
+ //! Whether to make local copy of stream for optimization during parsing.
75
+ /*!
76
+ By default, for safety, streams do not use local copy optimization.
77
+ Stream that can be copied fast should specialize this, like StreamTraits<StringStream>.
78
+ */
79
+ enum { copyOptimization = 0 };
80
+ };
81
+
82
+ //! Reserve n characters for writing to a stream.
83
+ template<typename Stream>
84
+ inline void PutReserve(Stream& stream, size_t count) {
85
+ (void)stream;
86
+ (void)count;
87
+ }
88
+
89
+ //! Write character to a stream, presuming buffer is reserved.
90
+ template<typename Stream>
91
+ inline void PutUnsafe(Stream& stream, typename Stream::Ch c) {
92
+ stream.Put(c);
93
+ }
94
+
95
+ //! Put N copies of a character to a stream.
96
+ template<typename Stream, typename Ch>
97
+ inline void PutN(Stream& stream, Ch c, size_t n) {
98
+ PutReserve(stream, n);
99
+ for (size_t i = 0; i < n; i++)
100
+ PutUnsafe(stream, c);
101
+ }
102
+
103
+ ///////////////////////////////////////////////////////////////////////////////
104
+ // GenericStreamWrapper
105
+
106
+ //! A Stream Wrapper
107
+ /*! \tThis string stream is a wrapper for any stream by just forwarding any
108
+ \treceived message to the origin stream.
109
+ \note implements Stream concept
110
+ */
111
+
112
+ #if defined(_MSC_VER) && _MSC_VER <= 1800
113
+ RAPIDJSON_DIAG_PUSH
114
+ RAPIDJSON_DIAG_OFF(4702) // unreachable code
115
+ RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated
116
+ #endif
117
+
118
+ template <typename InputStream, typename Encoding = UTF8<> >
119
+ class GenericStreamWrapper {
120
+ public:
121
+ typedef typename Encoding::Ch Ch;
122
+ GenericStreamWrapper(InputStream& is): is_(is) {}
123
+
124
+ Ch Peek() const { return is_.Peek(); }
125
+ Ch Take() { return is_.Take(); }
126
+ size_t Tell() { return is_.Tell(); }
127
+ Ch* PutBegin() { return is_.PutBegin(); }
128
+ void Put(Ch ch) { is_.Put(ch); }
129
+ void Flush() { is_.Flush(); }
130
+ size_t PutEnd(Ch* ch) { return is_.PutEnd(ch); }
131
+
132
+ // wrapper for MemoryStream
133
+ const Ch* Peek4() const { return is_.Peek4(); }
134
+
135
+ // wrapper for AutoUTFInputStream
136
+ UTFType GetType() const { return is_.GetType(); }
137
+ bool HasBOM() const { return is_.HasBOM(); }
138
+
139
+ protected:
140
+ InputStream& is_;
141
+ };
142
+
143
+ #if defined(_MSC_VER) && _MSC_VER <= 1800
144
+ RAPIDJSON_DIAG_POP
145
+ #endif
146
+
147
+ ///////////////////////////////////////////////////////////////////////////////
148
+ // StringStream
149
+
150
+ //! Read-only string stream.
151
+ /*! \note implements Stream concept
152
+ */
153
+ template <typename Encoding>
154
+ struct GenericStringStream {
155
+ typedef typename Encoding::Ch Ch;
156
+
157
+ GenericStringStream(const Ch *src) : src_(src), head_(src) {}
158
+
159
+ Ch Peek() const { return *src_; }
160
+ Ch Take() { return *src_++; }
161
+ size_t Tell() const { return static_cast<size_t>(src_ - head_); }
162
+
163
+ Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
164
+ void Put(Ch) { RAPIDJSON_ASSERT(false); }
165
+ void Flush() { RAPIDJSON_ASSERT(false); }
166
+ size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
167
+
168
+ const Ch* src_; //!< Current read position.
169
+ const Ch* head_; //!< Original head of the string.
170
+ };
171
+
172
+ template <typename Encoding>
173
+ struct StreamTraits<GenericStringStream<Encoding> > {
174
+ enum { copyOptimization = 1 };
175
+ };
176
+
177
+ //! String stream with UTF8 encoding.
178
+ typedef GenericStringStream<UTF8<> > StringStream;
179
+
180
+ ///////////////////////////////////////////////////////////////////////////////
181
+ // InsituStringStream
182
+
183
+ //! A read-write string stream.
184
+ /*! This string stream is particularly designed for in-situ parsing.
185
+ \note implements Stream concept
186
+ */
187
+ template <typename Encoding>
188
+ struct GenericInsituStringStream {
189
+ typedef typename Encoding::Ch Ch;
190
+
191
+ GenericInsituStringStream(Ch *src) : src_(src), dst_(0), head_(src) {}
192
+
193
+ // Read
194
+ Ch Peek() { return *src_; }
195
+ Ch Take() { return *src_++; }
196
+ size_t Tell() { return static_cast<size_t>(src_ - head_); }
197
+
198
+ // Write
199
+ void Put(Ch c) { RAPIDJSON_ASSERT(dst_ != 0); *dst_++ = c; }
200
+
201
+ Ch* PutBegin() { return dst_ = src_; }
202
+ size_t PutEnd(Ch* begin) { return static_cast<size_t>(dst_ - begin); }
203
+ void Flush() {}
204
+
205
+ Ch* Push(size_t count) { Ch* begin = dst_; dst_ += count; return begin; }
206
+ void Pop(size_t count) { dst_ -= count; }
207
+
208
+ Ch* src_;
209
+ Ch* dst_;
210
+ Ch* head_;
211
+ };
212
+
213
+ template <typename Encoding>
214
+ struct StreamTraits<GenericInsituStringStream<Encoding> > {
215
+ enum { copyOptimization = 1 };
216
+ };
217
+
218
+ //! Insitu string stream with UTF8 encoding.
219
+ typedef GenericInsituStringStream<UTF8<> > InsituStringStream;
220
+
221
+ RAPIDJSON_NAMESPACE_END
222
+
223
+ #endif // RAPIDJSON_STREAM_H_
@@ -0,0 +1,121 @@
1
+ // Tencent is pleased to support the open source community by making RapidJSON available.
2
+ //
3
+ // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
4
+ //
5
+ // Licensed under the MIT License (the "License"); you may not use this file except
6
+ // in compliance with the License. You may obtain a copy of the License at
7
+ //
8
+ // http://opensource.org/licenses/MIT
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software distributed
11
+ // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
12
+ // CONDITIONS OF ANY KIND, either express or implied. See the License for the
13
+ // specific language governing permissions and limitations under the License.
14
+
15
+ #ifndef RAPIDJSON_STRINGBUFFER_H_
16
+ #define RAPIDJSON_STRINGBUFFER_H_
17
+
18
+ #include "stream.h"
19
+ #include "internal/stack.h"
20
+
21
+ #if RAPIDJSON_HAS_CXX11_RVALUE_REFS
22
+ #include <utility> // std::move
23
+ #endif
24
+
25
+ #include "internal/stack.h"
26
+
27
+ #if defined(__clang__)
28
+ RAPIDJSON_DIAG_PUSH
29
+ RAPIDJSON_DIAG_OFF(c++98-compat)
30
+ #endif
31
+
32
+ RAPIDJSON_NAMESPACE_BEGIN
33
+
34
+ //! Represents an in-memory output stream.
35
+ /*!
36
+ \tparam Encoding Encoding of the stream.
37
+ \tparam Allocator type for allocating memory buffer.
38
+ \note implements Stream concept
39
+ */
40
+ template <typename Encoding, typename Allocator = CrtAllocator>
41
+ class GenericStringBuffer {
42
+ public:
43
+ typedef typename Encoding::Ch Ch;
44
+
45
+ GenericStringBuffer(Allocator* allocator = 0, size_t capacity = kDefaultCapacity) : stack_(allocator, capacity) {}
46
+
47
+ #if RAPIDJSON_HAS_CXX11_RVALUE_REFS
48
+ GenericStringBuffer(GenericStringBuffer&& rhs) : stack_(std::move(rhs.stack_)) {}
49
+ GenericStringBuffer& operator=(GenericStringBuffer&& rhs) {
50
+ if (&rhs != this)
51
+ stack_ = std::move(rhs.stack_);
52
+ return *this;
53
+ }
54
+ #endif
55
+
56
+ void Put(Ch c) { *stack_.template Push<Ch>() = c; }
57
+ void PutUnsafe(Ch c) { *stack_.template PushUnsafe<Ch>() = c; }
58
+ void Flush() {}
59
+
60
+ void Clear() { stack_.Clear(); }
61
+ void ShrinkToFit() {
62
+ // Push and pop a null terminator. This is safe.
63
+ *stack_.template Push<Ch>() = '\0';
64
+ stack_.ShrinkToFit();
65
+ stack_.template Pop<Ch>(1);
66
+ }
67
+
68
+ void Reserve(size_t count) { stack_.template Reserve<Ch>(count); }
69
+ Ch* Push(size_t count) { return stack_.template Push<Ch>(count); }
70
+ Ch* PushUnsafe(size_t count) { return stack_.template PushUnsafe<Ch>(count); }
71
+ void Pop(size_t count) { stack_.template Pop<Ch>(count); }
72
+
73
+ const Ch* GetString() const {
74
+ // Push and pop a null terminator. This is safe.
75
+ *stack_.template Push<Ch>() = '\0';
76
+ stack_.template Pop<Ch>(1);
77
+
78
+ return stack_.template Bottom<Ch>();
79
+ }
80
+
81
+ //! Get the size of string in bytes in the string buffer.
82
+ size_t GetSize() const { return stack_.GetSize(); }
83
+
84
+ //! Get the length of string in Ch in the string buffer.
85
+ size_t GetLength() const { return stack_.GetSize() / sizeof(Ch); }
86
+
87
+ static const size_t kDefaultCapacity = 256;
88
+ mutable internal::Stack<Allocator> stack_;
89
+
90
+ private:
91
+ // Prohibit copy constructor & assignment operator.
92
+ GenericStringBuffer(const GenericStringBuffer&);
93
+ GenericStringBuffer& operator=(const GenericStringBuffer&);
94
+ };
95
+
96
+ //! String buffer with UTF8 encoding
97
+ typedef GenericStringBuffer<UTF8<> > StringBuffer;
98
+
99
+ template<typename Encoding, typename Allocator>
100
+ inline void PutReserve(GenericStringBuffer<Encoding, Allocator>& stream, size_t count) {
101
+ stream.Reserve(count);
102
+ }
103
+
104
+ template<typename Encoding, typename Allocator>
105
+ inline void PutUnsafe(GenericStringBuffer<Encoding, Allocator>& stream, typename Encoding::Ch c) {
106
+ stream.PutUnsafe(c);
107
+ }
108
+
109
+ //! Implement specialized version of PutN() with memset() for better performance.
110
+ template<>
111
+ inline void PutN(GenericStringBuffer<UTF8<> >& stream, char c, size_t n) {
112
+ std::memset(stream.stack_.Push<char>(n), c, n * sizeof(c));
113
+ }
114
+
115
+ RAPIDJSON_NAMESPACE_END
116
+
117
+ #if defined(__clang__)
118
+ RAPIDJSON_DIAG_POP
119
+ #endif
120
+
121
+ #endif // RAPIDJSON_STRINGBUFFER_H_