odin-blend2d

Odin bindings to Blend2D
Log | Files | Refs | README | LICENSE

jsonbuilder.cpp (3209B)


      1 #include "jsonbuilder.h"
      2 
      3 namespace blbench {
      4 
      5 JSONBuilder::JSONBuilder(BLString* dst)
      6   : _dst(dst),
      7     _last(kTokenNone),
      8     _level(0) {}
      9 
     10 JSONBuilder& JSONBuilder::open_array() {
     11   if (_last == kTokenValue)
     12     _dst->append(',');
     13 
     14   _dst->append('[');
     15   _last = kTokenNone;
     16   _level++;
     17 
     18   return *this;
     19 }
     20 
     21 JSONBuilder& JSONBuilder::close_array(bool nl) {
     22   _level--;
     23   if (nl) {
     24     _dst->append('\n');
     25     _dst->append(' ', _level * 2);
     26   }
     27 
     28   _dst->append(']');
     29   _last = kTokenValue;
     30 
     31   return *this;
     32 }
     33 
     34 JSONBuilder& JSONBuilder::open_object() {
     35   if (_last == kTokenValue)
     36     _dst->append(',');
     37 
     38   _dst->append('{');
     39   _last = kTokenNone;
     40   _level++;
     41 
     42   return *this;
     43 }
     44 
     45 JSONBuilder& JSONBuilder::close_object(bool nl) {
     46   _level--;
     47   if (nl) {
     48     _dst->append('\n');
     49     _dst->append(' ', _level * 2);
     50   }
     51 
     52   _dst->append('}');
     53   _last = kTokenValue;
     54   return *this;
     55 }
     56 
     57 JSONBuilder& JSONBuilder::comma() {
     58   if (_last == kTokenValue)
     59     _dst->append(',');
     60   _last = kTokenNone;
     61 
     62   return *this;
     63 }
     64 
     65 JSONBuilder& JSONBuilder::add_key(const char* str) {
     66   add_string(str);
     67 
     68   _dst->append(':');
     69   _last = kTokenNone;
     70 
     71   return *this;
     72 }
     73 
     74 JSONBuilder& JSONBuilder::add_bool(bool b) {
     75   if (_last == kTokenValue)
     76     _dst->append(',');
     77 
     78   _dst->append(b ? "true" : "false");
     79   _last = kTokenValue;
     80 
     81   return *this;
     82 }
     83 
     84 JSONBuilder& JSONBuilder::add_int(int64_t n) {
     85   if (_last == kTokenValue)
     86     _dst->append(',');
     87 
     88   _dst->append_format("%lld", (long long)n);
     89   _last = kTokenValue;
     90 
     91   return *this;
     92 }
     93 
     94 JSONBuilder& JSONBuilder::add_uint(uint64_t n) {
     95   if (_last == kTokenValue)
     96     _dst->append(',');
     97 
     98   _dst->append_format("%llu", (unsigned long long)n);
     99   _last = kTokenValue;
    100 
    101   return *this;
    102 }
    103 
    104 JSONBuilder& JSONBuilder::add_double(double d) {
    105   if (_last == kTokenValue)
    106     _dst->append(',');
    107 
    108   _dst->append_format("%g", d);
    109   _last = kTokenValue;
    110 
    111   return *this;
    112 }
    113 
    114 JSONBuilder& JSONBuilder::add_doublef(const char* fmt, double d) {
    115   if (_last == kTokenValue)
    116     _dst->append(',');
    117 
    118   _dst->append_format(fmt, d);
    119   _last = kTokenValue;
    120 
    121   return *this;
    122 }
    123 
    124 JSONBuilder& JSONBuilder::add_string(const char* str) {
    125   if (_last == kTokenValue)
    126     _dst->append(',');
    127 
    128   _dst->append_format("\"%s\"", str);
    129   _last = kTokenValue;
    130 
    131   return *this;
    132 }
    133 
    134 JSONBuilder& JSONBuilder::add_stringf(const char* fmt, ...) {
    135   if (_last == kTokenValue)
    136     _dst->append(',');
    137 
    138   va_list ap;
    139   va_start(ap, fmt);
    140 
    141   _dst->append('\"');
    142   _dst->appendFormatV(fmt, ap);
    143   _dst->append('\"');
    144   _last = kTokenValue;
    145 
    146   va_end(ap);
    147 
    148   return *this;
    149 }
    150 
    151 JSONBuilder& JSONBuilder::add_string_no_quotes(const char* str) {
    152   if (_last == kTokenValue)
    153     _dst->append(',');
    154 
    155   _dst->append(str);
    156   _last = kTokenValue;
    157 
    158   return *this;
    159 }
    160 
    161 JSONBuilder& JSONBuilder::align_to(size_t n) {
    162   size_t i = _dst->size();
    163   const char* p = _dst->data();
    164 
    165   while (i)
    166     if (p[--i] == '\n')
    167       break;
    168 
    169   size_t cur = _dst->size() - i;
    170   if (cur < n)
    171     _dst->append(' ', n - cur);
    172 
    173   return *this;
    174 }
    175 
    176 JSONBuilder& JSONBuilder::before_record() {
    177   if (_last == kTokenValue)
    178     _dst->append(',');
    179 
    180   _dst->append('\n');
    181   _dst->append(' ', _level * 2);
    182   _last = kTokenNone;
    183 
    184   return *this;
    185 }
    186 
    187 } // {blbench} namespace