Vuo 2.4.4
Loading...
Searching...
No Matches
VuoData.c
Go to the documentation of this file.
1
10#include "VuoData.h"
11#include "VuoBase64.h"
12
14#ifdef VUO_COMPILER
16 "title" : "Binary Data",
17 "description" : "A blob of 8-bit binary data.",
18 "keywords" : [ ],
19 "version" : "1.0.0",
20 "dependencies" : [
21 "VuoBase64",
22 "VuoText"
23 ]
24 });
25#endif
27
34{
35 VuoData value = {0, NULL};
36
37 if (json_object_get_type(js) != json_type_string)
38 return value;
39
40 value.data = VuoBase64_decode(json_object_get_string(js), &value.size);
41 VuoRegister(value.data, free);
42 return value;
43}
44
48json_object *VuoData_getJson(const VuoData value)
49{
50 if (!value.data)
51 return NULL;
52
53 char *encoded = VuoBase64_encode(value.size, value.data);
54 json_object *js = json_object_new_string(encoded);
55 free(encoded);
56 return js;
57}
58
62bool VuoData_areEqual(const VuoData valueA, const VuoData valueB)
63{
64 if (valueA.size != valueB.size)
65 return false;
66
67 if (!valueA.data || !valueB.data)
68 return (!valueA.data && !valueB.data);
69
70 return memcmp(valueA.data, valueB.data, valueA.size) == 0;
71}
72
76bool VuoData_isLessThan(const VuoData valueA, const VuoData valueB)
77{
78 // Treat null data as greater than non-null data,
79 // so the more useful non-null data sorts to the beginning of the list.
80 if (!valueA.data || !valueB.data)
81 return valueA.data && !valueB.data;
82
83 int prefixCmp = memcmp(valueA.data, valueB.data, MIN(valueA.size, valueB.size));
84 if (!prefixCmp)
85 return (valueA.size < valueB.size);
86 else
87 return (prefixCmp < 0);
88}
89
93char *VuoData_getSummary(const VuoData value)
94{
95 if (value.data)
96 return VuoText_format("%lld byte%s of data", value.size, value.size == 1 ? "" : "s");
97 else
98 return strdup("no data");
99}
100
108VuoData VuoData_make(VuoInteger size, unsigned char *data)
109{
110 VuoData value;
111 value.size = size;
112 value.data = (char *)data;
113
114 if (data)
115 VuoRegister(value.data, free);
116
117 return value;
118}
119
126{
127 VuoData value;
128 value.size = strlen(text);
129 value.data = (char *)malloc(value.size);
130 memcpy(value.data, text, value.size);
131 VuoRegister(value.data, free);
132 return value;
133}
134
141{
142 char *dataAsString = (char *)malloc(data.size + 1);
143 dataAsString[data.size] = 0;
144 memcpy(dataAsString, data.data, data.size);
145 return dataAsString;
146}
147
153{
154 VuoRetain(value.data);
155}
156
162{
163 VuoRelease(value.data);
164}