Vuo 2.4.4
Loading...
Searching...
No Matches
VuoDictionary_VuoText_VuoReal.cc
Go to the documentation of this file.
1
10#include <sstream>
11
12extern "C"
13{
14
15#include <string.h>
16
18
20#ifdef VUO_COMPILER
22 "title" : "Dictionary of Text keys and Real values",
23 "keywords" : [ ],
24 "version" : "1.0.0",
25 "dependencies" : [
26 "VuoReal",
27 "VuoText",
28 "VuoList_VuoReal",
29 "VuoList_VuoText"
30 ]
31 });
32#endif
34}
35
48{
50 json_object *o = NULL;
51
52 bool hasKeys = json_object_object_get_ex(js, "keys", &o);
53 d.keys = VuoList_VuoText_makeFromJson(hasKeys ? o : NULL);
54
55 bool hasValues = json_object_object_get_ex(js, "values", &o);
56 d.values = VuoList_VuoReal_makeFromJson(hasValues ? o : NULL);
57
58 return d;
59}
60
66{
67 json_object *js = json_object_new_object();
68
69 json_object_object_add(js, "keys", VuoList_VuoText_getJson(d.keys));
70 json_object_object_add(js, "values", VuoList_VuoReal_getJson(d.values));
71
72 return js;
73}
74
80{
81 unsigned long keyCount = VuoListGetCount_VuoText(d.keys);
82 if (keyCount == 0)
83 return strdup("Empty dictionary");
84
85 const int maxItems = 20;
86 size_t maxCharacters = 400;
87 size_t characterCount = 0;
88
89 std::ostringstream summary;
90 summary << "Dictionary containing " << keyCount << " item" << (keyCount == 1 ? "" : "s") << ": <table>";
91
92 unsigned long i;
93 for (i = 1; i <= keyCount && i <= maxItems && characterCount <= maxCharacters; ++i)
94 {
95 VuoText key = VuoListGetValue_VuoText(d.keys, i);
96 VuoReal value = VuoListGetValue_VuoReal(d.values, i);
97 char *keySummary = VuoText_getSummary(key);
98 char *valueSummary = VuoReal_getSummary(value);
99 summary << "<tr><td>" << keySummary << "</td><td> → " << valueSummary << "</td></tr>";
100 if (key)
101 characterCount += strlen(key);
102 characterCount += strlen(valueSummary);
103 free(keySummary);
104 free(valueSummary);
105 }
106
107 if (i <= keyCount)
108 summary << "<tr><td colspan=\"2\">…</td></tr>";
109
110 summary << "</table>";
111
112 return strdup(summary.str().c_str());
113}
114
123
131
139{
140 unsigned long count = VuoListGetCount_VuoText(d.keys);
141 for (unsigned long i = 1; i <= count; ++i)
142 if (strcmp(key, VuoListGetValue_VuoText(d.keys, i)) == 0)
143 return VuoListGetValue_VuoReal(d.values, i);
144
145 return 0;
146}
147
160
166{
167 VuoRetain(value.keys);
168 VuoRetain(value.values);
169}
170
176{
177 VuoRelease(value.keys);
178 VuoRelease(value.values);
179}