Commit 4f2d9d01598786b08a6f50d86e140d23951be2e0

Authored by Adeel Kazmi
1 parent 2d059e9a

Removed duplicated code by creating third-party folder

Change-Id: If45b62cd020858588491a4701fb834675caf8f2a
examples/fpp-game/game-scene.cpp
... ... @@ -25,7 +25,7 @@
25 25 #include "game-scene.h"
26 26 #include "game-texture.h"
27 27  
28   -#include "third-party/picojson.h"
  28 +#include "third-party/pico-json.h"
29 29  
30 30 #include <dali/dali.h>
31 31  
... ...
examples/fpp-game/third-party/picojson.h deleted
1   -/*
2   - * Copyright 2009-2010 Cybozu Labs, Inc.
3   - * Copyright 2011-2014 Kazuho Oku
4   - * All rights reserved.
5   - *
6   - * Redistribution and use in source and binary forms, with or without
7   - * modification, are permitted provided that the following conditions are met:
8   - *
9   - * 1. Redistributions of source code must retain the above copyright notice,
10   - * this list of conditions and the following disclaimer.
11   - *
12   - * 2. Redistributions in binary form must reproduce the above copyright notice,
13   - * this list of conditions and the following disclaimer in the documentation
14   - * and/or other materials provided with the distribution.
15   - *
16   - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17   - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18   - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19   - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20   - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21   - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22   - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23   - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24   - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25   - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26   - * POSSIBILITY OF SUCH DAMAGE.
27   - */
28   -#ifndef picojson_h
29   -#define picojson_h
30   -
31   -#include <algorithm>
32   -#include <cstddef>
33   -#include <cstdio>
34   -#include <cstdlib>
35   -#include <cstring>
36   -#include <iostream>
37   -#include <iterator>
38   -#include <limits>
39   -#include <map>
40   -#include <stdexcept>
41   -#include <string>
42   -#include <utility>
43   -#include <vector>
44   -
45   -// for isnan/isinf
46   -#if __cplusplus >= 201103L
47   -#include <cmath>
48   -#else
49   -extern "C"
50   -{
51   -#ifdef _MSC_VER
52   -#include <float.h>
53   -#elif defined(__INTEL_COMPILER)
54   -#include <mathimf.h>
55   -#else
56   -#include <math.h>
57   -#endif
58   -}
59   -#endif
60   -
61   -#ifndef PICOJSON_USE_RVALUE_REFERENCE
62   -#if(defined(__cpp_rvalue_references) && __cpp_rvalue_references >= 200610) || (defined(_MSC_VER) && _MSC_VER >= 1600)
63   -#define PICOJSON_USE_RVALUE_REFERENCE 1
64   -#else
65   -#define PICOJSON_USE_RVALUE_REFERENCE 0
66   -#endif
67   -#endif //PICOJSON_USE_RVALUE_REFERENCE
68   -
69   -// experimental support for int64_t (see README.mkdn for detail)
70   -#ifdef PICOJSON_USE_INT64
71   -#define __STDC_FORMAT_MACROS
72   -#include <errno.h>
73   -#include <inttypes.h>
74   -#endif
75   -
76   -// to disable the use of localeconv(3), set PICOJSON_USE_LOCALE to 0
77   -#ifndef PICOJSON_USE_LOCALE
78   -#define PICOJSON_USE_LOCALE 1
79   -#endif
80   -#if PICOJSON_USE_LOCALE
81   -extern "C"
82   -{
83   -#include <locale.h>
84   -}
85   -#endif
86   -
87   -#ifndef PICOJSON_ASSERT
88   -#define PICOJSON_ASSERT(e) \
89   - do \
90   - { \
91   - if(!(e)) throw std::runtime_error(#e); \
92   - } while(0)
93   -#endif
94   -
95   -#ifdef _MSC_VER
96   -#define SNPRINTF _snprintf_s
97   -#pragma warning(push)
98   -#pragma warning(disable : 4244) // conversion from int to char
99   -#pragma warning(disable : 4127) // conditional expression is constant
100   -#pragma warning(disable : 4702) // unreachable code
101   -#else
102   -#define SNPRINTF snprintf
103   -#endif
104   -
105   -namespace picojson
106   -{
107   -enum
108   -{
109   - null_type,
110   - boolean_type,
111   - number_type,
112   - string_type,
113   - array_type,
114   - object_type
115   -#ifdef PICOJSON_USE_INT64
116   - ,
117   - int64_type
118   -#endif
119   -};
120   -
121   -enum
122   -{
123   - INDENT_WIDTH = 2
124   -};
125   -
126   -struct null
127   -{
128   -};
129   -
130   -class value
131   -{
132   -public:
133   - typedef std::vector<value> array;
134   - typedef std::map<std::string, value> object;
135   - union _storage
136   - {
137   - bool boolean_;
138   - double number_;
139   -#ifdef PICOJSON_USE_INT64
140   - int64_t int64_;
141   -#endif
142   - std::string* string_;
143   - array* array_;
144   - object* object_;
145   - };
146   -
147   -protected:
148   - int type_;
149   - _storage u_;
150   -
151   -public:
152   - value();
153   - value(int type, bool);
154   - explicit value(bool b);
155   -#ifdef PICOJSON_USE_INT64
156   - explicit value(int64_t i);
157   -#endif
158   - explicit value(double n);
159   - explicit value(const std::string& s);
160   - explicit value(const array& a);
161   - explicit value(const object& o);
162   - explicit value(const char* s);
163   - value(const char* s, size_t len);
164   - ~value();
165   - value(const value& x);
166   - value& operator=(const value& x);
167   -#if PICOJSON_USE_RVALUE_REFERENCE
168   - value(value&& x) throw();
169   - value& operator=(value&& x) throw();
170   -#endif
171   - void swap(value& x) throw();
172   - template<typename T>
173   - bool is() const;
174   - template<typename T>
175   - const T& get() const;
176   - template<typename T>
177   - T& get();
178   - template<typename T>
179   - void set(const T&);
180   -#if PICOJSON_USE_RVALUE_REFERENCE
181   - template<typename T>
182   - void set(T&&);
183   -#endif
184   - bool evaluate_as_boolean() const;
185   - const value& get(size_t idx) const;
186   - const value& get(const std::string& key) const;
187   - value& get(size_t idx);
188   - value& get(const std::string& key);
189   -
190   - bool contains(size_t idx) const;
191   - bool contains(const std::string& key) const;
192   - std::string to_str() const;
193   - template<typename Iter>
194   - void serialize(Iter os, bool prettify = false) const;
195   - std::string serialize(bool prettify = false) const;
196   -
197   -private:
198   - template<typename T>
199   - value(const T*); // intentionally defined to block implicit conversion of pointer to bool
200   - template<typename Iter>
201   - static void _indent(Iter os, int indent);
202   - template<typename Iter>
203   - void _serialize(Iter os, int indent) const;
204   - std::string _serialize(int indent) const;
205   - void clear();
206   -};
207   -
208   -typedef value::array array;
209   -typedef value::object object;
210   -
211   -inline value::value()
212   -: type_(null_type)
213   -{
214   -}
215   -
216   -inline value::value(int type, bool)
217   -: type_(type)
218   -{
219   - switch(type)
220   - {
221   -#define INIT(p, v) \
222   - case p##type: \
223   - u_.p = v; \
224   - break
225   - INIT(boolean_, false);
226   - INIT(number_, 0.0);
227   -#ifdef PICOJSON_USE_INT64
228   - INIT(int64_, 0);
229   -#endif
230   - INIT(string_, new std::string());
231   - INIT(array_, new array());
232   - INIT(object_, new object());
233   -#undef INIT
234   - default:
235   - break;
236   - }
237   -}
238   -
239   -inline value::value(bool b)
240   -: type_(boolean_type)
241   -{
242   - u_.boolean_ = b;
243   -}
244   -
245   -#ifdef PICOJSON_USE_INT64
246   -inline value::value(int64_t i)
247   -: type_(int64_type)
248   -{
249   - u_.int64_ = i;
250   -}
251   -#endif
252   -
253   -inline value::value(double n)
254   -: type_(number_type)
255   -{
256   - if(
257   -#ifdef _MSC_VER
258   - !_finite(n)
259   -#elif __cplusplus >= 201103L || !(defined(isnan) && defined(isinf))
260   - std::isnan(n) || std::isinf(n)
261   -#else
262   - isnan(n) || isinf(n)
263   -#endif
264   - )
265   - {
266   - throw std::overflow_error("");
267   - }
268   - u_.number_ = n;
269   -}
270   -
271   -inline value::value(const std::string& s)
272   -: type_(string_type)
273   -{
274   - u_.string_ = new std::string(s);
275   -}
276   -
277   -inline value::value(const array& a)
278   -: type_(array_type)
279   -{
280   - u_.array_ = new array(a);
281   -}
282   -
283   -inline value::value(const object& o)
284   -: type_(object_type)
285   -{
286   - u_.object_ = new object(o);
287   -}
288   -
289   -inline value::value(const char* s)
290   -: type_(string_type)
291   -{
292   - u_.string_ = new std::string(s);
293   -}
294   -
295   -inline value::value(const char* s, size_t len)
296   -: type_(string_type)
297   -{
298   - u_.string_ = new std::string(s, len);
299   -}
300   -
301   -inline void value::clear()
302   -{
303   - switch(type_)
304   - {
305   -#define DEINIT(p) \
306   - case p##type: \
307   - delete u_.p; \
308   - break
309   - DEINIT(string_);
310   - DEINIT(array_);
311   - DEINIT(object_);
312   -#undef DEINIT
313   - default:
314   - break;
315   - }
316   -}
317   -
318   -inline value::~value()
319   -{
320   - clear();
321   -}
322   -
323   -inline value::value(const value& x)
324   -: type_(x.type_)
325   -{
326   - switch(type_)
327   - {
328   -#define INIT(p, v) \
329   - case p##type: \
330   - u_.p = v; \
331   - break
332   - INIT(string_, new std::string(*x.u_.string_));
333   - INIT(array_, new array(*x.u_.array_));
334   - INIT(object_, new object(*x.u_.object_));
335   -#undef INIT
336   - default:
337   - u_ = x.u_;
338   - break;
339   - }
340   -}
341   -
342   -inline value& value::operator=(const value& x)
343   -{
344   - if(this != &x)
345   - {
346   - value t(x);
347   - swap(t);
348   - }
349   - return *this;
350   -}
351   -
352   -#if PICOJSON_USE_RVALUE_REFERENCE
353   -inline value::value(value&& x) throw()
354   -: type_(null_type)
355   -{
356   - swap(x);
357   -}
358   -inline value& value::operator=(value&& x) throw()
359   -{
360   - swap(x);
361   - return *this;
362   -}
363   -#endif
364   -inline void value::swap(value& x) throw()
365   -{
366   - std::swap(type_, x.type_);
367   - std::swap(u_, x.u_);
368   -}
369   -
370   -#define IS(ctype, jtype) \
371   - template<> \
372   - inline bool value::is<ctype>() const \
373   - { \
374   - return type_ == jtype##_type; \
375   - }
376   -IS(null, null)
377   -IS(bool, boolean)
378   -#ifdef PICOJSON_USE_INT64
379   -IS(int64_t, int64)
380   -#endif
381   -IS(std::string, string)
382   -IS(array, array)
383   -IS(object, object)
384   -#undef IS
385   -template<>
386   -inline bool value::is<double>() const
387   -{
388   - return type_ == number_type
389   -#ifdef PICOJSON_USE_INT64
390   - || type_ == int64_type
391   -#endif
392   - ;
393   -}
394   -
395   -#define GET(ctype, var) \
396   - template<> \
397   - inline const ctype& value::get<ctype>() const \
398   - { \
399   - PICOJSON_ASSERT("type mismatch! call is<type>() before get<type>()" && is<ctype>()); \
400   - return var; \
401   - } \
402   - template<> \
403   - inline ctype& value::get<ctype>() \
404   - { \
405   - PICOJSON_ASSERT("type mismatch! call is<type>() before get<type>()" && is<ctype>()); \
406   - return var; \
407   - }
408   -GET(bool, u_.boolean_)
409   -GET(std::string, *u_.string_)
410   -GET(array, *u_.array_)
411   -GET(object, *u_.object_)
412   -#ifdef PICOJSON_USE_INT64
413   -GET(double, (type_ == int64_type && (const_cast<value*>(this)->type_ = number_type, const_cast<value*>(this)->u_.number_ = u_.int64_), u_.number_))
414   -GET(int64_t, u_.int64_)
415   -#else
416   -GET(double, u_.number_)
417   -#endif
418   -#undef GET
419   -
420   -#define SET(ctype, jtype, setter) \
421   - template<> \
422   - inline void value::set<ctype>(const ctype& _val) \
423   - { \
424   - clear(); \
425   - type_ = jtype##_type; \
426   - setter \
427   - }
428   -SET(bool, boolean, u_.boolean_ = _val;)
429   -SET(std::string, string, u_.string_ = new std::string(_val);)
430   -SET(array, array, u_.array_ = new array(_val);)
431   -SET(object, object, u_.object_ = new object(_val);)
432   -SET(double, number, u_.number_ = _val;)
433   -#ifdef PICOJSON_USE_INT64
434   -SET(int64_t, int64, u_.int64_ = _val;)
435   -#endif
436   -#undef SET
437   -
438   -#if PICOJSON_USE_RVALUE_REFERENCE
439   -#define MOVESET(ctype, jtype, setter) \
440   - template<> \
441   - inline void value::set<ctype>(ctype && _val) \
442   - { \
443   - clear(); \
444   - type_ = jtype##_type; \
445   - setter \
446   - }
447   -MOVESET(std::string, string, u_.string_ = new std::string(std::move(_val));)
448   -MOVESET(array, array, u_.array_ = new array(std::move(_val));)
449   -MOVESET(object, object, u_.object_ = new object(std::move(_val));)
450   -#undef MOVESET
451   -#endif
452   -
453   -inline bool value::evaluate_as_boolean() const
454   -{
455   - switch(type_)
456   - {
457   - case null_type:
458   - return false;
459   - case boolean_type:
460   - return u_.boolean_;
461   - case number_type:
462   - return u_.number_ != 0;
463   -#ifdef PICOJSON_USE_INT64
464   - case int64_type:
465   - return u_.int64_ != 0;
466   -#endif
467   - case string_type:
468   - return !u_.string_->empty();
469   - default:
470   - return true;
471   - }
472   -}
473   -
474   -inline const value& value::get(size_t idx) const
475   -{
476   - static value s_null;
477   - PICOJSON_ASSERT(is<array>());
478   - return idx < u_.array_->size() ? (*u_.array_)[idx] : s_null;
479   -}
480   -
481   -inline value& value::get(size_t idx)
482   -{
483   - static value s_null;
484   - PICOJSON_ASSERT(is<array>());
485   - return idx < u_.array_->size() ? (*u_.array_)[idx] : s_null;
486   -}
487   -
488   -inline const value& value::get(const std::string& key) const
489   -{
490   - static value s_null;
491   - PICOJSON_ASSERT(is<object>());
492   - object::const_iterator i = u_.object_->find(key);
493   - return i != u_.object_->end() ? i->second : s_null;
494   -}
495   -
496   -inline value& value::get(const std::string& key)
497   -{
498   - static value s_null;
499   - PICOJSON_ASSERT(is<object>());
500   - object::iterator i = u_.object_->find(key);
501   - return i != u_.object_->end() ? i->second : s_null;
502   -}
503   -
504   -inline bool value::contains(size_t idx) const
505   -{
506   - PICOJSON_ASSERT(is<array>());
507   - return idx < u_.array_->size();
508   -}
509   -
510   -inline bool value::contains(const std::string& key) const
511   -{
512   - PICOJSON_ASSERT(is<object>());
513   - object::const_iterator i = u_.object_->find(key);
514   - return i != u_.object_->end();
515   -}
516   -
517   -inline std::string value::to_str() const
518   -{
519   - switch(type_)
520   - {
521   - case null_type:
522   - return "null";
523   - case boolean_type:
524   - return u_.boolean_ ? "true" : "false";
525   -#ifdef PICOJSON_USE_INT64
526   - case int64_type:
527   - {
528   - char buf[sizeof("-9223372036854775808")];
529   - SNPRINTF(buf, sizeof(buf), "%" PRId64, u_.int64_);
530   - return buf;
531   - }
532   -#endif
533   - case number_type:
534   - {
535   - char buf[256];
536   - double tmp;
537   - SNPRINTF(buf, sizeof(buf), fabs(u_.number_) < (1ULL << 53) && modf(u_.number_, &tmp) == 0 ? "%.f" : "%.17g", u_.number_);
538   -#if PICOJSON_USE_LOCALE
539   - char* decimal_point = localeconv()->decimal_point;
540   - if(strcmp(decimal_point, ".") != 0)
541   - {
542   - size_t decimal_point_len = strlen(decimal_point);
543   - for(char* p = buf; *p != '\0'; ++p)
544   - {
545   - if(strncmp(p, decimal_point, decimal_point_len) == 0)
546   - {
547   - return std::string(buf, p) + "." + (p + decimal_point_len);
548   - }
549   - }
550   - }
551   -#endif
552   - return buf;
553   - }
554   - case string_type:
555   - return *u_.string_;
556   - case array_type:
557   - return "array";
558   - case object_type:
559   - return "object";
560   - default:
561   - PICOJSON_ASSERT(0);
562   -#ifdef _MSC_VER
563   - __assume(0);
564   -#endif
565   - }
566   - return std::string();
567   -}
568   -
569   -template<typename Iter>
570   -void copy(const std::string& s, Iter oi)
571   -{
572   - std::copy(s.begin(), s.end(), oi);
573   -}
574   -
575   -template<typename Iter>
576   -struct serialize_str_char
577   -{
578   - Iter oi;
579   - void operator()(char c)
580   - {
581   - switch(c)
582   - {
583   -#define MAP(val, sym) \
584   - case val: \
585   - copy(sym, oi); \
586   - break
587   - MAP('"', "\\\"");
588   - MAP('\\', "\\\\");
589   - MAP('/', "\\/");
590   - MAP('\b', "\\b");
591   - MAP('\f', "\\f");
592   - MAP('\n', "\\n");
593   - MAP('\r', "\\r");
594   - MAP('\t', "\\t");
595   -#undef MAP
596   - default:
597   - if(static_cast<unsigned char>(c) < 0x20 || c == 0x7f)
598   - {
599   - char buf[7];
600   - SNPRINTF(buf, sizeof(buf), "\\u%04x", c & 0xff);
601   - copy(buf, buf + 6, oi);
602   - }
603   - else
604   - {
605   - *oi++ = c;
606   - }
607   - break;
608   - }
609   - }
610   -};
611   -
612   -template<typename Iter>
613   -void serialize_str(const std::string& s, Iter oi)
614   -{
615   - *oi++ = '"';
616   - serialize_str_char<Iter> process_char = {oi};
617   - std::for_each(s.begin(), s.end(), process_char);
618   - *oi++ = '"';
619   -}
620   -
621   -template<typename Iter>
622   -void value::serialize(Iter oi, bool prettify) const
623   -{
624   - return _serialize(oi, prettify ? 0 : -1);
625   -}
626   -
627   -inline std::string value::serialize(bool prettify) const
628   -{
629   - return _serialize(prettify ? 0 : -1);
630   -}
631   -
632   -template<typename Iter>
633   -void value::_indent(Iter oi, int indent)
634   -{
635   - *oi++ = '\n';
636   - for(int i = 0; i < indent * INDENT_WIDTH; ++i)
637   - {
638   - *oi++ = ' ';
639   - }
640   -}
641   -
642   -template<typename Iter>
643   -void value::_serialize(Iter oi, int indent) const
644   -{
645   - switch(type_)
646   - {
647   - case string_type:
648   - serialize_str(*u_.string_, oi);
649   - break;
650   - case array_type:
651   - {
652   - *oi++ = '[';
653   - if(indent != -1)
654   - {
655   - ++indent;
656   - }
657   - for(array::const_iterator i = u_.array_->begin();
658   - i != u_.array_->end();
659   - ++i)
660   - {
661   - if(i != u_.array_->begin())
662   - {
663   - *oi++ = ',';
664   - }
665   - if(indent != -1)
666   - {
667   - _indent(oi, indent);
668   - }
669   - i->_serialize(oi, indent);
670   - }
671   - if(indent != -1)
672   - {
673   - --indent;
674   - if(!u_.array_->empty())
675   - {
676   - _indent(oi, indent);
677   - }
678   - }
679   - *oi++ = ']';
680   - break;
681   - }
682   - case object_type:
683   - {
684   - *oi++ = '{';
685   - if(indent != -1)
686   - {
687   - ++indent;
688   - }
689   - for(object::const_iterator i = u_.object_->begin();
690   - i != u_.object_->end();
691   - ++i)
692   - {
693   - if(i != u_.object_->begin())
694   - {
695   - *oi++ = ',';
696   - }
697   - if(indent != -1)
698   - {
699   - _indent(oi, indent);
700   - }
701   - serialize_str(i->first, oi);
702   - *oi++ = ':';
703   - if(indent != -1)
704   - {
705   - *oi++ = ' ';
706   - }
707   - i->second._serialize(oi, indent);
708   - }
709   - if(indent != -1)
710   - {
711   - --indent;
712   - if(!u_.object_->empty())
713   - {
714   - _indent(oi, indent);
715   - }
716   - }
717   - *oi++ = '}';
718   - break;
719   - }
720   - default:
721   - copy(to_str(), oi);
722   - break;
723   - }
724   - if(indent == 0)
725   - {
726   - *oi++ = '\n';
727   - }
728   -}
729   -
730   -inline std::string value::_serialize(int indent) const
731   -{
732   - std::string s;
733   - _serialize(std::back_inserter(s), indent);
734   - return s;
735   -}
736   -
737   -template<typename Iter>
738   -class input
739   -{
740   -protected:
741   - Iter cur_, end_;
742   - bool consumed_;
743   - int line_;
744   -
745   -public:
746   - input(const Iter& first, const Iter& last)
747   - : cur_(first),
748   - end_(last),
749   - consumed_(false),
750   - line_(1)
751   - {
752   - }
753   - int getc()
754   - {
755   - if(consumed_)
756   - {
757   - if(*cur_ == '\n')
758   - {
759   - ++line_;
760   - }
761   - ++cur_;
762   - }
763   - if(cur_ == end_)
764   - {
765   - consumed_ = false;
766   - return -1;
767   - }
768   - consumed_ = true;
769   - return *cur_ & 0xff;
770   - }
771   - void ungetc()
772   - {
773   - consumed_ = false;
774   - }
775   - Iter cur() const
776   - {
777   - if(consumed_)
778   - {
779   - input<Iter>* self = const_cast<input<Iter>*>(this);
780   - self->consumed_ = false;
781   - ++self->cur_;
782   - }
783   - return cur_;
784   - }
785   - int line() const
786   - {
787   - return line_;
788   - }
789   - void skip_ws()
790   - {
791   - while(1)
792   - {
793   - int ch = getc();
794   - if(!(ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r'))
795   - {
796   - ungetc();
797   - break;
798   - }
799   - }
800   - }
801   - bool expect(int expect)
802   - {
803   - skip_ws();
804   - if(getc() != expect)
805   - {
806   - ungetc();
807   - return false;
808   - }
809   - return true;
810   - }
811   - bool match(const std::string& pattern)
812   - {
813   - for(std::string::const_iterator pi(pattern.begin());
814   - pi != pattern.end();
815   - ++pi)
816   - {
817   - if(getc() != *pi)
818   - {
819   - ungetc();
820   - return false;
821   - }
822   - }
823   - return true;
824   - }
825   -};
826   -
827   -template<typename Iter>
828   -inline int _parse_quadhex(input<Iter>& in)
829   -{
830   - int uni_ch = 0, hex;
831   - for(int i = 0; i < 4; i++)
832   - {
833   - if((hex = in.getc()) == -1)
834   - {
835   - return -1;
836   - }
837   - if('0' <= hex && hex <= '9')
838   - {
839   - hex -= '0';
840   - }
841   - else if('A' <= hex && hex <= 'F')
842   - {
843   - hex -= 'A' - 0xa;
844   - }
845   - else if('a' <= hex && hex <= 'f')
846   - {
847   - hex -= 'a' - 0xa;
848   - }
849   - else
850   - {
851   - in.ungetc();
852   - return -1;
853   - }
854   - uni_ch = uni_ch * 16 + hex;
855   - }
856   - return uni_ch;
857   -}
858   -
859   -template<typename String, typename Iter>
860   -inline bool _parse_codepoint(String& out, input<Iter>& in)
861   -{
862   - int uni_ch;
863   - if((uni_ch = _parse_quadhex(in)) == -1)
864   - {
865   - return false;
866   - }
867   - if(0xd800 <= uni_ch && uni_ch <= 0xdfff)
868   - {
869   - if(0xdc00 <= uni_ch)
870   - {
871   - // a second 16-bit of a surrogate pair appeared
872   - return false;
873   - }
874   - // first 16-bit of surrogate pair, get the next one
875   - if(in.getc() != '\\' || in.getc() != 'u')
876   - {
877   - in.ungetc();
878   - return false;
879   - }
880   - int second = _parse_quadhex(in);
881   - if(!(0xdc00 <= second && second <= 0xdfff))
882   - {
883   - return false;
884   - }
885   - uni_ch = ((uni_ch - 0xd800) << 10) | ((second - 0xdc00) & 0x3ff);
886   - uni_ch += 0x10000;
887   - }
888   - if(uni_ch < 0x80)
889   - {
890   - out.push_back(uni_ch);
891   - }
892   - else
893   - {
894   - if(uni_ch < 0x800)
895   - {
896   - out.push_back(0xc0 | (uni_ch >> 6));
897   - }
898   - else
899   - {
900   - if(uni_ch < 0x10000)
901   - {
902   - out.push_back(0xe0 | (uni_ch >> 12));
903   - }
904   - else
905   - {
906   - out.push_back(0xf0 | (uni_ch >> 18));
907   - out.push_back(0x80 | ((uni_ch >> 12) & 0x3f));
908   - }
909   - out.push_back(0x80 | ((uni_ch >> 6) & 0x3f));
910   - }
911   - out.push_back(0x80 | (uni_ch & 0x3f));
912   - }
913   - return true;
914   -}
915   -
916   -template<typename String, typename Iter>
917   -inline bool _parse_string(String& out, input<Iter>& in)
918   -{
919   - while(1)
920   - {
921   - int ch = in.getc();
922   - if(ch < ' ')
923   - {
924   - in.ungetc();
925   - return false;
926   - }
927   - else if(ch == '"')
928   - {
929   - return true;
930   - }
931   - else if(ch == '\\')
932   - {
933   - if((ch = in.getc()) == -1)
934   - {
935   - return false;
936   - }
937   - switch(ch)
938   - {
939   -#define MAP(sym, val) \
940   - case sym: \
941   - out.push_back(val); \
942   - break
943   - MAP('"', '\"');
944   - MAP('\\', '\\');
945   - MAP('/', '/');
946   - MAP('b', '\b');
947   - MAP('f', '\f');
948   - MAP('n', '\n');
949   - MAP('r', '\r');
950   - MAP('t', '\t');
951   -#undef MAP
952   - case 'u':
953   - if(!_parse_codepoint(out, in))
954   - {
955   - return false;
956   - }
957   - break;
958   - default:
959   - return false;
960   - }
961   - }
962   - else
963   - {
964   - out.push_back(ch);
965   - }
966   - }
967   - return false;
968   -}
969   -
970   -template<typename Context, typename Iter>
971   -inline bool _parse_array(Context& ctx, input<Iter>& in)
972   -{
973   - if(!ctx.parse_array_start())
974   - {
975   - return false;
976   - }
977   - size_t idx = 0;
978   - if(in.expect(']'))
979   - {
980   - return ctx.parse_array_stop(idx);
981   - }
982   - do
983   - {
984   - if(!ctx.parse_array_item(in, idx))
985   - {
986   - return false;
987   - }
988   - idx++;
989   - } while(in.expect(','));
990   - return in.expect(']') && ctx.parse_array_stop(idx);
991   -}
992   -
993   -template<typename Context, typename Iter>
994   -inline bool _parse_object(Context& ctx, input<Iter>& in)
995   -{
996   - if(!ctx.parse_object_start())
997   - {
998   - return false;
999   - }
1000   - if(in.expect('}'))
1001   - {
1002   - return true;
1003   - }
1004   - do
1005   - {
1006   - std::string key;
1007   - if(!in.expect('"') || !_parse_string(key, in) || !in.expect(':'))
1008   - {
1009   - return false;
1010   - }
1011   - if(!ctx.parse_object_item(in, key))
1012   - {
1013   - return false;
1014   - }
1015   - } while(in.expect(','));
1016   - return in.expect('}');
1017   -}
1018   -
1019   -template<typename Iter>
1020   -inline std::string _parse_number(input<Iter>& in)
1021   -{
1022   - std::string num_str;
1023   - while(1)
1024   - {
1025   - int ch = in.getc();
1026   - if(('0' <= ch && ch <= '9') || ch == '+' || ch == '-' || ch == 'e' || ch == 'E')
1027   - {
1028   - num_str.push_back(ch);
1029   - }
1030   - else if(ch == '.')
1031   - {
1032   -#if PICOJSON_USE_LOCALE
1033   - num_str += localeconv()->decimal_point;
1034   -#else
1035   - num_str.push_back('.');
1036   -#endif
1037   - }
1038   - else
1039   - {
1040   - in.ungetc();
1041   - break;
1042   - }
1043   - }
1044   - return num_str;
1045   -}
1046   -
1047   -template<typename Context, typename Iter>
1048   -inline bool _parse(Context& ctx, input<Iter>& in)
1049   -{
1050   - in.skip_ws();
1051   - int ch = in.getc();
1052   - switch(ch)
1053   - {
1054   -#define IS(ch, text, op) \
1055   - case ch: \
1056   - if(in.match(text) && op) \
1057   - { \
1058   - return true; \
1059   - } \
1060   - else \
1061   - { \
1062   - return false; \
1063   - }
1064   - IS('n', "ull", ctx.set_null());
1065   - IS('f', "alse", ctx.set_bool(false));
1066   - IS('t', "rue", ctx.set_bool(true));
1067   -#undef IS
1068   - case '"':
1069   - return ctx.parse_string(in);
1070   - case '[':
1071   - return _parse_array(ctx, in);
1072   - case '{':
1073   - return _parse_object(ctx, in);
1074   - default:
1075   - if(('0' <= ch && ch <= '9') || ch == '-')
1076   - {
1077   - double f;
1078   - char* endp;
1079   - in.ungetc();
1080   - std::string num_str = _parse_number(in);
1081   - if(num_str.empty())
1082   - {
1083   - return false;
1084   - }
1085   -#ifdef PICOJSON_USE_INT64
1086   - {
1087   - errno = 0;
1088   - intmax_t ival = strtoimax(num_str.c_str(), &endp, 10);
1089   - if(errno == 0 && std::numeric_limits<int64_t>::min() <= ival && ival <= std::numeric_limits<int64_t>::max() && endp == num_str.c_str() + num_str.size())
1090   - {
1091   - ctx.set_int64(ival);
1092   - return true;
1093   - }
1094   - }
1095   -#endif
1096   - f = strtod(num_str.c_str(), &endp);
1097   - if(endp == num_str.c_str() + num_str.size())
1098   - {
1099   - ctx.set_number(f);
1100   - return true;
1101   - }
1102   - return false;
1103   - }
1104   - break;
1105   - }
1106   - in.ungetc();
1107   - return false;
1108   -}
1109   -
1110   -class deny_parse_context
1111   -{
1112   -public:
1113   - bool set_null()
1114   - {
1115   - return false;
1116   - }
1117   - bool set_bool(bool)
1118   - {
1119   - return false;
1120   - }
1121   -#ifdef PICOJSON_USE_INT64
1122   - bool set_int64(int64_t)
1123   - {
1124   - return false;
1125   - }
1126   -#endif
1127   - bool set_number(double)
1128   - {
1129   - return false;
1130   - }
1131   - template<typename Iter>
1132   - bool parse_string(input<Iter>&)
1133   - {
1134   - return false;
1135   - }
1136   - bool parse_array_start()
1137   - {
1138   - return false;
1139   - }
1140   - template<typename Iter>
1141   - bool parse_array_item(input<Iter>&, size_t)
1142   - {
1143   - return false;
1144   - }
1145   - bool parse_array_stop(size_t)
1146   - {
1147   - return false;
1148   - }
1149   - bool parse_object_start()
1150   - {
1151   - return false;
1152   - }
1153   - template<typename Iter>
1154   - bool parse_object_item(input<Iter>&, const std::string&)
1155   - {
1156   - return false;
1157   - }
1158   -};
1159   -
1160   -class default_parse_context
1161   -{
1162   -protected:
1163   - value* out_;
1164   -
1165   -public:
1166   - default_parse_context(value* out)
1167   - : out_(out)
1168   - {
1169   - }
1170   - bool set_null()
1171   - {
1172   - *out_ = value();
1173   - return true;
1174   - }
1175   - bool set_bool(bool b)
1176   - {
1177   - *out_ = value(b);
1178   - return true;
1179   - }
1180   -#ifdef PICOJSON_USE_INT64
1181   - bool set_int64(int64_t i)
1182   - {
1183   - *out_ = value(i);
1184   - return true;
1185   - }
1186   -#endif
1187   - bool set_number(double f)
1188   - {
1189   - *out_ = value(f);
1190   - return true;
1191   - }
1192   - template<typename Iter>
1193   - bool parse_string(input<Iter>& in)
1194   - {
1195   - *out_ = value(string_type, false);
1196   - return _parse_string(out_->get<std::string>(), in);
1197   - }
1198   - bool parse_array_start()
1199   - {
1200   - *out_ = value(array_type, false);
1201   - return true;
1202   - }
1203   - template<typename Iter>
1204   - bool parse_array_item(input<Iter>& in, size_t)
1205   - {
1206   - array& a = out_->get<array>();
1207   - a.push_back(value());
1208   - default_parse_context ctx(&a.back());
1209   - return _parse(ctx, in);
1210   - }
1211   - bool parse_array_stop(size_t)
1212   - {
1213   - return true;
1214   - }
1215   - bool parse_object_start()
1216   - {
1217   - *out_ = value(object_type, false);
1218   - return true;
1219   - }
1220   - template<typename Iter>
1221   - bool parse_object_item(input<Iter>& in, const std::string& key)
1222   - {
1223   - object& o = out_->get<object>();
1224   - default_parse_context ctx(&o[key]);
1225   - return _parse(ctx, in);
1226   - }
1227   -
1228   -private:
1229   - default_parse_context(const default_parse_context&);
1230   - default_parse_context& operator=(const default_parse_context&);
1231   -};
1232   -
1233   -class null_parse_context
1234   -{
1235   -public:
1236   - struct dummy_str
1237   - {
1238   - void push_back(int)
1239   - {
1240   - }
1241   - };
1242   -
1243   -public:
1244   - null_parse_context()
1245   - {
1246   - }
1247   - bool set_null()
1248   - {
1249   - return true;
1250   - }
1251   - bool set_bool(bool)
1252   - {
1253   - return true;
1254   - }
1255   -#ifdef PICOJSON_USE_INT64
1256   - bool set_int64(int64_t)
1257   - {
1258   - return true;
1259   - }
1260   -#endif
1261   - bool set_number(double)
1262   - {
1263   - return true;
1264   - }
1265   - template<typename Iter>
1266   - bool parse_string(input<Iter>& in)
1267   - {
1268   - dummy_str s;
1269   - return _parse_string(s, in);
1270   - }
1271   - bool parse_array_start()
1272   - {
1273   - return true;
1274   - }
1275   - template<typename Iter>
1276   - bool parse_array_item(input<Iter>& in, size_t)
1277   - {
1278   - return _parse(*this, in);
1279   - }
1280   - bool parse_array_stop(size_t)
1281   - {
1282   - return true;
1283   - }
1284   - bool parse_object_start()
1285   - {
1286   - return true;
1287   - }
1288   - template<typename Iter>
1289   - bool parse_object_item(input<Iter>& in, const std::string&)
1290   - {
1291   - return _parse(*this, in);
1292   - }
1293   -
1294   -private:
1295   - null_parse_context(const null_parse_context&);
1296   - null_parse_context& operator=(const null_parse_context&);
1297   -};
1298   -
1299   -// obsolete, use the version below
1300   -template<typename Iter>
1301   -inline std::string parse(value& out, Iter& pos, const Iter& last)
1302   -{
1303   - std::string err;
1304   - pos = parse(out, pos, last, &err);
1305   - return err;
1306   -}
1307   -
1308   -template<typename Context, typename Iter>
1309   -inline Iter _parse(Context& ctx, const Iter& first, const Iter& last, std::string* err)
1310   -{
1311   - input<Iter> in(first, last);
1312   - if(!_parse(ctx, in) && err != NULL)
1313   - {
1314   - char buf[64];
1315   - SNPRINTF(buf, sizeof(buf), "syntax error at line %d near: ", in.line());
1316   - *err = buf;
1317   - while(1)
1318   - {
1319   - int ch = in.getc();
1320   - if(ch == -1 || ch == '\n')
1321   - {
1322   - break;
1323   - }
1324   - else if(ch >= ' ')
1325   - {
1326   - err->push_back(ch);
1327   - }
1328   - }
1329   - }
1330   - return in.cur();
1331   -}
1332   -
1333   -template<typename Iter>
1334   -inline Iter parse(value& out, const Iter& first, const Iter& last, std::string* err)
1335   -{
1336   - default_parse_context ctx(&out);
1337   - return _parse(ctx, first, last, err);
1338   -}
1339   -
1340   -inline std::string parse(value& out, const std::string& s)
1341   -{
1342   - std::string err;
1343   - parse(out, s.begin(), s.end(), &err);
1344   - return err;
1345   -}
1346   -
1347   -inline std::string parse(value& out, std::istream& is)
1348   -{
1349   - std::string err;
1350   - parse(out, std::istreambuf_iterator<char>(is.rdbuf()), std::istreambuf_iterator<char>(), &err);
1351   - return err;
1352   -}
1353   -
1354   -template<typename T>
1355   -struct last_error_t
1356   -{
1357   - static std::string s;
1358   -};
1359   -template<typename T>
1360   -std::string last_error_t<T>::s;
1361   -
1362   -inline void set_last_error(const std::string& s)
1363   -{
1364   - last_error_t<bool>::s = s;
1365   -}
1366   -
1367   -inline const std::string& get_last_error()
1368   -{
1369   - return last_error_t<bool>::s;
1370   -}
1371   -
1372   -inline bool operator==(const value& x, const value& y)
1373   -{
1374   - if(x.is<null>())
1375   - return y.is<null>();
1376   -#define PICOJSON_CMP(type) \
1377   - if(x.is<type>()) \
1378   - return y.is<type>() && x.get<type>() == y.get<type>()
1379   - PICOJSON_CMP(bool);
1380   - PICOJSON_CMP(double);
1381   - PICOJSON_CMP(std::string);
1382   - PICOJSON_CMP(array);
1383   - PICOJSON_CMP(object);
1384   -#undef PICOJSON_CMP
1385   - PICOJSON_ASSERT(0);
1386   -#ifdef _MSC_VER
1387   - __assume(0);
1388   -#endif
1389   - return false;
1390   -}
1391   -
1392   -inline bool operator!=(const value& x, const value& y)
1393   -{
1394   - return !(x == y);
1395   -}
1396   -} // namespace picojson
1397   -
1398   -#if !PICOJSON_USE_RVALUE_REFERENCE
1399   -namespace std
1400   -{
1401   -template<>
1402   -inline void swap(picojson::value& x, picojson::value& y)
1403   -{
1404   - x.swap(y);
1405   -}
1406   -} // namespace std
1407   -#endif
1408   -
1409   -inline std::istream& operator>>(std::istream& is, picojson::value& x)
1410   -{
1411   - picojson::set_last_error(std::string());
1412   - std::string err = picojson::parse(x, is);
1413   - if(!err.empty())
1414   - {
1415   - picojson::set_last_error(err);
1416   - is.setstate(std::ios::failbit);
1417   - }
1418   - return is;
1419   -}
1420   -
1421   -inline std::ostream& operator<<(std::ostream& os, const picojson::value& x)
1422   -{
1423   - x.serialize(std::ostream_iterator<char>(os));
1424   - return os;
1425   -}
1426   -#ifdef _MSC_VER
1427   -#pragma warning(pop)
1428   -#endif
1429   -
1430   -#endif
examples/reflection-demo/gltf-scene.cpp
... ... @@ -14,11 +14,12 @@
14 14 * limitations under the License.
15 15 *
16 16 */
17   -#include <dali/devel-api/adaptor-framework/file-stream.h>
18 17  
  18 +// HEADER
19 19 #include "gltf-scene.h"
20 20  
21   -#include "pico-json.h"
  21 +// EXTERNAL INCLUDES
  22 +#include <dali/devel-api/adaptor-framework/file-stream.h>
22 23  
23 24 namespace
24 25 {
... ...
examples/reflection-demo/gltf-scene.h
  1 +#ifndef GLTF_SCENE_H
  2 +#define GLTF_SCENE_H
  3 +
1 4 /*
2 5 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
3 6 *
... ... @@ -15,14 +18,13 @@
15 18 *
16 19 */
17 20  
18   -#ifndef GLTF_SCENE_H
19   -#define GLTF_SCENE_H
20   -
21   -#include <dali/integration-api/debug.h>
22 21  
  22 +// EXTERNAL INCLUDES
23 23 #include <string>
  24 +#include <dali/integration-api/debug.h>
24 25  
25   -#include "pico-json.h"
  26 +// INTERNAL INCLUDES
  27 +#include "third-party/pico-json.h"
26 28  
27 29 #define GLTF_LOG(...) \
28 30 { \
... ...
examples/reflection-demo/pico-json.h renamed to third-party/pico-json.h