732 } |
732 } |
733 cxFree(value->allocator, value); |
733 cxFree(value->allocator, value); |
734 } |
734 } |
735 |
735 |
736 CxJsonValue* cxJsonCreateObj(const CxAllocator* allocator) { |
736 CxJsonValue* cxJsonCreateObj(const CxAllocator* allocator) { |
|
737 if (allocator == NULL) allocator = cxDefaultAllocator; |
737 CxJsonValue* v = cxMalloc(allocator, sizeof(CxJsonValue)); |
738 CxJsonValue* v = cxMalloc(allocator, sizeof(CxJsonValue)); |
738 if (v == NULL) return NULL; |
739 if (v == NULL) return NULL; |
739 v->allocator = allocator; |
740 v->allocator = allocator; |
740 v->type = CX_JSON_OBJECT; |
741 v->type = CX_JSON_OBJECT; |
741 cx_array_initialize_a(allocator, v->value.object.values, 16); |
742 cx_array_initialize_a(allocator, v->value.object.values, 16); |
753 } |
754 } |
754 return v; |
755 return v; |
755 } |
756 } |
756 |
757 |
757 CxJsonValue* cxJsonCreateArr(const CxAllocator* allocator) { |
758 CxJsonValue* cxJsonCreateArr(const CxAllocator* allocator) { |
|
759 if (allocator == NULL) allocator = cxDefaultAllocator; |
758 CxJsonValue* v = cxMalloc(allocator, sizeof(CxJsonValue)); |
760 CxJsonValue* v = cxMalloc(allocator, sizeof(CxJsonValue)); |
759 if (v == NULL) return NULL; |
761 if (v == NULL) return NULL; |
760 v->allocator = allocator; |
762 v->allocator = allocator; |
761 v->type = CX_JSON_ARRAY; |
763 v->type = CX_JSON_ARRAY; |
762 cx_array_initialize_a(allocator, v->value.array.array, 16); |
764 cx_array_initialize_a(allocator, v->value.array.array, 16); |
763 if (v->value.array.array == NULL) { cxFree(allocator, v); return NULL; } |
765 if (v->value.array.array == NULL) { cxFree(allocator, v); return NULL; } |
764 return v; |
766 return v; |
765 } |
767 } |
766 |
768 |
767 CxJsonValue* cxJsonCreateNumber(const CxAllocator* allocator, double num) { |
769 CxJsonValue* cxJsonCreateNumber(const CxAllocator* allocator, double num) { |
|
770 if (allocator == NULL) allocator = cxDefaultAllocator; |
768 CxJsonValue* v = cxMalloc(allocator, sizeof(CxJsonValue)); |
771 CxJsonValue* v = cxMalloc(allocator, sizeof(CxJsonValue)); |
769 if (v == NULL) return NULL; |
772 if (v == NULL) return NULL; |
770 v->allocator = allocator; |
773 v->allocator = allocator; |
771 v->type = CX_JSON_NUMBER; |
774 v->type = CX_JSON_NUMBER; |
772 v->value.number = num; |
775 v->value.number = num; |
773 return v; |
776 return v; |
774 } |
777 } |
775 |
778 |
776 CxJsonValue* cxJsonCreateInteger(const CxAllocator* allocator, int64_t num) { |
779 CxJsonValue* cxJsonCreateInteger(const CxAllocator* allocator, int64_t num) { |
|
780 if (allocator == NULL) allocator = cxDefaultAllocator; |
777 CxJsonValue* v = cxMalloc(allocator, sizeof(CxJsonValue)); |
781 CxJsonValue* v = cxMalloc(allocator, sizeof(CxJsonValue)); |
778 if (v == NULL) return NULL; |
782 if (v == NULL) return NULL; |
779 v->allocator = allocator; |
783 v->allocator = allocator; |
780 v->type = CX_JSON_INTEGER; |
784 v->type = CX_JSON_INTEGER; |
781 v->value.integer = num; |
785 v->value.integer = num; |
785 CxJsonValue* cxJsonCreateString(const CxAllocator* allocator, const char* str) { |
789 CxJsonValue* cxJsonCreateString(const CxAllocator* allocator, const char* str) { |
786 return cxJsonCreateCxString(allocator, cx_str(str)); |
790 return cxJsonCreateCxString(allocator, cx_str(str)); |
787 } |
791 } |
788 |
792 |
789 CxJsonValue* cxJsonCreateCxString(const CxAllocator* allocator, cxstring str) { |
793 CxJsonValue* cxJsonCreateCxString(const CxAllocator* allocator, cxstring str) { |
|
794 if (allocator == NULL) allocator = cxDefaultAllocator; |
790 CxJsonValue* v = cxMalloc(allocator, sizeof(CxJsonValue)); |
795 CxJsonValue* v = cxMalloc(allocator, sizeof(CxJsonValue)); |
791 if (v == NULL) return NULL; |
796 if (v == NULL) return NULL; |
792 v->allocator = allocator; |
797 v->allocator = allocator; |
793 v->type = CX_JSON_STRING; |
798 v->type = CX_JSON_STRING; |
794 cxmutstr s = cx_strdup_a(allocator, str); |
799 cxmutstr s = cx_strdup_a(allocator, str); |
796 v->value.string = s; |
801 v->value.string = s; |
797 return v; |
802 return v; |
798 } |
803 } |
799 |
804 |
800 CxJsonValue* cxJsonCreateLiteral(const CxAllocator* allocator, CxJsonLiteral lit) { |
805 CxJsonValue* cxJsonCreateLiteral(const CxAllocator* allocator, CxJsonLiteral lit) { |
|
806 if (allocator == NULL) allocator = cxDefaultAllocator; |
801 CxJsonValue* v = cxMalloc(allocator, sizeof(CxJsonValue)); |
807 CxJsonValue* v = cxMalloc(allocator, sizeof(CxJsonValue)); |
802 if (v == NULL) return NULL; |
808 if (v == NULL) return NULL; |
803 v->allocator = allocator; |
809 v->allocator = allocator; |
804 v->type = CX_JSON_LITERAL; |
810 v->type = CX_JSON_LITERAL; |
805 v->value.literal = lit; |
811 v->value.literal = lit; |