|
@@ -1730,7 +1730,7 @@ cmData_t* cmRecdAppendPair( cmData_t* p, cmData_t* pair )
|
1730
|
1730
|
}
|
1731
|
1731
|
|
1732
|
1732
|
|
1733
|
|
-cmDtRC_t _cmDataRecdParseV(cmData_t* parent, unsigned idFl, va_list vl )
|
|
1733
|
+cmDtRC_t _cmDataRecdParseInputV(cmData_t* parent, unsigned idFl, va_list vl )
|
1734
|
1734
|
{
|
1735
|
1735
|
assert( parent != NULL && parent->tid == kRecordDtId );
|
1736
|
1736
|
bool contFl = true;
|
|
@@ -1750,7 +1750,7 @@ cmDtRC_t _cmDataRecdParseV(cmData_t* parent, unsigned idFl, va_list vl )
|
1750
|
1750
|
label = va_arg(vl,const char*); // text field label identifier
|
1751
|
1751
|
|
1752
|
1752
|
// validate the field identifier
|
1753
|
|
- if( id==kInvalidDtId || label==NULL )
|
|
1753
|
+ if( id==kInvalidDtId && label==NULL )
|
1754
|
1754
|
break;
|
1755
|
1755
|
|
1756
|
1756
|
// parse the field data
|
|
@@ -1773,7 +1773,7 @@ cmDtRC_t _cmDataRecdParseV(cmData_t* parent, unsigned idFl, va_list vl )
|
1773
|
1773
|
cmData_t* cmDataRecdAllocLabelV( cmData_t* parent, va_list vl )
|
1774
|
1774
|
{
|
1775
|
1775
|
cmData_t* p = cmRecdAlloc(parent);
|
1776
|
|
- cmDtRC_t rc = _cmDataRecdParseV(p, false, vl );
|
|
1776
|
+ cmDtRC_t rc = _cmDataRecdParseInputV(p, false, vl );
|
1777
|
1777
|
if( rc != kOkDtRC )
|
1778
|
1778
|
{
|
1779
|
1779
|
cmDataFree(p);
|
|
@@ -1794,7 +1794,7 @@ cmData_t* cmDataRecdAllocLabelA( cmData_t* parent, ... )
|
1794
|
1794
|
cmData_t* cmDataRecdAllocIdV( cmData_t* parent, va_list vl )
|
1795
|
1795
|
{
|
1796
|
1796
|
cmData_t* p = cmRecdAlloc(parent);
|
1797
|
|
- cmDtRC_t rc = _cmDataRecdParseV(p, true, vl );
|
|
1797
|
+ cmDtRC_t rc = _cmDataRecdParseInputV(p, true, vl );
|
1798
|
1798
|
if( rc != kOkDtRC )
|
1799
|
1799
|
{
|
1800
|
1800
|
cmDataFree(p);
|
|
@@ -1812,6 +1812,177 @@ cmData_t* cmDataRecdAllocIdA( cmData_t* parent, ... )
|
1812
|
1812
|
return p;
|
1813
|
1813
|
}
|
1814
|
1814
|
|
|
1815
|
+cmDtRC_t _cmDataRecdParseV(cmData_t* p, bool idFl, cmErr_t* err, va_list vl )
|
|
1816
|
+{
|
|
1817
|
+ bool contFl = true;
|
|
1818
|
+ cmDtRC_t rc = kOkDtRC;
|
|
1819
|
+
|
|
1820
|
+ while( contFl )
|
|
1821
|
+ {
|
|
1822
|
+ unsigned id;
|
|
1823
|
+ const char* label;
|
|
1824
|
+
|
|
1825
|
+ // parse the field idenfier
|
|
1826
|
+ if( idFl )
|
|
1827
|
+ id = va_arg(vl,unsigned); // numeric field identifier
|
|
1828
|
+ else
|
|
1829
|
+ label = va_arg(vl,const char*); // text field label identifier
|
|
1830
|
+
|
|
1831
|
+ // validate the field identifier
|
|
1832
|
+ if( id==kInvalidDtId && label==NULL )
|
|
1833
|
+ break;
|
|
1834
|
+
|
|
1835
|
+ cmDataFmtId_t typeId = va_arg(vl,unsigned);
|
|
1836
|
+ void* v = va_arg(vl,void*);
|
|
1837
|
+ cmData_t* np = NULL;
|
|
1838
|
+
|
|
1839
|
+ if( idFl )
|
|
1840
|
+ np = cmDataRecdValueFromLabel( p, label );
|
|
1841
|
+ else
|
|
1842
|
+ np = cmDataRecdValueFromId( p, id );
|
|
1843
|
+
|
|
1844
|
+ switch(typeId)
|
|
1845
|
+ {
|
|
1846
|
+ case kNullDtId:
|
|
1847
|
+ break;
|
|
1848
|
+
|
|
1849
|
+ case kUCharDtId:
|
|
1850
|
+ *((unsigned char*)v) = cmDataGetUChar(np);
|
|
1851
|
+ break;
|
|
1852
|
+
|
|
1853
|
+ case kCharDtId:
|
|
1854
|
+ *((char*)v) = cmDataGetChar(np);
|
|
1855
|
+ break;
|
|
1856
|
+
|
|
1857
|
+ case kUShortDtId:
|
|
1858
|
+ *((unsigned short*)v) = cmDataGetUShort(np);
|
|
1859
|
+ break;
|
|
1860
|
+
|
|
1861
|
+ case kShortDtId:
|
|
1862
|
+ *((short*)v) = cmDataGetShort(np);
|
|
1863
|
+ break;
|
|
1864
|
+
|
|
1865
|
+ case kUIntDtId:
|
|
1866
|
+ *((unsigned int*)v) = cmDataGetUInt(np);
|
|
1867
|
+ break;
|
|
1868
|
+
|
|
1869
|
+ case kIntDtId:
|
|
1870
|
+ *((int*)v) = cmDataGetInt(np);
|
|
1871
|
+ break;
|
|
1872
|
+
|
|
1873
|
+ case kULongDtId:
|
|
1874
|
+ *((unsigned long*)v) = cmDataGetULong(np);
|
|
1875
|
+ break;
|
|
1876
|
+
|
|
1877
|
+ case kLongDtId:
|
|
1878
|
+ *((long*)v) = cmDataGetLong(np);
|
|
1879
|
+ break;
|
|
1880
|
+
|
|
1881
|
+ case kFloatDtId:
|
|
1882
|
+ *((float*)v) = cmDataGetFloat(np);
|
|
1883
|
+ break;
|
|
1884
|
+
|
|
1885
|
+ case kDoubleDtId:
|
|
1886
|
+ *((double*)v) = cmDataGetDouble(np);
|
|
1887
|
+ break;
|
|
1888
|
+
|
|
1889
|
+ case kStrDtId:
|
|
1890
|
+ *((char**)v) = cmDataGetStr(np);
|
|
1891
|
+ break;
|
|
1892
|
+
|
|
1893
|
+ case kConstStrDtId:
|
|
1894
|
+ *((const char**)v) = cmDataGetConstStr(np);
|
|
1895
|
+ break;
|
|
1896
|
+
|
|
1897
|
+ case kUCharPtrDtId:
|
|
1898
|
+ *((unsigned char**)v) = cmDataGetUCharPtr(np);
|
|
1899
|
+ break;
|
|
1900
|
+
|
|
1901
|
+ case kCharPtrDtId:
|
|
1902
|
+ *((char**)v) = cmDataGetCharPtr(np);
|
|
1903
|
+ break;
|
|
1904
|
+
|
|
1905
|
+ case kUShortPtrDtId:
|
|
1906
|
+ *((unsigned short**)v) = cmDataGetUShortPtr(np);
|
|
1907
|
+ break;
|
|
1908
|
+
|
|
1909
|
+ case kShortPtrDtId:
|
|
1910
|
+ *((short**)v) = cmDataGetShortPtr(np);
|
|
1911
|
+ break;
|
|
1912
|
+
|
|
1913
|
+ case kUIntPtrDtId:
|
|
1914
|
+ *((unsigned int**)v) = cmDataGetUIntPtr(np);
|
|
1915
|
+ break;
|
|
1916
|
+
|
|
1917
|
+ case kIntPtrDtId:
|
|
1918
|
+ *((int**)v) = cmDataGetIntPtr(np);
|
|
1919
|
+ break;
|
|
1920
|
+
|
|
1921
|
+ case kULongPtrDtId:
|
|
1922
|
+ *((unsigned long**)v) = cmDataGetULongPtr(np);
|
|
1923
|
+ break;
|
|
1924
|
+
|
|
1925
|
+ case kLongPtrDtId:
|
|
1926
|
+ *((long**)v) = cmDataGetLongPtr(np);
|
|
1927
|
+ break;
|
|
1928
|
+
|
|
1929
|
+ case kFloatPtrDtId:
|
|
1930
|
+ *((float**)v) = cmDataGetFloatPtr(np);
|
|
1931
|
+ break;
|
|
1932
|
+
|
|
1933
|
+ case kDoublePtrDtId:
|
|
1934
|
+ *((double**)v) = cmDataGetDoublePtr(np);
|
|
1935
|
+ break;
|
|
1936
|
+
|
|
1937
|
+ case kVoidPtrDtId:
|
|
1938
|
+ *((void**)v) = cmDataGetDoublePtr(np);
|
|
1939
|
+ break;
|
|
1940
|
+
|
|
1941
|
+ case kListDtId:
|
|
1942
|
+ case kPairDtId:
|
|
1943
|
+ case kRecordDtId:
|
|
1944
|
+ if( np->tid != typeId )
|
|
1945
|
+ _cmDataSetError(kCvtErrDtRC);
|
|
1946
|
+ else
|
|
1947
|
+ *(cmData_t**)v = np;
|
|
1948
|
+ break;
|
|
1949
|
+
|
|
1950
|
+ default:
|
|
1951
|
+ _cmDataSetError(kVarArgErrDtRC);
|
|
1952
|
+ assert(0);
|
|
1953
|
+ }
|
|
1954
|
+
|
|
1955
|
+ }
|
|
1956
|
+
|
|
1957
|
+ return rc;
|
|
1958
|
+}
|
|
1959
|
+
|
|
1960
|
+cmDtRC_t cmDataRecdParseLabelV(cmData_t* p, cmErr_t* err, va_list vl )
|
|
1961
|
+{ return _cmDataRecdParseV(p,false,err,vl); }
|
|
1962
|
+
|
|
1963
|
+cmDtRC_t cmDataRecdParseLabel(cmData_t* p, cmErr_t* err, ... )
|
|
1964
|
+{
|
|
1965
|
+ va_list vl;
|
|
1966
|
+ va_start(vl,err);
|
|
1967
|
+ cmDtRC_t rc = cmDataRecdParseLabelV(p,err,vl);
|
|
1968
|
+ va_end(vl);
|
|
1969
|
+ return rc;
|
|
1970
|
+}
|
|
1971
|
+
|
|
1972
|
+cmDtRC_t cmDataRecdParseIdV(cmData_t* p, cmErr_t* err, va_list vl )
|
|
1973
|
+{ return _cmDataRecdParseV(p,true,err,vl); }
|
|
1974
|
+
|
|
1975
|
+cmDtRC_t cmDataRecdParseId(cmData_t* p, cmErr_t* err, ... )
|
|
1976
|
+{
|
|
1977
|
+ va_list vl;
|
|
1978
|
+ va_start(vl,err);
|
|
1979
|
+ cmDtRC_t rc = cmDataRecdParseIdV(p,err,vl);
|
|
1980
|
+ va_end(vl);
|
|
1981
|
+ return rc;
|
|
1982
|
+}
|
|
1983
|
+
|
|
1984
|
+
|
|
1985
|
+
|
1815
|
1986
|
//----------------------------------------------------------------------------
|
1816
|
1987
|
unsigned cmDataSerializeByteCount( const cmData_t* p )
|
1817
|
1988
|
{
|