Vuo  2.0.0
VuoList_VuoAudioSamples.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 "VuoAudioSamples.h"
18 }
19 #include "type.h"
20 #include <string>
21 #include <sstream>
22 #include <vector>
23 #include <algorithm>
24 
26 
29 #if 2 == 0
30 #define RETAIN(element)
31 #define RELEASE(element)
32 #elif 2 == 1
33 #define RETAIN(element) VuoRetain((void *)element)
34 #define RELEASE(element) VuoRelease((void *)element)
35 #elif 2 == 2
36 #define RETAIN(element) VuoAudioSamples_retain(element)
37 #define RELEASE(element) VuoAudioSamples_release(element)
38 #endif
39 
41 extern "C" {
43 #ifdef VUO_COMPILER
45  "title" : "List of VuoAudioSamples elements",
46  "keywords" : [ ],
47  "version" : "1.0.0",
48  "dependencies" : [
49  "VuoInteger",
50  "VuoAudioSamples"
51  ]
52  });
53 #endif
54 }
56 
60 void VuoListDestroy_VuoAudioSamples(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_VuoAudioSamples(value);
86  for (unsigned long i = 1; i <= itemCount; ++i)
87  {
89  json_object *itemObject = VuoAudioSamples_getJson(item);
90  json_object_array_add(listObject, itemObject);
91  }
92 
93  return listObject;
94 }
95 
96 #ifdef VuoAudioSamples_REQUIRES_INTERPROCESS_JSON
97 struct json_object * VuoList_VuoAudioSamples_getInterprocessJson(const VuoList_VuoAudioSamples value)
98 {
99  json_object *listObject = json_object_new_array();
100 
101  unsigned long itemCount = VuoListGetCount_VuoAudioSamples(value);
102  for (unsigned long i = 1; i <= itemCount; ++i)
103  {
105  json_object *itemObject = VuoAudioSamples_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_VuoAudioSamples(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 = VuoAudioSamples_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<VuoAudioSamples> * l = new std::vector<VuoAudioSamples>;
155  return reinterpret_cast<VuoList_VuoAudioSamples>(l);
156 }
157 
159 {
160  std::vector<VuoAudioSamples> * l = new std::vector<VuoAudioSamples>(count, value);
162  return reinterpret_cast<VuoList_VuoAudioSamples>(l);
163 }
164 
166 {
167  if (!list)
168  return NULL;
169 
170  std::vector<VuoAudioSamples> *oldList = (std::vector<VuoAudioSamples> *)list;
171 
172  std::vector<VuoAudioSamples> *newList = new std::vector<VuoAudioSamples>(*oldList);
174 
175  for (std::vector<VuoAudioSamples>::iterator i = newList->begin(); i != newList->end(); ++i)
176  RETAIN(*i);
177 
178  return reinterpret_cast<VuoList_VuoAudioSamples>(newList);
179 }
180 
182 {
183  if (!list)
184  return;
185 
186 #if 2 != 0
187  VuoListRemoveAll_VuoAudioSamples(reinterpret_cast<VuoList_VuoAudioSamples>(list));
188 #endif
189 
190  std::vector<VuoAudioSamples> * l = (std::vector<VuoAudioSamples> *)list;
191  delete l;
192 }
193 
195 {
196  std::vector<VuoAudioSamples> * l = (std::vector<VuoAudioSamples> *)list;
197 
198  if (!l || l->size() == 0)
199  return VuoAudioSamples_makeFromJson(NULL);
200 
201  if (index == 0)
202  return (*l)[0];
203 
204  if (index > l->size())
205  return (*l)[l->size()-1];
206 
207  return (*l)[index-1];
208 }
209 
211 {
212  std::vector<VuoAudioSamples> * l = (std::vector<VuoAudioSamples> *)list;
213 
214  if (!l || l->size() == 0)
215  return NULL;
216 
217  return &((*l)[0]);
218 }
219 
220 void VuoListSetValue_VuoAudioSamples(const VuoList_VuoAudioSamples list, const VuoAudioSamples value, const unsigned long index, bool expandListIfNeeded)
221 {
222  if (!list)
223  return;
224 
225  std::vector<VuoAudioSamples> * l = (std::vector<VuoAudioSamples> *)list;
226 
227  if (!expandListIfNeeded && l->size() == 0)
228  return;
229 
230  unsigned long clampedIndex = index - 1;
231 
232  if (index == 0)
233  clampedIndex = 0;
234 
235  if (expandListIfNeeded && clampedIndex >= l->size())
236  {
237  l->resize(clampedIndex + 1);
238  (*l)[clampedIndex] = value;
239  RETAIN(value);
240  }
241  else
242  {
243  if (index > l->size())
244  clampedIndex = l->size() - 1;
245 
246 #if 2 != 0
247  VuoAudioSamples oldValue = (*l)[clampedIndex];
248 #endif
249  (*l)[clampedIndex] = value;
250  RETAIN(value);
251  RELEASE(oldValue);
252  }
253 }
254 
255 void VuoListInsertValue_VuoAudioSamples(const VuoList_VuoAudioSamples list, const VuoAudioSamples value, const unsigned long index)
256 {
257  if (!list)
258  return;
259 
260  std::vector<VuoAudioSamples> * l = (std::vector<VuoAudioSamples> *)list;
261 
262  unsigned long clampedIndex = index - 1;
263 
264  if (index == 0)
265  clampedIndex = 0;
266 
267  if (index > l->size())
268  clampedIndex = l->size() - 1;
269 
270  RETAIN(value);
271  if (index <= l->size())
272  l->insert(l->begin() + clampedIndex, value);
273  else
274  l->push_back(value);
275 }
276 
278 {
279  if (!list)
280  return;
281 
282  std::vector<VuoAudioSamples> * l = (std::vector<VuoAudioSamples> *)list;
283  RETAIN(value);
284  l->insert(l->begin(), value);
285 }
286 
288 {
289  if (!list)
290  return;
291 
292  std::vector<VuoAudioSamples> * l = (std::vector<VuoAudioSamples> *)list;
293  RETAIN(value);
294  l->push_back(value);
295 }
296 
297 void VuoListExchangeValues_VuoAudioSamples(VuoList_VuoAudioSamples list, const unsigned long indexA, const unsigned long indexB)
298 {
299  if (!list)
300  return;
301 
302  std::vector<VuoAudioSamples> * l = (std::vector<VuoAudioSamples> *)list;
303 
304  size_t size = l->size();
305  if (size == 0)
306  return;
307 
308  unsigned long clampedIndexA = indexA - 1;
309  if (indexA == 0)
310  clampedIndexA = 0;
311  if (indexA > size)
312  clampedIndexA = size - 1;
313 
314  unsigned long clampedIndexB = indexB - 1;
315  if (indexB == 0)
316  clampedIndexB = 0;
317  if (indexB > size)
318  clampedIndexB = size - 1;
319 
320  VuoAudioSamples value = (*l)[clampedIndexA];
321  (*l)[clampedIndexA] = (*l)[clampedIndexB];
322  (*l)[clampedIndexB] = value;
323 }
324 
325 #ifdef VuoAudioSamples_SUPPORTS_COMPARISON
326 void VuoListSort_VuoAudioSamples(VuoList_VuoAudioSamples list)
327 {
328  if (!list)
329  return;
330 
331  std::vector<VuoAudioSamples> * l = (std::vector<VuoAudioSamples> *)list;
332 
333  size_t size = l->size();
334  if (size < 2)
335  return;
336 
337  std::sort(l->begin(), l->end(), VuoAudioSamples_isLessThan);
338 }
339 
340 bool VuoList_VuoAudioSamples_areEqual(const VuoList_VuoAudioSamples _a, const VuoList_VuoAudioSamples _b)
341 {
342  if (_a == _b)
343  return true;
344 
345  if (!_a || !_b)
346  return _a == _b;
347 
348  std::vector<VuoAudioSamples> *a = (std::vector<VuoAudioSamples> *)_a;
349  std::vector<VuoAudioSamples> *b = (std::vector<VuoAudioSamples> *)_b;
350  if (a->size() != b->size())
351  return false;
352 
353  for (std::vector<VuoAudioSamples>::iterator ia = a->begin(), ib = b->begin(); ia != a->end(); ++ia, ++ib)
354  if (!VuoAudioSamples_areEqual(*ia, *ib))
355  return false;
356 
357  return true;
358 }
359 
360 bool VuoList_VuoAudioSamples_isLessThan(const VuoList_VuoAudioSamples _a, const VuoList_VuoAudioSamples _b)
361 {
362  if (!_a || !_b)
363  return _a < _b;
364 
365  std::vector<VuoAudioSamples> *a = (std::vector<VuoAudioSamples> *)_a;
366  std::vector<VuoAudioSamples> *b = (std::vector<VuoAudioSamples> *)_b;
367  if (a->size() < b->size()) return true;
368  if (a->size() > b->size()) return false;
369 
370  for (std::vector<VuoAudioSamples>::iterator ia = a->begin(), ib = b->begin(); ia != a->end(); ++ia, ++ib)
371  {
372  if (VuoAudioSamples_isLessThan(*ia, *ib)) return true;
373  if (VuoAudioSamples_isLessThan(*ib, *ia)) return false;
374  }
375 
376  return false;
377 }
378 #endif
379 
381 {
382  if (!list)
383  return;
384 
385  std::vector<VuoAudioSamples> * l = (std::vector<VuoAudioSamples> *)list;
386 
387  size_t size = l->size();
388  if (size == 0)
389  return;
390 
391  double clampedChaos = MIN(MAX(chaos,0),1);
392  for (unsigned long i = 0; i < size * clampedChaos; ++i)
393  {
394  unsigned long j = VuoInteger_random(i, size-1);
395  VuoAudioSamples value = (*l)[i];
396  (*l)[i] = (*l)[j];
397  (*l)[j] = value;
398  }
399 }
400 
402 {
403  if (!list)
404  return;
405 
406  std::vector<VuoAudioSamples> * l = (std::vector<VuoAudioSamples> *)list;
407  std::reverse(l->begin(), l->end());
408 }
409 
410 VuoList_VuoAudioSamples VuoListSubset_VuoAudioSamples(VuoList_VuoAudioSamples list, const signed long startIndex, const unsigned long itemCount)
411 {
412  if (!list)
413  return NULL;
414 
415  std::vector<VuoAudioSamples> * l = (std::vector<VuoAudioSamples> *)list;
416 
417  size_t size = l->size();
418  if (size == 0)
419  return NULL;
420 
421  signed long clampedStartIndex = startIndex - 1;
422  signed long clampedEndIndex = clampedStartIndex + itemCount - 1;
423 
424  if (clampedStartIndex < 0)
425  clampedStartIndex = 0;
426  if (clampedEndIndex >= (signed long)size)
427  clampedEndIndex = size - 1;
428 
429  if (clampedStartIndex > clampedEndIndex)
430  return NULL;
431 
432  std::vector<VuoAudioSamples> *newList = new std::vector<VuoAudioSamples>(
433  l->begin() + clampedStartIndex,
434  l->begin() + clampedEndIndex + 1);
436 
437  for (std::vector<VuoAudioSamples>::iterator i = newList->begin(); i != newList->end(); ++i)
438  RETAIN(*i);
439 
440  return reinterpret_cast<VuoList_VuoAudioSamples>(newList);
441 }
442 
443 #ifdef VuoAudioSamples_SUPPORTS_COMPARISON
444 VuoList_VuoAudioSamples VuoListRemoveDuplicates_VuoAudioSamples(VuoList_VuoAudioSamples list)
445 {
446  if (!list)
447  return NULL;
448 
449  auto *l = (std::vector<VuoAudioSamples> *)list;
450 
451  size_t size = l->size();
452  if (size == 0)
453  return NULL;
454 
455  auto *newList = new std::vector<VuoAudioSamples>;
457 
458  for (auto i = l->begin(); i != l->end(); ++i)
459  {
460  bool found = false;
461  for (auto j = newList->begin(); j != newList->end(); ++j)
462  if (VuoAudioSamples_areEqual(*i, *j))
463  {
464  found = true;
465  break;
466  }
467  if (!found)
468  newList->push_back(*i);
469  }
470 
471  for (auto i = newList->begin(); i != newList->end(); ++i)
472  RETAIN(*i);
473 
474  return reinterpret_cast<VuoList_VuoAudioSamples>(newList);
475 }
476 #endif
477 
479 {
480  if (!list)
481  return;
482 
483  std::vector<VuoAudioSamples> * l = (std::vector<VuoAudioSamples> *)list;
484 
485  if (!l->size())
486  return;
487 
488  RELEASE(l->front());
489  l->erase(l->begin());
490 }
491 
493 {
494  if (!list)
495  return;
496 
497  std::vector<VuoAudioSamples> * l = (std::vector<VuoAudioSamples> *)list;
498 
499  if (!l->size())
500  return;
501 
502  RELEASE(l->back());
503  l->pop_back();
504 }
505 
507 {
508  if (!list)
509  return;
510 
511  while (VuoListGetCount_VuoAudioSamples(list) > 0)
513 }
514 
515 void VuoListRemoveValue_VuoAudioSamples(VuoList_VuoAudioSamples list, const unsigned long index)
516 {
517  if (!list)
518  return;
519 
520  if (index == 0)
521  return;
522 
523  std::vector<VuoAudioSamples> * l = (std::vector<VuoAudioSamples> *)list;
524 
525  size_t size = l->size();
526  if (size == 0 || index > size)
527  return;
528 
529  l->erase(l->begin() + index - 1);
530 }
531 
533 {
534  if (!list)
535  return 0;
536 
537  std::vector<VuoAudioSamples> * l = (std::vector<VuoAudioSamples> *)list;
538  return l->size();
539 }