Vuo  2.0.0
VuoList_VuoControlCode.cc
Go to the documentation of this file.
1 
10 // This module is generated by vuo/type/list/generateVariants.sh.
11 
12 extern "C" {
13 #include "VuoHeap.h"
14 #include "VuoInteger.h"
15 #include "VuoText.h"
16 #include "VuoControlCode.h"
17 #include "VuoList_VuoControlCode.h"
18 }
19 #include "type.h"
20 #include <string>
21 #include <sstream>
22 #include <vector>
23 #include <algorithm>
24 
26 
29 #if 0 == 0
30 #define RETAIN(element)
31 #define RELEASE(element)
32 #elif 0 == 1
33 #define RETAIN(element) VuoRetain((void *)element)
34 #define RELEASE(element) VuoRelease((void *)element)
35 #elif 0 == 2
36 #define RETAIN(element) VuoControlCode_retain(element)
37 #define RELEASE(element) VuoControlCode_release(element)
38 #endif
39 
41 extern "C" {
43 #ifdef VUO_COMPILER
45  "title" : "List of VuoControlCode elements",
46  "keywords" : [ ],
47  "version" : "1.0.0",
48  "dependencies" : [
49  "VuoInteger",
50  "VuoControlCode"
51  ]
52  });
53 #endif
54 }
56 
60 void VuoListDestroy_VuoControlCode(void *list);
61 
62 
64 {
66 
67  if (json_object_get_type(js) == json_type_array)
68  {
69  int itemCount = json_object_array_length(js);
70  for (int i = 0; i < itemCount; ++i)
71  {
72  json_object *itemObject = json_object_array_get_idx(js, i);
75  }
76  }
77 
78  return list;
79 }
80 
82 {
83  json_object *listObject = json_object_new_array();
84 
85  unsigned long itemCount = VuoListGetCount_VuoControlCode(value);
86  for (unsigned long i = 1; i <= itemCount; ++i)
87  {
89  json_object *itemObject = VuoControlCode_getJson(item);
90  json_object_array_add(listObject, itemObject);
91  }
92 
93  return listObject;
94 }
95 
96 #ifdef VuoControlCode_REQUIRES_INTERPROCESS_JSON
97 struct json_object * VuoList_VuoControlCode_getInterprocessJson(const VuoList_VuoControlCode value)
98 {
99  json_object *listObject = json_object_new_array();
100 
101  unsigned long itemCount = VuoListGetCount_VuoControlCode(value);
102  for (unsigned long i = 1; i <= itemCount; ++i)
103  {
105  json_object *itemObject = VuoControlCode_getInterprocessJson(item);
106  json_object_array_add(listObject, itemObject);
107  }
108 
109  return listObject;
110 }
111 #endif
112 
114 {
115  if (!value)
116  return strdup("Empty list");
117 
118  const int maxItems = 20;
119  const int maxCharacters = 400;
120 
121  unsigned long itemCount = VuoListGetCount_VuoControlCode(value);
122  if (itemCount == 0)
123  return strdup("Empty list");
124 
125  unsigned long characterCount = 0;
126 
127  std::ostringstream summary;
128  summary << "List containing " << itemCount << " item" << (itemCount == 1 ? "" : "s") << ": <ul>";
129  unsigned long i;
130  for (i = 1; i <= itemCount && i <= maxItems && characterCount <= maxCharacters; ++i)
131  {
133  char *itemSummaryCstr = VuoControlCode_getSummary(item);
134  std::string itemSummary = itemSummaryCstr;
135  free(itemSummaryCstr);
136  if (itemSummary.length() && itemSummary.find_first_not_of(' ') != std::string::npos)
137  summary << "<li>" << itemSummary << "</li>";
138  else
139  summary << "<li>&nbsp;</li>";
140  characterCount += itemSummary.length();
141  }
142 
143  if (i <= itemCount)
144  summary << "<li>…</li>";
145 
146  summary << "</ul>";
147 
148  return strdup(summary.str().c_str());
149 }
150 
152 {
153  std::vector<VuoControlCode> * l = new std::vector<VuoControlCode>;
155  return reinterpret_cast<VuoList_VuoControlCode>(l);
156 }
157 
159 {
160  std::vector<VuoControlCode> * l = new std::vector<VuoControlCode>(count, value);
162 
163 #if 0 != 0
164  for (unsigned long i = 0; i < count; ++i)
165  RETAIN(value);
166 #endif
167 
168  return reinterpret_cast<VuoList_VuoControlCode>(l);
169 }
170 
172 {
173  if (!list)
174  return NULL;
175 
176  std::vector<VuoControlCode> *oldList = (std::vector<VuoControlCode> *)list;
177 
178  std::vector<VuoControlCode> *newList = new std::vector<VuoControlCode>(*oldList);
180 
181  for (std::vector<VuoControlCode>::iterator i = newList->begin(); i != newList->end(); ++i)
182  RETAIN(*i);
183 
184  return reinterpret_cast<VuoList_VuoControlCode>(newList);
185 }
186 
188 {
189  if (!list)
190  return;
191 
192 #if 0 != 0
194 #endif
195 
196  std::vector<VuoControlCode> * l = (std::vector<VuoControlCode> *)list;
197  delete l;
198 }
199 
201 {
202  std::vector<VuoControlCode> * l = (std::vector<VuoControlCode> *)list;
203 
204  if (!l || l->size() == 0)
205  return VuoControlCode_makeFromJson(NULL);
206 
207  if (index == 0)
208  return (*l)[0];
209 
210  if (index > l->size())
211  return (*l)[l->size()-1];
212 
213  return (*l)[index-1];
214 }
215 
217 {
218  std::vector<VuoControlCode> * l = (std::vector<VuoControlCode> *)list;
219 
220  if (!l || l->size() == 0)
221  return NULL;
222 
223  return &((*l)[0]);
224 }
225 
226 void VuoListForeach_VuoControlCode(const VuoList_VuoControlCode list, bool (^function)(const VuoControlCode value))
227 {
228  auto l = reinterpret_cast<const std::vector<VuoControlCode> *>(list);
229 
230  if (!l || l->size() == 0)
231  return;
232 
233  for (auto item : *l)
234  if (!function(item))
235  break;
236 }
237 
238 void VuoListSetValue_VuoControlCode(const VuoList_VuoControlCode list, const VuoControlCode value, const unsigned long index, bool expandListIfNeeded)
239 {
240  if (!list)
241  return;
242 
243  std::vector<VuoControlCode> * l = (std::vector<VuoControlCode> *)list;
244 
245  if (!expandListIfNeeded && l->size() == 0)
246  return;
247 
248  unsigned long clampedIndex = index - 1;
249 
250  if (index == 0)
251  clampedIndex = 0;
252 
253  if (expandListIfNeeded && clampedIndex >= l->size())
254  {
255  l->resize(clampedIndex + 1);
256  (*l)[clampedIndex] = value;
257  RETAIN(value);
258  }
259  else
260  {
261  if (index > l->size())
262  clampedIndex = l->size() - 1;
263 
264 #if 0 != 0
265  VuoControlCode oldValue = (*l)[clampedIndex];
266 #endif
267  (*l)[clampedIndex] = value;
268  RETAIN(value);
269  RELEASE(oldValue);
270  }
271 }
272 
273 void VuoListInsertValue_VuoControlCode(const VuoList_VuoControlCode list, const VuoControlCode value, const unsigned long index)
274 {
275  if (!list)
276  return;
277 
278  std::vector<VuoControlCode> * l = (std::vector<VuoControlCode> *)list;
279 
280  unsigned long clampedIndex = index - 1;
281 
282  if (index == 0)
283  clampedIndex = 0;
284 
285  if (index > l->size())
286  clampedIndex = l->size() - 1;
287 
288  RETAIN(value);
289  if (index <= l->size())
290  l->insert(l->begin() + clampedIndex, value);
291  else
292  l->push_back(value);
293 }
294 
296 {
297  if (!list)
298  return;
299 
300  std::vector<VuoControlCode> * l = (std::vector<VuoControlCode> *)list;
301  RETAIN(value);
302  l->insert(l->begin(), value);
303 }
304 
306 {
307  if (!list)
308  return;
309 
310  std::vector<VuoControlCode> * l = (std::vector<VuoControlCode> *)list;
311  RETAIN(value);
312  l->push_back(value);
313 }
314 
315 void VuoListExchangeValues_VuoControlCode(VuoList_VuoControlCode list, const unsigned long indexA, const unsigned long indexB)
316 {
317  if (!list)
318  return;
319 
320  std::vector<VuoControlCode> * l = (std::vector<VuoControlCode> *)list;
321 
322  size_t size = l->size();
323  if (size == 0)
324  return;
325 
326  unsigned long clampedIndexA = indexA - 1;
327  if (indexA == 0)
328  clampedIndexA = 0;
329  if (indexA > size)
330  clampedIndexA = size - 1;
331 
332  unsigned long clampedIndexB = indexB - 1;
333  if (indexB == 0)
334  clampedIndexB = 0;
335  if (indexB > size)
336  clampedIndexB = size - 1;
337 
338  VuoControlCode value = (*l)[clampedIndexA];
339  (*l)[clampedIndexA] = (*l)[clampedIndexB];
340  (*l)[clampedIndexB] = value;
341 }
342 
343 #ifdef VuoControlCode_SUPPORTS_COMPARISON
344 void VuoListSort_VuoControlCode(VuoList_VuoControlCode list)
345 {
346  if (!list)
347  return;
348 
349  std::vector<VuoControlCode> * l = (std::vector<VuoControlCode> *)list;
350 
351  size_t size = l->size();
352  if (size < 2)
353  return;
354 
355  std::sort(l->begin(), l->end(), VuoControlCode_isLessThan);
356 }
357 
358 bool VuoList_VuoControlCode_areEqual(const VuoList_VuoControlCode _a, const VuoList_VuoControlCode _b)
359 {
360  if (_a == _b)
361  return true;
362 
363  if (!_a || !_b)
364  return _a == _b;
365 
366  std::vector<VuoControlCode> *a = (std::vector<VuoControlCode> *)_a;
367  std::vector<VuoControlCode> *b = (std::vector<VuoControlCode> *)_b;
368  if (a->size() != b->size())
369  return false;
370 
371  for (std::vector<VuoControlCode>::iterator ia = a->begin(), ib = b->begin(); ia != a->end(); ++ia, ++ib)
372  if (!VuoControlCode_areEqual(*ia, *ib))
373  return false;
374 
375  return true;
376 }
377 
378 bool VuoList_VuoControlCode_isLessThan(const VuoList_VuoControlCode _a, const VuoList_VuoControlCode _b)
379 {
380  if (!_a || !_b)
381  return _a < _b;
382 
383  std::vector<VuoControlCode> *a = (std::vector<VuoControlCode> *)_a;
384  std::vector<VuoControlCode> *b = (std::vector<VuoControlCode> *)_b;
385  if (a->size() < b->size()) return true;
386  if (a->size() > b->size()) return false;
387 
388  for (std::vector<VuoControlCode>::iterator ia = a->begin(), ib = b->begin(); ia != a->end(); ++ia, ++ib)
389  {
390  if (VuoControlCode_isLessThan(*ia, *ib)) return true;
391  if (VuoControlCode_isLessThan(*ib, *ia)) return false;
392  }
393 
394  return false;
395 }
396 #endif
397 
399 {
400  if (!list)
401  return;
402 
403  std::vector<VuoControlCode> * l = (std::vector<VuoControlCode> *)list;
404 
405  size_t size = l->size();
406  if (size == 0)
407  return;
408 
409  double clampedChaos = MIN(MAX(chaos,0),1);
410  for (unsigned long i = 0; i < size * clampedChaos; ++i)
411  {
412  unsigned long j = VuoInteger_random(i, size-1);
413  VuoControlCode value = (*l)[i];
414  (*l)[i] = (*l)[j];
415  (*l)[j] = value;
416  }
417 }
418 
420 {
421  if (!list)
422  return;
423 
424  std::vector<VuoControlCode> * l = (std::vector<VuoControlCode> *)list;
425  std::reverse(l->begin(), l->end());
426 }
427 
428 VuoList_VuoControlCode VuoListSubset_VuoControlCode(VuoList_VuoControlCode list, const signed long startIndex, const unsigned long itemCount)
429 {
430  if (!list)
431  return NULL;
432 
433  std::vector<VuoControlCode> * l = (std::vector<VuoControlCode> *)list;
434 
435  size_t size = l->size();
436  if (size == 0)
437  return NULL;
438 
439  signed long clampedStartIndex = startIndex - 1;
440  signed long clampedEndIndex = clampedStartIndex + itemCount - 1;
441 
442  if (clampedStartIndex < 0)
443  clampedStartIndex = 0;
444  if (clampedEndIndex >= (signed long)size)
445  clampedEndIndex = size - 1;
446 
447  if (clampedStartIndex > clampedEndIndex)
448  return NULL;
449 
450  std::vector<VuoControlCode> *newList = new std::vector<VuoControlCode>(
451  l->begin() + clampedStartIndex,
452  l->begin() + clampedEndIndex + 1);
454 
455  for (std::vector<VuoControlCode>::iterator i = newList->begin(); i != newList->end(); ++i)
456  RETAIN(*i);
457 
458  return reinterpret_cast<VuoList_VuoControlCode>(newList);
459 }
460 
461 #ifdef VuoControlCode_SUPPORTS_COMPARISON
462 VuoList_VuoControlCode VuoListRemoveDuplicates_VuoControlCode(VuoList_VuoControlCode list)
463 {
464  if (!list)
465  return NULL;
466 
467  auto *l = (std::vector<VuoControlCode> *)list;
468 
469  size_t size = l->size();
470  if (size == 0)
471  return NULL;
472 
473  auto *newList = new std::vector<VuoControlCode>;
475 
476  for (auto i = l->begin(); i != l->end(); ++i)
477  {
478  bool found = false;
479  for (auto j = newList->begin(); j != newList->end(); ++j)
480  if (VuoControlCode_areEqual(*i, *j))
481  {
482  found = true;
483  break;
484  }
485  if (!found)
486  newList->push_back(*i);
487  }
488 
489  for (auto i = newList->begin(); i != newList->end(); ++i)
490  RETAIN(*i);
491 
492  return reinterpret_cast<VuoList_VuoControlCode>(newList);
493 }
494 #endif
495 
497 {
498  if (!list)
499  return;
500 
501  std::vector<VuoControlCode> * l = (std::vector<VuoControlCode> *)list;
502 
503  if (!l->size())
504  return;
505 
506  RELEASE(l->front());
507  l->erase(l->begin());
508 }
509 
511 {
512  if (!list)
513  return;
514 
515  std::vector<VuoControlCode> * l = (std::vector<VuoControlCode> *)list;
516 
517  if (!l->size())
518  return;
519 
520  RELEASE(l->back());
521  l->pop_back();
522 }
523 
525 {
526  if (!list)
527  return;
528 
529  while (VuoListGetCount_VuoControlCode(list) > 0)
531 }
532 
533 void VuoListRemoveValue_VuoControlCode(VuoList_VuoControlCode list, const unsigned long index)
534 {
535  if (!list)
536  return;
537 
538  if (index == 0)
539  return;
540 
541  std::vector<VuoControlCode> * l = (std::vector<VuoControlCode> *)list;
542 
543  size_t size = l->size();
544  if (size == 0 || index > size)
545  return;
546 
547  l->erase(l->begin() + index - 1);
548 }
549 
551 {
552  if (!list)
553  return 0;
554 
555  std::vector<VuoControlCode> * l = (std::vector<VuoControlCode> *)list;
556  return l->size();
557 }