wip: json
authorRejean Loyer <redj@ecere.com>
Wed, 5 Nov 2014 17:07:41 +0000 (12:07 -0500)
committerRejean Loyer <redj@ecere.com>
Mon, 16 Mar 2015 05:31:58 +0000 (01:31 -0400)
ecere/src/sys/JSON.ec

index e53b189..cb910dd 100644 (file)
@@ -946,6 +946,12 @@ bool WriteValue(File f, Class type, DataValue value, int indent)
    {
       WriteNumber(f, type, value, indent);
    }
+   else if(type.type == bitClass)
+   {
+      Class dataType;
+      dataType = eSystem_FindClass(__thisModule, type.dataTypeString);
+      WriteNumber(f, dataType, value, indent);
+   }
    return true;
 }
 
@@ -1109,6 +1115,40 @@ static bool _WriteJSONObject(File f, Class objectType, void * object, int indent
                         if(!value.p)
                            continue;
                      }
+                     else if(type.type == bitClass)
+                     {
+                        value.ui64 = *(uint64 *)((byte *)object);
+#if 0
+                        uint64 bits = 0;
+                        uint64 part = 0;
+                        BitMember bitMember = (BitMember)member;
+                        /*if(!bitMember.dataType)
+                           bitMember.dataType = ProcessTypeString(bitMember.dataTypeString, false);*/
+                        /*type = bitMember.dataType;
+                        if(type.kind == classType && type._class && type._class.registered)
+                        {
+                           if(!type._class.registered.dataType)
+                              type._class.registered.dataType = ProcessTypeString(type._class.registered.dataTypeString, false);
+                           type = type._class.registered.dataType;
+                        }*/
+                        PrintLn(type.name);
+                        PrintLn(type.dataTypeString);
+#if 0
+                        switch(bitMember.dataType.kind)
+                        {
+                           case _BoolType:
+                           case charType:       { byte v; type.isSigned ? GetChar(value, (char *)&v) : GetUChar(value, &v); part = (uint64)v; break; }
+                           case shortType:      { uint16 v; type.isSigned ? GetShort(value, (short *)&v) : GetUShort(value, &v); part = (uint64)v; break; }
+                           case intType:
+                           case longType:       { uint v; type.isSigned ? GetInt(value, (int *)&v) : GetUInt(value, &v); part = (uint64)v; break; }
+                           case int64Type:      { uint64 v; type.isSigned ? GetInt64(value, (int64 *)&v) : GetUInt64(value, &v); part = (uint64)v; break; }
+                           case intPtrType:     { uintptr v; type.isSigned ? GetIntPtr(value, (intptr *)&v) : GetUIntPtr(value, &v); part = (uint64)v; break; }
+                           case intSizeType:    { uintsize v; type.isSigned ? GetIntSize(value, (intsize *)&v) : GetUIntSize(value, &v); part = (uint64)v; break; }
+                        }
+#endif
+                        bits |= part << bitMember.pos;
+#endif
+                     }
                      else if(type == class(double) || !strcmp(type.dataTypeString, "double"))
                      {
                         value.d = *(double *)((byte *)object + offset);