libsheepy
libsheepyCSmallBool.c
Go to the documentation of this file.
1 // MIT License
2 //
3 // Copyright (c) 2023 Remy Noulin
4 //
5 // Permission is hereby granted, free of charge, to any person obtaining a copy
6 // of this software and associated documentation files (the "Software"), to deal
7 // in the Software without restriction, including without limitation the rights
8 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 // copies of the Software, and to permit persons to whom the Software is
10 // furnished to do so, subject to the following conditions:
11 //
12 // The above copyright notice and this permission notice shall be included in all
13 // copies or substantial portions of the Software.
14 //
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 // SOFTWARE.
22 
23 #include "../libsheepyObject.h"
24 #include "libsheepyCSmallBool.h"
26 
27 #define internal static
28 
29 #include <stdint.h>
30 #include <stdlib.h>
31 #include <stdbool.h>
32 #include <string.h>
33 #include <stdio.h>
34 
35 void initiateSmallBool(smallBoolt *self);
38 void finalizeRecycleSmallBool(void *arg UNUSED);
39 void finalizeSmallBool(void);
45 internal void freeSmallBool(smallBoolt *self);
46 internal void terminateSmallBool(smallBoolt **self);
47 internal char* toStringSmallBool(smallBoolt *self);
49 internal void smashSmallBool(smallBoolt **self);
50 #if (NFreeStackCheck)
51 internal void finishSmallBool(smallBoolt **self);
52 #else
53 internal void finishSmallBool(smallBoolt **self);
54 #endif
55 internal const char* helpSmallBool(smallBoolt UNUSED *self);
56 internal bool getSmallBool(smallBoolt *self);
57 internal smallBoolt* setSmallBool(smallBoolt *self, bool value);
58 internal smallBoolt* setDoubleSmallBool(smallBoolt* self, double p2);
59 internal smallBoolt* setInt64SmallBool(smallBoolt* self, int64_t p2);
60 internal smallBoolt* setInt32SmallBool(smallBoolt* self, int32_t p2);
61 internal smallBoolt* setUint32SmallBool(smallBoolt* self, uint32_t p2);
62 internal smallBoolt* setUint64SmallBool(smallBoolt* self, uint64_t p2);
63 internal smallBoolt* setSSmallBool(smallBoolt* self, const char* p2);
69 internal bool* getPSmallBool(smallBoolt *self);
70 internal bool equalSmallBoolChar(smallBoolt* self, const char * p2);
71 internal bool equalSmallBoolBase(smallBoolt* self, baset* p2);
72 internal bool equalSmallBoolBool(smallBoolt* self, bool p2);
73 internal bool equalSmallBoolDouble(smallBoolt* self, double p2);
74 internal bool equalSmallBoolInt64(smallBoolt* self, int64_t p2);
75 internal bool equalSmallBoolInt32(smallBoolt* self, int32_t p2);
76 internal bool equalSmallBoolUint32(smallBoolt* self, uint32_t p2);
77 internal bool equalSmallBoolUint64(smallBoolt* self, uint64_t p2);
78 internal bool equalSmallBool(smallBoolt* self, smallBoolt* p2);
79 internal bool equalSmallBoolSmallBytes(smallBoolt* self, smallBytest* p2);
80 internal bool equalSmallBoolSmallDouble(smallBoolt* self, smallDoublet* p2);
81 internal bool equalSmallBoolSmallInt(smallBoolt* self, smallIntt* p2);
82 internal bool equalSmallBoolSmallJson(smallBoolt* self, smallJsont* p2);
83 internal bool equalSmallBoolSmallString(smallBoolt* self, smallStringt* p2);
84 internal smallBoolt* readFileSmallBool(smallBoolt *self, const char *filePath);
87 internal smallBoolt* readStreamSmallBool(smallBoolt *self, FILE *fp);
88 internal int writeFileSmallBool(smallBoolt *self, const char *filePath);
89 internal int writeFileSmallJsonSmallBool(smallBoolt *self, smallJsont *filePath);
90 internal int writeFileSmallStringSmallBool(smallBoolt *self, smallStringt *filePath);
91 internal int writeStreamSmallBool(smallBoolt *self, FILE *fp);
92 internal int appendFileSmallBool(smallBoolt *self, const char *filePath);
93 internal int appendFileSmallStringSmallBool(smallBoolt *self, smallStringt *filePath);
95 bool getBoolSmallBoolG (smallBoolt *self, bool retType UNUSED, int64_t index UNUSED);
96 bool* getBoolPSmallBoolG (smallBoolt *self, bool* retType UNUSED, int64_t index UNUSED);
97 smallBoolt* setSmallBoolG(smallBoolt* self, bool p2);
98 smallBoolt* setDoubleSmallBoolG(smallBoolt* self, double p2);
99 smallBoolt* setInt64SmallBoolG(smallBoolt* self, int64_t p2);
100 smallBoolt* setInt32SmallBoolG(smallBoolt* self, int32_t p2);
101 smallBoolt* setUint32SmallBoolG(smallBoolt* self, uint32_t p2);
102 smallBoolt* setUint64SmallBoolG(smallBoolt* self, uint64_t p2);
103 smallBoolt* setSSmallBoolG(smallBoolt* self, const char* p2);
109 bool equalSmallBoolCharG(smallBoolt* self, const char * p2);
110 bool equalSmallBoolBaseG(smallBoolt* self, baset* p2);
111 bool equalSmallBoolBoolG(smallBoolt* self, bool p2);
112 bool equalSmallBoolDoubleG(smallBoolt* self, double p2);
113 bool equalSmallBoolInt64G(smallBoolt* self, int64_t p2);
114 bool equalSmallBoolInt32G(smallBoolt* self, int32_t p2);
115 bool equalSmallBoolUint32G(smallBoolt* self, uint32_t p2);
116 bool equalSmallBoolUint64G(smallBoolt* self, uint64_t p2);
117 bool equalSmallBoolFG(smallBoolt* self, smallBoolt* p2);
123 smallBoolt* readFileSmallBoolG (smallBoolt *self, const char *filePath);
127 int writeFileSmallBoolG (smallBoolt *self, const char *filePath);
128 int writeFileSmallJsonSmallBoolG (smallBoolt *self, smallJsont *filePath);
130 int writeStreamSmallBoolG (smallBoolt *self, FILE *fp);
131 int appendFileSmallBoolFG (smallBoolt *self, const char *filePath);
133 
135 
136  self->type = "smallBool";
137 
138  if (!smallBoolF) {
139  isError(smallBoolF, malloc(sizeof(smallBoolFunctionst))) {
140  self->f = NULL;
141  return;
142  }
143  registerMethodsSmallBool(smallBoolF);
144  }
145  self->f = smallBoolF;
146 
147  self->value = NULL;
148 }
149 
151 
152  f->free = freeSmallBool;
156  f->smash = smashSmallBool;
157  f->finish = finishSmallBool;
158  f->help = helpSmallBool;
159  f->get = getSmallBool;
160  f->set = setSmallBool;
161  f->setDouble = setDoubleSmallBool;
162  f->setInt64 = setInt64SmallBool;
163  f->setInt32 = setInt32SmallBool;
164  f->setUint32 = setUint32SmallBool;
165  f->setUint64 = setUint64SmallBool;
166  f->setS = setSSmallBool;
167  f->setSmallBool = setSmallBoolSmallBool;
168  f->setSmallDouble = setSmallDoubleSmallBool;
169  f->setSmallInt = setSmallIntSmallBool;
170  f->setSmallJson = setSmallJsonSmallBool;
171  f->setSmallString = setSmallStringSmallBool;
172  f->getP = getPSmallBool;
173  f->equalChar = equalSmallBoolChar;
174  f->equalBase = equalSmallBoolBase;
175  f->equalBool = equalSmallBoolBool;
176  f->equalDouble = equalSmallBoolDouble;
177  f->equalInt64 = equalSmallBoolInt64;
178  f->equalInt32 = equalSmallBoolInt32;
179  f->equalUint32 = equalSmallBoolUint32;
180  f->equalUint64 = equalSmallBoolUint64;
181  f->equal = equalSmallBool;
182  f->equalSmallBytes = equalSmallBoolSmallBytes;
183  f->equalSmallDouble = equalSmallBoolSmallDouble;
184  f->equalSmallInt = equalSmallBoolSmallInt;
185  f->equalSmallJson = equalSmallBoolSmallJson;
186  f->equalSmallString = equalSmallBoolSmallString;
187  f->readFile = readFileSmallBool;
188  f->readFileSmallJson = readFileSmallJsonSmallBool;
189  f->readFileSmallString = readFileSmallStringSmallBool;
190  f->readStream = readStreamSmallBool;
191  f->writeFile = writeFileSmallBool;
192  f->writeFileSmallJson = writeFileSmallJsonSmallBool;
193  f->writeFileSmallString = writeFileSmallStringSmallBool;
194  f->writeStream = writeStreamSmallBool;
195  f->appendFile = appendFileSmallBool;
196  f->appendFileSmallString = appendFileSmallStringSmallBool;
197 }
198 
200 
201  if (self) {
202  #if (recycleContainers)
203  initAllocateRecycle(smallBoolt);
204  #else
205  isError(*self, malloc(sizeof(smallBoolt)))
206  return;
207  #endif
208  // recycleContainers
209  if (*self) {
210  initiateSmallBool(*self);
211  if (!(*self)->f) {
212  finishSmallBool(self);
213 }
214  }
215  }
216  }
217 
219 
220  #if (recycleContainers)
221  finalizeRecycle
222  #endif
223  // recycleContainers
224 }
225 
226 void finalizeSmallBool(void) {
227 
228  if (smallBoolF) {
229  free(smallBoolF);
230  smallBoolF = NULL;
231  }
233 }
234 
236  smallBoolt *r = NULL;
237 
239  if (!r) {
240  return(NULL);
241  }
242 
243  r->value = allocSBool(value);
244  return(r);
245 }
246 
248 
249  terminateO(*val);
250 }
251 
253 
254  freeO(val);
255 }
256 
258 
259  freeO(*val);
260 }
261 
263 
264  finishO(*val);
265 }
266 
267 internal void freeSmallBool(smallBoolt *self) {
268 
269  if (self->value) {
270  free(self->value);
271  self->value = NULL;
272  }
273  return;
274 }
275 
276 internal void terminateSmallBool(smallBoolt **self) {
277 
278  freeSmallBool(*self);
279  finishSmallBool(self);
280 }
281 
282 
283 internal char* toStringSmallBool(smallBoolt *self) {
284 
285  if (!self->value) {
286  return(NULL);
287  }
288  if (self->value->value) {
289  return(strdup("true"));
290  }
291  else {
292  return(strdup("false"));
293 }
294  }
295 
297 
299  if (!dup) {
300  return(NULL);
301  }
302  if (self->value) {
303  dup->value = allocSBool(self->value->value);
304  }
305  return(dup);
306 }
307 
308 internal void smashSmallBool(smallBoolt **self) {
309 
310  finishSmallBool(self);
311 }
312 
313 #if (NFreeStackCheck)
314 internal void finishSmallBool(smallBoolt **self) {
315 
316  register u64 rsp asm("rsp");
317  if ((u64)*self > rsp) {
318  logW("Probably trying to free a smallBool on stack: "BLD PRIx64 RST" sp: "BLD PRIx64 RST, *self, rsp);
319  logBtrace;
320  }
321  else {
322  #if (recycleContainers)
323  finishRecycle
324  #else
325  free(*self);
326  #endif
327  // recycleContainers
328  *self = NULL;
329 }
330  }
331 
332 #else
333 // #if NFreeStackCheck
334 internal void finishSmallBool(smallBoolt **self) {
335 
336  #if (recycleContainers)
337  finishRecycle
338  #else
339  free(*self);
340  #endif
341  // recycleContainers
342  *self = NULL;
343 }
344 
345 #endif
346 // #if NFreeStackCheck
347 
348 internal const char* helpSmallBool(smallBoolt UNUSED *self) {
349 
350  return(helpTextSmallBool);
351 }
352 
353 internal bool getSmallBool(smallBoolt *self) {
354 
355  if (!self->value) {
356  return(false);
357  }
358  return(self->value->value);
359 }
360 
361 internal smallBoolt* setSmallBool(smallBoolt *self, bool value) {
362 
363  if (!self->value) {
364  isError(self->value, allocSBool(value)) return(NULL);
365  }
366  else {
367  self->value->value = value;
368  }
369  return(self);
370 }
371 
372 internal smallBoolt* setDoubleSmallBool(smallBoolt* self, double p2) {
373  bool value = false;;
374 
375  if (p2) {
376  value = true;
377  }
378 
379  if (!self->value) {
380  isError(self->value, allocSBool(value)) return(NULL);
381  }
382  else {
383  self->value->value = value;
384  }
385  return(self);
386 }
387 
388 internal smallBoolt* setInt64SmallBool(smallBoolt* self, int64_t p2) {
389  bool value = false;;
390 
391  if (p2) {
392  value = true;
393  }
394 
395  if (!self->value) {
396  isError(self->value, allocSBool(value)) return(NULL);
397  }
398  else {
399  self->value->value = value;
400  }
401  return(self);
402 }
403 
404 internal smallBoolt* setInt32SmallBool(smallBoolt* self, int32_t p2) {
405  bool value = false;;
406 
407  if (p2) {
408  value = true;
409  }
410 
411  if (!self->value) {
412  isError(self->value, allocSBool(value)) return(NULL);
413  }
414  else {
415  self->value->value = value;
416  }
417  return(self);
418 }
419 
420 internal smallBoolt* setUint32SmallBool(smallBoolt* self, uint32_t p2) {
421  bool value = false;;
422 
423  if (p2) {
424  value = true;
425  }
426 
427  if (!self->value) {
428  isError(self->value, allocSBool(value)) return(NULL);
429  }
430  else {
431  self->value->value = value;
432  }
433  return(self);
434 }
435 
436 internal smallBoolt* setUint64SmallBool(smallBoolt* self, uint64_t p2) {
437  bool value = false;;
438 
439  if (p2) {
440  value = true;
441  }
442 
443  if (!self->value) {
444  isError(self->value, allocSBool(value)) return(NULL);
445  }
446  else {
447  self->value->value = value;
448  }
449  return(self);
450 }
451 
452 internal smallBoolt* setSSmallBool(smallBoolt* self, const char* p2) {
453  bool value = false;;
454 
455  if (!p2) {
456  return(NULL);
457  }
458 
459  if (strEq(p2, "true") || strEq(p2, "TRUE")) {
460  value = true;
461  }
462 
463  if (!self->value) {
464  isError(self->value, allocSBool(value)) return(NULL);
465  }
466  else {
467  self->value->value = value;
468  }
469  return(self);
470 }
471 
473  bool value = false;;
474 
475  if (!p2) {
476  return(NULL);
477  }
478 
479  value = p2->f->get(p2);
480 
481  if (!self->value) {
482  isError(self->value, allocSBool(value)) return(NULL);
483  }
484  else {
485  self->value->value = value;
486  }
487  return(self);
488 }
489 
491  bool value = false;;
492 
493  if (!p2) {
494  return(NULL);
495  }
496 
497  double r = p2->f->get(p2);
498  if (r) {
499  value = true;
500  }
501 
502  if (!self->value) {
503  isError(self->value, allocSBool(value)) return(NULL);
504  }
505  else {
506  self->value->value = value;
507  }
508  return(self);
509 }
510 
512  bool value = false;;
513 
514  if (!p2) {
515  return(NULL);
516  }
517 
518  int64_t r = p2->f->get(p2);
519  if (r) {
520  value = true;
521  }
522 
523  if (!self->value) {
524  isError(self->value, allocSBool(value)) return(NULL);
525  }
526  else {
527  self->value->value = value;
528  }
529  return(self);
530 }
531 
533 
534  if (!p2) {
535  return(NULL);
536  }
537 
538  const char *type = getTopTypeO(p2);
539 
540  if (!type || eqS(type, "undefined") || eqS(type, "dict") || eqS(type, "array")) {
541  return(NULL);
542  }
543 
544  if (eqS(type, "bool")) {
545  return(setSmallBool(self, getTopBoolO(p2)));
546  }
547  else if (eqS(type, "double")) {
548  return(setDoubleSmallBool(self, getTopDoubleO(p2)));
549  }
550  else if (eqS(type, "int")) {
551  return(setInt64SmallBool(self, getTopIntO(p2)));
552  }
553  else if (eqS(type, "string")) {
554  return(setSSmallBool(self, getTopSO(p2)));
555  }
556 
557  return(self);
558 }
559 
561  bool value = false;;
562 
563  if (!p2) {
564  return(NULL);
565  }
566 
567  if (equalSO(p2, "true") || equalSO(p2, "TRUE")) {
568  value = true;
569  }
570 
571  if (!self->value) {
572  isError(self->value, allocSBool(value)) return(NULL);
573  }
574  else {
575  self->value->value = value;
576  }
577  return(self);
578 }
579 
580 internal bool* getPSmallBool(smallBoolt *self) {
581 
582  if (!self->value) {
583  return(NULL);
584  }
585  return(&(self->value->value));
586 }
587 
588 internal bool equalSmallBoolChar(smallBoolt* self, const char * p2) {
589 
590  if (!self->value || !p2) {
591  return(false);
592  }
593 
594  if (strEq(p2, "true") || strEq(p2, "TRUE")) {
595  return(self->value->value);
596  }
597  else if (strEq(p2, "false") || strEq(p2, "FALSE")) {
598  return(!self->value->value);
599  }
600  return(false);
601 }
602 
603 internal bool equalSmallBoolBase(smallBoolt* self, baset* p2) {
604 
605  if (!self->value || !p2) {
606  return(false);
607  }
608 
609  char *s = toStringO(p2);
610 
611  if (strEq(s, "true") || strEq(s, "TRUE")) {
612  free(s);
613  return(self->value->value);
614  }
615  else if (strEq(s, "false") || strEq(s, "FALSE")) {
616  free(s);
617  return(!self->value->value);
618  }
619  free(s);
620  return(false);
621 }
622 
623 internal bool equalSmallBoolBool(smallBoolt* self, bool p2) {
624 
625  if (!self->value) {
626  return(false);
627  }
628 
629  return(self->value->value == p2);;
630 }
631 
632 internal bool equalSmallBoolDouble(smallBoolt* self, double p2) {
633 
634  if (!self->value) {
635  return(false);
636  }
637 
638  return(self->value->value == p2);;
639 }
640 
641 internal bool equalSmallBoolInt64(smallBoolt* self, int64_t p2) {
642 
643  if (!self->value) {
644  return(false);
645  }
646 
647  return(self->value->value == p2);;
648 }
649 
650 internal bool equalSmallBoolInt32(smallBoolt* self, int32_t p2) {
651 
652  if (!self->value) {
653  return(false);
654  }
655 
656  return(self->value->value == p2);;
657 }
658 
659 internal bool equalSmallBoolUint32(smallBoolt* self, uint32_t p2) {
660 
661  if (!self->value) {
662  return(false);
663  }
664 
665  return(self->value->value == p2);;
666 }
667 
668 internal bool equalSmallBoolUint64(smallBoolt* self, uint64_t p2) {
669 
670  if (!self->value) {
671  return(false);
672  }
673 
674  return(self->value->value == p2);;
675 }
676 
677 internal bool equalSmallBool(smallBoolt* self, smallBoolt* p2) {
678 
679  if (!self->value || !p2 || !p2->value) {
680  return(false);
681  }
682 
683  return(self->value->value == p2->value->value);;
684 }
685 
687 
688  if (!self->value || !p2 || !p2->B) {
689  return(false);
690  }
691 
692  if (equalSO(p2, "true") || equalSO(p2, "TRUE")) {
693  return(self->value->value);
694  }
695  else if (equalSO(p2, "false") || equalSO(p2, "FALSE")) {
696  return(!self->value->value);
697  }
698  return(false);
699 }
700 
702 
703  if (!self->value || !p2 || !p2->value) {
704  return(false);
705  }
706 
707  return(self->value->value == p2->value->value);;
708 }
709 
710 internal bool equalSmallBoolSmallInt(smallBoolt* self, smallIntt* p2) {
711 
712  if (!self->value || !p2 || !p2->value) {
713  return(false);
714  }
715 
716  return(self->value->value == p2->value->value);;
717 }
718 
719 internal bool equalSmallBoolSmallJson(smallBoolt* self, smallJsont* p2) {
720 
721  if (!p2) {
722  return(false);
723  }
724 
725  // sanity checks
726  if (checkObjectTypes && !isOSmallJson(p2)) {
727  return(false);
728  }
729 
730  return(p2->f->equalSmallBool(p2, self));
731 }
732 
734 
735  if (!self->value || !p2 || !p2->data) {
736  return(false);
737  }
738 
739  char *s = sStringGetTiny(p2->data);
740  if (strEq(s, "true") || strEq(s, "TRUE")) {
741  return(self->value->value);
742  }
743  else if (strEq(s, "false") || strEq(s, "FALSE")) {
744  return(!self->value->value);
745  }
746  return(false);
747 }
748 
749 internal smallBoolt* readFileSmallBool(smallBoolt *self, const char *filePath) {
750  FILE *f = NULL;
751  size_t readStatus;
752 
753  // sanity checks
754  if (!filePath || isBlankS(filePath)) {
755  return(NULL);
756  }
757 
758  if (!self->value) {
759  isError(self->value, allocSBool(false)) return(NULL);
760  }
761 
762  f = fopen(filePath, "r");
763  if (!f) {
764  pFuncError
765  shEPrintfS("The path was: \"%s\"\n", filePath);
766  return(NULL);
767  }
768  readStatus = fread(&self->value->value, 1, sizeof(bool) , f);
769  fclose(f);
770 
771  if (readStatus != sizeof(bool)) {
772  pFuncError
773  shEPrintfS("The path was: \"%s\"\n", filePath);
774  return(NULL);
775  }
776 
777  return(self);
778 }
779 
781 
782  if (!filePath) {
783  return(NULL);
784  }
785 
786  if (checkObjectTypes && !isOSmallJson(filePath)) {
787  return(NULL);
788  }
789 
790  const char *type = getTopTypeO(filePath);
791 
792  if (!eqS(type,"string")) {
793  return(NULL);
794  }
795 
796  return(readFileSmallBool(self, getTopSO(filePath)));
797 }
798 
800 
801  if (!filePath) {
802  return(NULL);
803  }
804 
805  if (checkObjectTypes && !isOSmallString(filePath)) {
806  return(NULL);
807  }
808 
809  return(readFileSmallBool(self, ssGet(filePath)));
810 }
811 
812 internal smallBoolt* readStreamSmallBool(smallBoolt *self, FILE *fp) {
813  size_t readStatus;
814 
815  // sanity checks
816  if (!fp) {
817  return(NULL);
818  }
819 
820  if (!self->value) {
821  isError(self->value, allocSBool(false)) return(NULL);
822  }
823 
824  readStatus = fread(&self->value->value, 1, sizeof(bool) , fp);
825 
826  if (readStatus != sizeof(bool)) {
827  pFuncError
828  return(NULL);
829  }
830 
831  return(self);
832 }
833 
834 internal int writeFileSmallBool(smallBoolt *self, const char *filePath) {
835  FILE *f = NULL;
836  size_t writeStatus;
837 
838  // sanity checks
839  if (!filePath || isBlankS(filePath) || !self->value) {
840  return(0);
841  }
842 
843  f = fopen(filePath, "w");
844  if (!f) {
845  pFuncError
846  shEPrintfS("The path was: \"%s\"\n", filePath);
847  return(0);
848  }
849  writeStatus = fwrite(&self->value->value, 1, sizeof(bool) , f);
850  fclose(f);
851 
852  if (writeStatus != sizeof(bool)) {
853  pFuncError
854  shEPrintfS("The path was: \"%s\"\n", filePath);
855  return(0);
856  }
857 
858  return(1);
859 }
860 
861 internal int writeFileSmallJsonSmallBool(smallBoolt *self, smallJsont *filePath) {
862 
863  if (!filePath) {
864  return(0);
865  }
866 
867  if (checkObjectTypes && !isOSmallJson(filePath)) {
868  return(0);
869  }
870 
871  const char *type = getTopTypeO(filePath);
872 
873  if (!eqS(type,"string")) {
874  return(0);
875  }
876 
877  return(writeFileSmallBool(self, getTopSO(filePath)));
878 }
879 
880 internal int writeFileSmallStringSmallBool(smallBoolt *self, smallStringt *filePath) {
881 
882  if (!filePath) {
883  return(0);
884  }
885 
886  if (checkObjectTypes && !isOSmallString(filePath)) {
887  return(0);
888  }
889 
890  return(writeFileSmallBool(self, ssGet(filePath)));
891 }
892 
893 internal int writeStreamSmallBool(smallBoolt *self, FILE *fp) {
894  size_t writeStatus;
895 
896  // sanity checks
897  if (!fp || !self->value) {
898  return(0);
899  }
900 
901  writeStatus = fwrite(&self->value->value, 1, sizeof(bool) , fp);
902 
903  if (writeStatus != sizeof(bool)) {
904  pFuncError
905  return(0);
906  }
907 
908  return(1);
909 }
910 
911 internal int appendFileSmallBool(smallBoolt *self, const char *filePath) {
912  FILE *f = NULL;
913  size_t writeStatus;
914 
915  // sanity checks
916  if (!filePath || isBlankS(filePath) || !self->value) {
917  return(0);
918  }
919 
920  f = fopen(filePath, "a");
921  if (!f) {
922  pFuncError
923  shEPrintfS("The path was: \"%s\"\n", filePath);
924  return(0);
925  }
926  writeStatus = fwrite(&self->value->value, 1, sizeof(bool) , f);
927  fclose(f);
928 
929  if (writeStatus != sizeof(bool)) {
930  pFuncError
931  shEPrintfS("The path was: \"%s\"\n", filePath);
932  return(0);
933  }
934 
935  return(1);
936 }
937 
939 
940  if (!filePath) {
941  return(0);
942  }
943  // TODO check if filePath is really a smallString
944  return(appendFileSmallBool(self, ssGet(filePath)));
945 }
946 
947 
948 
950 
951  return(self->f->duplicate(self));
952 }
953 
954 void freeSmallBoolG (smallBoolt *self) {self->f->free(self);}
955 
956 bool getBoolSmallBoolG (smallBoolt *self, bool retType UNUSED, int64_t index UNUSED) {
957 
958  return(self->f->get(self));
959 }
960 
961 bool* getBoolPSmallBoolG (smallBoolt *self, bool* retType UNUSED, int64_t index UNUSED) {
962 
963  return(self->f->getP(self));
964 }
965 
967 
968  return(self->f->set(self, p2));
969 }
970 
972 
973  return(self->f->setDouble(self, p2));
974 }
975 
977 
978  return(self->f->setInt64(self, p2));
979 }
980 
982 
983  return(self->f->setInt32(self, p2));
984 }
985 
987 
988  return(self->f->setUint32(self, p2));
989 }
990 
992 
993  return(self->f->setUint64(self, p2));
994 }
995 
996 smallBoolt* setSSmallBoolG(smallBoolt* self, const char* p2) {
997 
998  return(self->f->setS(self, p2));
999 }
1000 
1002 
1003  return(self->f->setSmallBool(self, p2));
1004 }
1005 
1007 
1008  return(self->f->setSmallDouble(self, p2));
1009 }
1010 
1012 
1013  return(self->f->setSmallInt(self, p2));
1014 }
1015 
1017 
1018  return(self->f->setSmallJson(self, p2));
1019 }
1020 
1022 
1023  return(self->f->setSmallString(self, p2));
1024 }
1025 
1026 
1027 bool equalSmallBoolCharG(smallBoolt* self, const char * p2) {
1028 
1029  return(self->f->equalChar(self, p2));
1030 }
1031 
1033 
1034  return(self->f->equalBase(self, p2));
1035 }
1036 
1037 bool equalSmallBoolBoolG(smallBoolt* self, bool p2) {
1038 
1039  return(self->f->equalBool(self, p2));
1040 }
1041 
1042 bool equalSmallBoolDoubleG(smallBoolt* self, double p2) {
1043 
1044  return(self->f->equalDouble(self, p2));
1045 }
1046 
1047 bool equalSmallBoolInt64G(smallBoolt* self, int64_t p2) {
1048 
1049  return(self->f->equalInt64(self, p2));
1050 }
1051 
1052 bool equalSmallBoolInt32G(smallBoolt* self, int32_t p2) {
1053 
1054  return(self->f->equalInt32(self, p2));
1055 }
1056 
1057 bool equalSmallBoolUint32G(smallBoolt* self, uint32_t p2) {
1058 
1059  return(self->f->equalUint32(self, p2));
1060 }
1061 
1062 bool equalSmallBoolUint64G(smallBoolt* self, uint64_t p2) {
1063 
1064  return(self->f->equalUint64(self, p2));
1065 }
1066 
1068 
1069  return(self->f->equal(self, p2));
1070 }
1071 
1073 
1074  return(self->f->equalSmallBytes(self, p2));
1075 }
1076 
1078 
1079  return(self->f->equalSmallDouble(self, p2));
1080 }
1081 
1083 
1084  return(self->f->equalSmallInt(self, p2));
1085 }
1086 
1088 
1089  return(self->f->equalSmallJson(self, p2));
1090 }
1091 
1093 
1094  return(self->f->equalSmallString(self, p2));
1095 }
1096 
1097 smallBoolt* readFileSmallBoolG (smallBoolt *self, const char *filePath) {
1098 
1099  return(self->f->readFile(self, filePath));
1100 }
1101 
1103 
1104  return(self->f->readFileSmallJson(self,filePath));
1105 }
1106 
1108 
1109  return(self->f->readFileSmallString(self,filePath));
1110 }
1111 
1113 
1114  return(self->f->readStream(self, fp));
1115 }
1116 
1117 int writeFileSmallBoolG (smallBoolt *self, const char *filePath) {
1118 
1119  return(self->f->writeFile(self, filePath));
1120 }
1121 
1123 
1124  return(self->f->writeFileSmallJson(self,filePath));
1125 }
1126 
1128 
1129  return(self->f->writeFileSmallString(self,filePath));
1130 }
1131 
1133 
1134  return(self->f->writeStream(self, fp));
1135 }
1136 
1137 int appendFileSmallBoolFG (smallBoolt *self, const char *filePath) {
1138 
1139  return(self->f->appendFile(self, filePath));
1140 }
1141 
1143 
1144  return(self->f->appendFileSmallString(self,filePath));
1145 }
1146 
#define getTopDoubleO(self)
char * s
internal void terminateSmallBool(smallBoolt **self)
#define getTopBoolO(self)
bool eqS(const char *string1, const char *string2)
string Equal compare string1 to string2
Definition: libsheepy.c:9067
bool isBlankS(const char *string)
is Blank String
Definition: libsheepy.c:50246
smallBoolt * readFileSmallJsonSmallBoolG(smallBoolt *self, smallJsont *filePath)
#define getTopSO(self)
internal int appendFileSmallBool(smallBoolt *self, const char *filePath)
internal bool * getPSmallBool(smallBoolt *self)
void cleanUpSmallBoolFreeG(smallBoolt **val)
internal smallBoolt * setInt32SmallBool(smallBoolt *self, int32_t p2)
free(s)
int writeFileSmallStringSmallBoolG(smallBoolt *self, smallStringt *filePath)
#define ssGet(obj)
get a pointer to the string in the smallString object
void registerMethodsSmallBool(smallBoolFunctionst *f)
#define RST
reset for color function
Definition: libsheepy.h:763
smallBoolt * setSmallBoolG(smallBoolt *self, bool p2)
internal smallBoolt * setSmallBool(smallBoolt *self, bool value)
internal bool equalSmallBoolSmallString(smallBoolt *self, smallStringt *p2)
#define getTopIntO(self)
smallBoolt * allocSmallBool(bool value)
bool equalSmallBoolInt32G(smallBoolt *self, int32_t p2)
internal char * toStringSmallBool(smallBoolt *self)
#define u64
Definition: libsheepy.h:448
int appendFileSmallStringSmallBoolG(smallBoolt *self, smallStringt *filePath)
internal smallBoolt * setSSmallBool(smallBoolt *self, const char *p2)
internal smallBoolt * setSmallBoolSmallBool(smallBoolt *self, smallBoolt *p2)
#define helpTextSmallBool
help text for this class It is public declaration so that child classes can add their help text easil...
internal bool equalSmallBoolInt64(smallBoolt *self, int64_t p2)
#define pFuncError
print function name and system error
Definition: libsheepy.h:306
bool equalSmallBoolFG(smallBoolt *self, smallBoolt *p2)
internal bool equalSmallBoolBool(smallBoolt *self, bool p2)
internal smallBoolt * setUint32SmallBool(smallBoolt *self, uint32_t p2)
terminateSmallBoolFt terminate
internal bool equalSmallBoolChar(smallBoolt *self, const char *p2)
#define createAllocateSmallBool(obj)
internal const char * helpSmallBool(smallBoolt UNUSED *self)
#define isError(assigned, left)
is Assigment Error catch error when assigned is false, 0 or NULL after being assigned with left ...
Definition: libsheepy.h:386
bool equalSmallBoolBaseG(smallBoolt *self, baset *p2)
bool equalSmallBoolSmallDoubleG(smallBoolt *self, smallDoublet *p2)
bool * getBoolPSmallBoolG(smallBoolt *self, bool *retType UNUSED, int64_t index UNUSED)
void cleanUpSmallBoolFreeLocalG(smallBoolt *val)
internal bool getSmallBool(smallBoolt *self)
char * sStringGetTiny(sStringt *string)
get string in a small string object
internal smallBoolt * readFileSmallJsonSmallBool(smallBoolt *self, smallJsont *filePath)
sBoolt * value
bool value
internal int writeFileSmallStringSmallBool(smallBoolt *self, smallStringt *filePath)
internal int writeFileSmallBool(smallBoolt *self, const char *filePath)
smallBoolt * setUint64SmallBoolG(smallBoolt *self, uint64_t p2)
bool getBoolSmallBoolG(smallBoolt *self, bool retType UNUSED, int64_t index UNUSED)
#define getTopTypeO(self)
#define isOSmallJson(obj)
test if obj type is smallJson
internal smallBoolt * readStreamSmallBool(smallBoolt *self, FILE *fp)
internal bool equalSmallBoolSmallInt(smallBoolt *self, smallIntt *p2)
internal smallBoolt * setSmallDoubleSmallBool(smallBoolt *self, smallDoublet *p2)
#define terminateO(obj)
free buffers and obj itself
internal smallBoolt * setSmallIntSmallBool(smallBoolt *self, smallIntt *p2)
internal bool equalSmallBoolUint32(smallBoolt *self, uint32_t p2)
int writeFileSmallBoolG(smallBoolt *self, const char *filePath)
internal void smashSmallBool(smallBoolt **self)
#define logBtrace
Definition: libsheepy.h:3249
bool equalSmallBoolSmallIntG(smallBoolt *self, smallIntt *p2)
smallBoolt * readFileSmallStringSmallBoolG(smallBoolt *self, smallStringt *filePath)
bool equalSmallBoolInt64G(smallBoolt *self, int64_t p2)
bool equalSmallBoolCharG(smallBoolt *self, const char *p2)
END_TEST FILE * fp
smallBoolt * setSmallStringSmallBoolG(smallBoolt *self, smallStringt *p2)
internal bool equalSmallBoolDouble(smallBoolt *self, double p2)
void initiateSmallBool(smallBoolt *self)
smallBoolt * setUint32SmallBoolG(smallBoolt *self, uint32_t p2)
internal bool equalSmallBoolSmallDouble(smallBoolt *self, smallDoublet *p2)
internal bool equalSmallBoolUint64(smallBoolt *self, uint64_t p2)
internal smallBoolt * duplicateSmallBool(smallBoolt *self)
#define toStringO(obj)
convert data in obj to string
bool equalSmallBoolSmallBytesG(smallBoolt *self, smallBytest *p2)
smallBoolt * setSmallBoolSmallBoolG(smallBoolt *self, smallBoolt *p2)
void finalizeSmallBool(void)
smashSmallBoolFt smash
internal smallBoolt * readFileSmallStringSmallBool(smallBoolt *self, smallStringt *filePath)
void initiateAllocateSmallBool(smallBoolt **self)
toStringSmallBoolFt toString
smallBoolt * readFileSmallBoolG(smallBoolt *self, const char *filePath)
int writeFileSmallJsonSmallBoolG(smallBoolt *self, smallJsont *filePath)
bool equalSmallBoolDoubleG(smallBoolt *self, double p2)
internal int appendFileSmallStringSmallBool(smallBoolt *self, smallStringt *filePath)
fclose(fp)
bool equalSmallBoolSmallJsonG(smallBoolt *self, smallJsont *p2)
int64_t value
internal void finishSmallBool(smallBoolt **self)
#define equalSO(self, string)
smallBoolt * setSmallIntSmallBoolG(smallBoolt *self, smallIntt *p2)
#define BLD
bold for color function
Definition: libsheepy.h:765
internal bool equalSmallBoolInt32(smallBoolt *self, int32_t p2)
void cleanUpSmallBoolFinishG(smallBoolt **val)
internal void freeSmallBool(smallBoolt *self)
#define strEq
Definition: libsheepy.h:2018
internal smallBoolt * setUint64SmallBool(smallBoolt *self, uint64_t p2)
in value value
internal smallBoolt * setSmallJsonSmallBool(smallBoolt *self, smallJsont *p2)
smallBoolt * setInt64SmallBoolG(smallBoolt *self, int64_t p2)
finishSmallBoolFt finish
smallBoolt * setDoubleSmallBoolG(smallBoolt *self, double p2)
double value
smallBoolt * setSSmallBoolG(smallBoolt *self, const char *p2)
internal smallBoolt * setDoubleSmallBool(smallBoolt *self, double p2)
internal bool equalSmallBoolBase(smallBoolt *self, baset *p2)
smallBoolt * setSmallJsonSmallBoolG(smallBoolt *self, smallJsont *p2)
int writeStreamSmallBoolG(smallBoolt *self, FILE *fp)
internal bool equalSmallBoolSmallBytes(smallBoolt *self, smallBytest *p2)
smallJsonFunctionst * f
void finalizeRecycleSmallBool(void *arg UNUSED)
#define UNUSED
Definition: libsheepy.h:8195
smallBoolt * setInt32SmallBoolG(smallBoolt *self, int32_t p2)
sBoolt * allocSBool(bool value)
allocate a small bool
bool equalSmallBoolUint64G(smallBoolt *self, uint64_t p2)
smallBoolt * duplicateSmallBoolG(smallBoolt *self)
smallBoolt * setSmallDoubleSmallBoolG(smallBoolt *self, smallDoublet *p2)
void freeSmallBoolG(smallBoolt *self)
internal int writeFileSmallJsonSmallBool(smallBoolt *self, smallJsont *filePath)
internal int writeStreamSmallBool(smallBoolt *self, FILE *fp)
smallBoolFunctionst * f
bool r
#define logW(...)
Definition: libsheepy.h:1061
void shEPrintfS(const char *fmt,...)
sheepy Error printf String print with logE
Definition: libsheepy.c:6589
internal bool equalSmallBool(smallBoolt *self, smallBoolt *p2)
base class
#define freeO(obj)
free buffers in obj
smallIntFunctionst * f
void cleanUpSmallBoolTerminateG(smallBoolt **val)
bool equalSmallBoolSmallStringG(smallBoolt *self, smallStringt *p2)
bool value
internal smallBoolt * setInt64SmallBool(smallBoolt *self, int64_t p2)
bool equalSmallBoolUint32G(smallBoolt *self, uint32_t p2)
internal smallBoolt * readFileSmallBool(smallBoolt *self, const char *filePath)
internal bool equalSmallBoolSmallJson(smallBoolt *self, smallJsont *p2)
#define finishO(obj)
free container only
duplicateSmallBoolFt duplicate
smallDoubleFunctionst * f
int appendFileSmallBoolFG(smallBoolt *self, const char *filePath)
bool equalSmallBoolBoolG(smallBoolt *self, bool p2)
internal smallBoolt * setSmallStringSmallBool(smallBoolt *self, smallStringt *p2)
smallBoolt * readStreamSmallBoolG(smallBoolt *self, FILE *fp)
#define isOSmallString(obj)
test if obj type is smallString