Bladeren bron

cmData.h/c : More changes - that won't fully compile.

master
kpl 10 jaren geleden
bovenliggende
commit
c809469b62
2 gewijzigde bestanden met toevoegingen van 269 en 2055 verwijderingen
  1. 261
    1709
      cmData.c
  2. 8
    346
      cmData.h

+ 261
- 1709
cmData.c
Diff onderdrukt omdat het te groot bestand
Bestand weergeven


+ 8
- 346
cmData.h Bestand weergeven

@@ -75,7 +75,8 @@ extern "C" {
75 75
     kFloatDtId,      // 10 
76 76
     kDoubleDtId,     // 11 
77 77
     kStrDtId,        // 12 zero terminated string
78
-    kBlobDtId        // 13 application defined raw memory object
78
+    kBlobDtId,       // 13 application defined raw memory object
79
+    kStructDtId      // 14 node is a pair,list, or recd
79 80
   } cmDataTypeId_t;
80 81
 
81 82
 
@@ -425,341 +426,6 @@ extern "C" {
425 426
   cmData_t* cmDataInsertChild( cmData_t* parent, unsigned index, cmData_t* p );
426 427
 
427 428
 
428
-
429
-////////////////////////////////////////////////////////////////////////////////////////////////
430
-////////////////////////////////////////////////////////////////////////////////////////////////
431
-////////////////////////////////////////////////////////////////////////////////////////////////
432
-////////////////////////////////////////////////////////////////////////////////////////////////
433
-
434
-#ifdef NOT_DEF
435
-  typedef enum
436
-  {
437
-    kInvalidDtId,
438
-
439
-    kMinValDtId,
440
-
441
-    kNullDtId = kMinValDtId,
442
-    kUCharDtId,
443
-    kCharDtId,
444
-    kUShortDtId,
445
-    kShortDtId,
446
-    kUIntDtId,
447
-    kIntDtId,
448
-    kULongDtId,
449
-    kLongDtId,
450
-    kFloatDtId,
451
-    kDoubleDtId,
452
-
453
-    kStrDtId,
454
-    kConstStrDtId,
455
-    kMaxValDtId = kConstStrDtId,
456
-
457
-    kMinPtrDtId,
458
-    kUCharPtrDtId = kMinPtrDtId,  // cnt=array element count
459
-    kCharPtrDtId,
460
-    kUShortPtrDtId,
461
-    kShortPtrDtId,
462
-    kUIntPtrDtId,
463
-    kIntPtrDtId,
464
-    kULongPtrDtId,
465
-    kLongPtrDtId,
466
-    kFloatPtrDtId,
467
-    kDoublePtrDtId,
468
-    kVoidPtrDtId,
469
-    kMaxPtrDtId = kVoidPtrDtId,
470
-
471
-    kMinStructDtId,
472
-    kListDtId = kMinStructDtId, // children nodes are array elements, cnt=child count
473
-    kPairDtId,                   // key/value pairs, cnt=2, first child is key, second is value
474
-    kRecordDtId,                 // children nodes are pairs, cnt=pair count
475
-    kMaxStructDtId,
476
-
477
-    kOptArgDtFl = 0x80000000
478
-  } cmDataFmtId_t;
479
-
480
-  enum
481
-  {
482
-    kDynObjDtFl = 0x01,  // object was dynamically allocated
483
-    kDynPtrDtFl = 0x02   // ptr array was dynamically allocated
484
-  };
485
-
486
-  typedef struct cmData_str
487
-  {
488
-    cmDataFmtId_t      tid;       // data format id
489
-    unsigned           flags;     // 
490
-    struct cmData_str* parent;    // this childs parent
491
-    struct cmData_str* sibling;   // this childs left sibling
492
-    unsigned           cnt;       // array ele count
493
-
494
-    union
495
-    {
496
-      char              c;
497
-      unsigned char    uc;
498
-      short             s;
499
-      unsigned short   us;
500
-      int               i;
501
-      unsigned int     ui;
502
-      long              l;
503
-      unsigned long    ul;
504
-      float             f;
505
-      double            d;
506
-
507
-      cmChar_t*         z;
508
-      const cmChar_t*  cz;
509
-
510
-      void*             vp;
511
-
512
-      char*             cp;
513
-      unsigned char*   ucp;
514
-      short*            sp;
515
-      unsigned short*  usp;
516
-      int*              ip;
517
-      unsigned int*    uip;
518
-      long*             lp;
519
-      unsigned long*   ulp;
520
-      float*            fp;
521
-      double*           dp;
522
-
523
-
524
-      struct cmData_str* child; // first child (array,record,pair)
525
-    } u;
526
-  
527
-  } cmData_t;
528
-
529
-  typedef unsigned cmDtRC_t;
530
-
531
-  extern cmData_t cmDataNull;
532
-
533
-  bool cmDataIsValue(  const cmData_t* p );
534
-  bool cmDataIsPtr(    const cmData_t* p );
535
-  bool cmDataIsStruct( const cmData_t* p ); // is a pair,list or record
536
-
537
-
538
-  bool canConvertType( cmDataFmtId_t srcId, cmDataFmtId_t dstId );
539
-  bool willTruncate(   cmDataFmtId_t srcId, cmDataFmtId_t dstId );
540
-  bool canConvertObj(  const cmData_t* srcObj, cmData_t* dstObj );
541
-  bool willTruncateObj(const cmData_t* srcObj, cmData_t* dstObj );
542
-    
543
-  
544
-
545
-  // Get the value of an object without conversion.
546
-  // The data type id must match the return type or the
547
-  // conversion must be an automatic C conversion.
548
-  char            cmDataChar(      const cmData_t* p );
549
-  unsigned char   cmDataUChar(     const cmData_t* p );
550
-  short           cmDataShort(     const cmData_t* p );
551
-  unsigned short  cmDataUShort(    const cmData_t* p );
552
-  int             cmDataInt(       const cmData_t* p );
553
-  unsigned int    cmDataUInt(      const cmData_t* p );
554
-  long            cmDataLong(      const cmData_t* p );
555
-  unsigned long   cmDataULong(     const cmData_t* p );
556
-  float           cmDataFloat(     const cmData_t* p );
557
-  double          cmDataDouble(    const cmData_t* p );
558
-  cmChar_t*       cmDataStr(       const cmData_t* p );
559
-  const cmChar_t* cmDataConstStr(  const cmData_t* p );
560
-  void*           cmDataVoidPtr(   const cmData_t* p );
561
-  char*           cmDataCharPtr(   const cmData_t* p );
562
-  unsigned char*  cmDataUCharPtr(  const cmData_t* p );
563
-  short*          cmDataShortPtr(  const cmData_t* p );
564
-  unsigned short* cmDataUShortPtr( const cmData_t* p );
565
-  int*            cmDataIntPtr(    const cmData_t* p );
566
-  unsigned int*   cmDataUIntPtr(   const cmData_t* p );
567
-  long*           cmDataLongPtr(   const cmData_t* p );
568
-  unsigned long*  cmDataULongPtr(  const cmData_t* p );
569
-  float*          cmDataFloatPtr(  const cmData_t* p );
570
-  double*         cmDataDoublePtr( const cmData_t* p );
571
-
572
-
573
-  // Get the value of an object with conversion.
574
-  cmDtRC_t cmDataGetChar(      const cmData_t* p, char* v );
575
-  cmDtRC_t cmDataGetUChar(     const cmData_t* p, unsigned char* v );
576
-  cmDtRC_t cmDataGetShort(     const cmData_t* p, short* v );
577
-  cmDtRC_t cmDataGetUShort(    const cmData_t* p, unsigned short* v );
578
-  cmDtRC_t cmDataGetInt(       const cmData_t* p, int* v );
579
-  cmDtRC_t cmDataGetUInt(      const cmData_t* p, unsigned int* v );
580
-  cmDtRC_t cmDataGetLong(      const cmData_t* p, long* v );
581
-  cmDtRC_t cmDataGetULong(     const cmData_t* p, unsigned long* v );
582
-  cmDtRC_t cmDataGetFloat(     const cmData_t* p, float* v );
583
-  cmDtRC_t cmDataGetDouble(    const cmData_t* p, double* v );
584
-
585
-  // Returns the pointer - does not copy the data.
586
-  cmDtRC_t cmDataGetStr(       const cmData_t* p, char** v );
587
-  cmDtRC_t cmDataGetConstStr(  const cmData_t* p, const char** v );
588
-  cmDtRC_t cmDataGetVoidPtr(   const cmData_t* p, void** v );
589
-  cmDtRC_t cmDataGetCharPtr(   const cmData_t* p, char** v );
590
-  cmDtRC_t cmDataGetUCharPtr(  const cmData_t* p, unsigned char** v );
591
-  cmDtRC_t cmDataGetShortPtr(  const cmData_t* p, short** v );
592
-  cmDtRC_t cmDataGetUShortPtr( const cmData_t* p, unsigned short** v );
593
-  cmDtRC_t cmDataGetIntPtr(    const cmData_t* p, int** v );
594
-  cmDtRC_t cmDataGetUIntPtr(   const cmData_t* p, unsigned int** v );
595
-  cmDtRC_t cmDataGetLongPtr(   const cmData_t* p, long** v );
596
-  cmDtRC_t cmDataGetULongPtr(  const cmData_t* p, unsigned long** v );
597
-  cmDtRC_t cmDataGetFloatPtr(  const cmData_t* p, float** v );
598
-  cmDtRC_t cmDataGetDoublePtr( const cmData_t* p, double** v );
599
-
600
-
601
-  // Set the value and type of an existing scalar object. 
602
-  // These functions begin by releasing any resources held by *p
603
-  // prior to resetting the type and value of the object.
604
-  cmData_t* cmDataSetNull(      cmData_t* p );
605
-  cmData_t* cmDataSetChar(      cmData_t* p, char v );
606
-  cmData_t* cmDataSetUChar(     cmData_t* p, unsigned char v );
607
-  cmData_t* cmDataSetShort(     cmData_t* p, short v );
608
-  cmData_t* cmDataSetUShort(    cmData_t* p, unsigned short v );
609
-  cmData_t* cmDataSetInt(       cmData_t* p, int v );
610
-  cmData_t* cmDataSetUInt(      cmData_t* p, unsigned int v );
611
-  cmData_t* cmDataSetLong(      cmData_t* p, long v );
612
-  cmData_t* cmDataSetULong(     cmData_t* p, unsigned long v );
613
-  cmData_t* cmDataSetFloat(     cmData_t* p, float v );
614
-  cmData_t* cmDataSetDouble(    cmData_t* p, double v );
615
-  cmData_t* cmDataSetStr(       cmData_t* p, cmChar_t* s );
616
-  cmData_t* cmDataSetConstStr(  cmData_t* p, const cmChar_t* s );
617
-
618
-  // Set the type and value of an existing data object to an external array.
619
-  // These functions begin by releasing any resources help by *p.
620
-  // The array pointed to by 'vp' is not copied or duplicated.
621
-  // 'vp' is simply assigned as the data space for the object and therefore must remain
622
-  // valid for the life of the object.
623
-  cmData_t* cmDataSetVoidPtr(   cmData_t* p, void* vp,           unsigned cnt );
624
-  cmData_t* cmDataSetCharPtr(   cmData_t* p, char* vp,           unsigned cnt );
625
-  cmData_t* cmDataSetUCharPtr(  cmData_t* p, unsigned char* vp,  unsigned cnt );
626
-  cmData_t* cmDataSetShortPtr(  cmData_t* p, short* vp,          unsigned cnt );
627
-  cmData_t* cmDataSetUShortPtr( cmData_t* p, unsigned short* vp, unsigned cnt );
628
-  cmData_t* cmDataSetIntPtr(    cmData_t* p, int* vp,            unsigned cnt );
629
-  cmData_t* cmDataSetUIntPtr(   cmData_t* p, unsigned int* vp,   unsigned cnt );
630
-  cmData_t* cmDataSetLongPtr(   cmData_t* p, long* vp,           unsigned cnt );
631
-  cmData_t* cmDataSetULongPtr(  cmData_t* p, unsigned long* vp,  unsigned cnt );
632
-  cmData_t* cmDataSetFloatPtr(  cmData_t* p, float* vp,          unsigned cnt );
633
-  cmData_t* cmDataSetDoublePtr( cmData_t* p, double* vp,         unsigned cnt );
634
-
635
-  // Set the value of an existing array based data object. 
636
-  // These functions begin by releasing any resources help by *p
637
-  // and then dynamically allocate the internal array and copy 
638
-  // the array data into it.
639
-  cmData_t* cmDataSetStrAllocN(      cmData_t* p, const cmChar_t* s, unsigned charCnt );
640
-  cmData_t* cmDataSetStrAlloc(       cmData_t* p, const cmChar_t* s );
641
-  cmData_t* cmDataSetConstStrAllocN( cmData_t* p, const cmChar_t* s, unsigned charCnt );
642
-  cmData_t* cmDataSetConstStrAlloc(  cmData_t* p, const cmChar_t* s );
643
-  cmData_t* cmDataSetVoidAllocPtr(   cmData_t* p, const void* vp,           unsigned cnt );
644
-  cmData_t* cmDataSetCharAllocPtr(   cmData_t* p, const char* vp,           unsigned cnt );
645
-  cmData_t* cmDataSetUCharAllocPtr(  cmData_t* p, const unsigned char* vp,  unsigned cnt );
646
-  cmData_t* cmDataSetShortAllocPtr(  cmData_t* p, const short* vp,          unsigned cnt );
647
-  cmData_t* cmDataSetUShortAllocPtr( cmData_t* p, const unsigned short* vp, unsigned cnt );
648
-  cmData_t* cmDataSetIntAllocPtr(    cmData_t* p, const int* vp,            unsigned cnt );
649
-  cmData_t* cmDataSetUIntAllocPtr(   cmData_t* p, const unsigned int* vp,   unsigned cnt );
650
-  cmData_t* cmDataSetLongAllocPtr(   cmData_t* p, const long* vp,           unsigned cnt );
651
-  cmData_t* cmDataSetULongAllocPtr(  cmData_t* p, const unsigned long* vp,  unsigned cnt );
652
-  cmData_t* cmDataSetFloatAllocPtr(  cmData_t* p, const float* vp,          unsigned cnt );
653
-  cmData_t* cmDataSetDoubleAllocPtr( cmData_t* p, const double* vp,         unsigned cnt );
654
-  
655
-
656
-  // Dynamically allocate a data object and set it's value.
657
-  cmData_t* cmDataAllocNull(   cmData_t* parent );
658
-  cmData_t* cmDataAllocChar(   cmData_t* parent, char v );
659
-  cmData_t* cmDataAllocUChar(  cmData_t* parent, unsigned char v );
660
-  cmData_t* cmDataAllocShort(  cmData_t* parent, short v );
661
-  cmData_t* cmDataAllocUShort( cmData_t* parent, unsigned short v );
662
-  cmData_t* cmDataAllocInt(    cmData_t* parent, int v );
663
-  cmData_t* cmDataAllocUInt(   cmData_t* parent, unsigned int v );
664
-  cmData_t* cmDataAllocLong(   cmData_t* parent, long v );
665
-  cmData_t* cmDataAllocULong(  cmData_t* parent, unsigned long v );
666
-  cmData_t* cmDataAllocFloat(  cmData_t* parent, float v );
667
-  cmData_t* cmDataAllocDouble( cmData_t* parent, double v );
668
-
669
-  // Dynamically allocate a data object and set its array value to an external
670
-  // array. v[cnt] is assigned as the internal data space for the object and 
671
-  // therefore must remain valid for the life of the object. 
672
-  // See the cmDataXXXAlocPtr() for equivalent functions which dynamically 
673
-  // allocate the intenal data space.
674
-  cmData_t* cmDataAllocStr(       cmData_t* parent, cmChar_t* str );
675
-  cmData_t* cmDataAllocConstStr(  cmData_t* parent, const cmChar_t* str );
676
-  cmData_t* cmDataAllocCharPtr(   cmData_t* parent, char* v,           unsigned cnt );
677
-  cmData_t* cmDataAllocUCharPtr(  cmData_t* parent, unsigned char* v,  unsigned cnt );
678
-  cmData_t* cmDataAllocShortPtr(  cmData_t* parent, short* v,          unsigned cnt );
679
-  cmData_t* cmDataAllocUShortPtr( cmData_t* parent, unsigned short* v, unsigned cnt );
680
-  cmData_t* cmDataAllocIntPtr(    cmData_t* parent, int* v,            unsigned cnt );
681
-  cmData_t* cmDataAllocUIntPtr(   cmData_t* parent, unsigned int* v,   unsigned cnt );
682
-  cmData_t* cmDataAllocLongPtr(   cmData_t* parent, long* v,           unsigned cnt );
683
-  cmData_t* cmDataAllocULongPtr(  cmData_t* parent, unsigned long* v,  unsigned cnt );
684
-  cmData_t* cmDataAllocFloatPtr(  cmData_t* parent, float* v,          unsigned cnt );
685
-  cmData_t* cmDataAllocDoublePtr( cmData_t* parent, double* v,         unsigned cnt );
686
-  cmData_t* cmDataAllocVoidPtr(   cmData_t* parent, void* v,           unsigned cnt );
687
-
688
-
689
-  // Dynamically allocate a data object and its array value.  
690
-  // These functions dynamically allocate the internal array data space
691
-  // and copy v[cnt] into it.
692
-  cmData_t* cmDataStrAlloc(       cmData_t* parent, cmChar_t* str );
693
-  cmData_t* cmDataConstStrAlloc(  cmData_t* parent, const cmChar_t* str );
694
-  cmData_t* cmDataConstStrAllocN( cmData_t* parent, const cmChar_t* str, unsigned charCnt );
695
-  cmData_t* cmDataCharAllocPtr(   cmData_t* parent, const char* v,           unsigned cnt );
696
-  cmData_t* cmDataUCharAllocPtr(  cmData_t* parent, const unsigned char* v,  unsigned cnt );
697
-  cmData_t* cmDataShortAllocPtr(  cmData_t* parent, const short* v,          unsigned cnt );
698
-  cmData_t* cmDataUShortAllocPtr( cmData_t* parent, const unsigned short* v, unsigned cnt );
699
-  cmData_t* cmDataIntAllocPtr(    cmData_t* parent, const int* v,            unsigned cnt );
700
-  cmData_t* cmDataUIntAllocPtr(   cmData_t* parent, const unsigned int* v,   unsigned cnt );
701
-  cmData_t* cmDataLongAllocPtr(   cmData_t* parent, const long* v,           unsigned cnt );
702
-  cmData_t* cmDataULongAllocPtr(  cmData_t* parent, const unsigned long* v,  unsigned cnt );
703
-  cmData_t* cmDataFloatAllocPtr(  cmData_t* parent, const float* v,          unsigned cnt );
704
-  cmData_t* cmDataDoubleAllocPtr( cmData_t* parent, const double* v,         unsigned cnt );
705
-  cmData_t* cmDataVoidAllocPtr(   cmData_t* parent, const void* v,           unsigned cnt );
706
-
707
-  //----------------------------------------------------------------------------
708
-  // Structure related functions
709
-  //
710
-
711
-  // Release an object and any resources held by it.
712
-  // Note the this function does not unlink the object
713
-  // from it's parent.  Use cmDataUnlinkAndFree()
714
-  // to remove a object from it's parent list prior
715
-  // to releasing it.
716
-  void      cmDataFree( cmData_t* p );
717
-
718
-  // Unlink 'p' from its parents and siblings.
719
-  // Asserts if parent is not a structure. 
720
-  // Returns 'p'.
721
-  cmData_t* cmDataUnlink( cmData_t* p );
722
-
723
-  // Wrapper function to cmDataUnlink() and cmDataFree().
724
-  void      cmDataUnlinkAndFree( cmData_t* p );
725
-
726
-  // Replace the 'dst' node with the 'src' node and
727
-  // return 'src'.  This operation does not duplicate
728
-  // 'src' it simply links in 'src' at the location of
729
-  // 'dst' and then unlinks and free's 'dst'.
730
-  cmData_t* cmDataReplace( cmData_t* dst, cmData_t* src );
731
-
732
-  // Return the count of child nodes.
733
-  // 1. Array nodes have one child per array element.
734
-  // 2. List nodes have one child pair.
735
-  // 3. Pair nodes have two children.
736
-  // 4. Leaf nodes have 0 children.
737
-  unsigned  cmDataChildCount( const cmData_t* p );
738
-
739
-  // Returns the ith child of 'p'.
740
-  // Returns NULL if p has no children or index is invalid.
741
-  cmData_t* cmDataChild( cmData_t* p, unsigned index );
742
-
743
-  // Prepend 'p' to 'parents' child list.
744
-  // The source node 'p' is not duplicated  it is simply linked in.
745
-  // 'p' is automatically unlinked prior to being prepended.
746
-  // Returns 'p'. 
747
-  cmData_t* cmDataPrependChild(cmData_t* parent, cmData_t* p );
748
-
749
-  // Append 'p' to the end of 'parent' child list.
750
-  // The source node 'p' is not duplicated it is simply linked in.
751
-  // 'p' is automatically unlinked prior to being appended.
752
-  // Returns 'p'. 
753
-  cmData_t* cmDataAppendChild( cmData_t* parent, cmData_t* p );
754
-
755
-  // Insert 'p' at index.  Index must be in the range: 
756
-  // 0 to cmDataChildCount(parent).
757
-  // The source node 'p' is not duplicated it is simply linked in.
758
-  // 'p' is automatically unlinked prior to being inserted.
759
-  // Returns 'p'.
760
-  cmData_t* cmDataInsertChild( cmData_t* parent, unsigned index, cmData_t* p );
761
-
762
-
763 429
   //----------------------------------------------------------------------------
764 430
   // Pair related functions
765 431
   //
@@ -814,15 +480,15 @@ extern "C" {
814 480
 
815 481
 
816 482
   // Var-args fmt:
817
-  // <typeId> <value> {<cnt>}
483
+  // <contId> {<typeId>} <value> {<cnt>}
818 484
   // scalar types: <value> is literal,<cnt>   is not included
819 485
   //     null has no <value> or <cnt>
820
-  // ptr    types: <value> is pointer,<cnt>   is element count
821
-  // struct types: <value> is cmData_t, <cnt> is not included
486
+  // array  types: <value> is pointer,<cnt>   is element count
487
+  // struct types: <value> is cmData_t, <typeId> and <cnt> is not included
822 488
   // Indicate the end of argument list by setting  <typeId> to kInvalidDtId. 
823 489
   // The memory for array based data types is dynamically allocated.
824
-  cmData_t* cmDataListAllocV(cmData_t* parent, va_list vl );
825
-  cmData_t* cmDataListAllocA(cmData_t* parent,  ... );
490
+  cmRC_t cmDataListAllocV(cmData_t* parent, cmData_t** ref, va_list vl );
491
+  cmRC_t  cmDataListAllocA(cmData_t* parent,  cmData_t** ref, ... );
826 492
   
827 493
   // Returns a ptr to 'ele'.
828 494
   cmData_t* cmDataListAppendEle( cmData_t* p, cmData_t* ele );
@@ -833,9 +499,6 @@ extern "C" {
833 499
   cmData_t* cmDataListInsertEle( cmData_t* p, unsigned index, cmData_t* ele );
834 500
   cmData_t* cmDataListInsertEleN(cmData_t* p, unsigned index, cmData_t* ele[], unsigned n );
835 501
  
836
-  cmData_t* cmDataListUnlink( cmData_t* p, unsigned index );
837
-  cmData_t* cmDataListFree(   cmData_t* p, unsigned index );
838
-
839 502
   //----------------------------------------------------------------------------
840 503
   // Record related functions
841 504
   //
@@ -866,7 +529,7 @@ extern "C" {
866 529
 
867 530
 
868 531
   // Var-args format:
869
-  // <label|id> <typeId>  <value> {<cnt>}
532
+  // <label|id> {<cid>} <typeId>  <value> {<cnt>}
870 533
   // scalar types: <value> is literal,<cnt> is not included
871 534
   // null   type: has no <value> or <cnt>
872 535
   // ptr    types: <value> is pointer,  <cnt> is element count
@@ -918,7 +581,6 @@ extern "C" {
918 581
   void     cmDataPrint( const cmData_t* p, cmRpt_t* rpt );
919 582
   
920 583
   void     cmDataTest( cmCtx_t* ctx );
921
-#endif
922 584
 
923 585
 
924 586
 #ifdef __cplusplus

Laden…
Annuleren
Opslaan