3.79 DM_ValueCount
Liefert die Anzahl der Werte in einer Sammlung (ohne die Standardwerte) zurück. Wenn gewünscht kann auch der Indextyp bzw. der höchste Indexwert zurückgeliefert werden.
Der zurückgelieferte Wert gibt die Anzahl der Werte (ohne die Standardwerte) an. Zusammen mit der Funktion DM_ValueIndex lassen sich so einfach Schleifen über alle indizierten Werte bzw. Elemente realisieren.
Folgende Rückgaben sind je nach value-Parameter zu erwarten:
|
value
|
retvalue
|
|
|---|---|---|
|
DT_refvec, DT_list, DT_vector |
DT_integer |
|
|
DT_matrix |
DT_index |
|
|
DT_hash |
DT_datatype |
|
|
|
DT_void |
|
DM_UInt DML_default DM_EXPORT DM_ValueCount
(
DM_Value *value,
DM_Value *retvalue,
DM_Options options
)
Parameter
-> DM_Value* value
Diese Parameter verweist auf die Wertereferenz, von welcher die Werteanzahl geholt wird. Es sollte eine gemanagte Wertereferenz oder Funktionsargument sein.
-> DM_Value * retvalue
Wenn dieser Parameter nicht NULL ist, wird hierin der Count-Wert zurückgeliefert. Es kann sich hierbei um eine gemanagte Wertereferenz handeln, muss aber nicht.
-> DM_Options options
Hier sind folgende Optionen möglich:
|
Option |
Bedeutung |
|---|---|
|
DMF_GetLocalString |
Diese Option bedeutet, dass bei textuellen Werten (IDs vom Typ DT_text) diese als String in der aktuell eingestellten Sprache zurückgegeben werden sollen. |
|
DMF_GetMasterString |
Diese Option bedeutet, dass bei textuellen Werten (IDs vom Typ DT_text) diese als String in der Entwicklungssprache zurückgegeben werden sollen, unabhängig davon, mit welcher Sprache der Benutzer gerade arbeitet. |
|
DMF_DontFreeLastStrings |
Normalerweise werden Strings in einem temporären Puffer an die Anwendung übergeben, der bis zum nächsten Aufruf an den IDM erhalten bleibt. Sollen Strings länger in der Anwendung gültig sein, muss diese Option DMF_DontFreeLastStrings gesetzt werden. Der Speicher wird erst dann wieder freigegeben, wenn ein Aufruf an eine IDM-Funktion ohne diese Option erfolgt und dabei ein String vom IDM an die Anwendung zurückgegeben wird. |
Rückgabewert
|
0 … INT_MAX |
Anzahl von Werten (ohne die Standardwerte bei Index [0], [0,*] oder [*,0]). |
|
retvalue |
Höchster Indexwert, kann entweder void (skalarer Wert), ein integer-Wert (eindimensionales Feld), ein index-Wert (zweidimensionales Feld) oder ein Datentyp (assoziatives Feld) sein. |
Beispiel
dialog YourDialog
function integer CountIntegers(anyvalue List);
on dialog start
{
variable matrix M := [
[0,0]=>-1,[1,1]=>"PLZ ",[1,2]=>"City",[2,1]=>53123 ,[2,2]=>"Bonn " ];
print "#Integers in Hash: " + CountInteger(M);
exit();
}
...
static DM_Value InvalidIndex;
static DM_Value InvalidValue;
DM_Integer DML_default DM_ENTRY CountInteger(DM_Value *List)
{
DM_Value index;
DM_Value count;
DM_Value value;
DM_Integer icount = 0;
/* initialize the managed values */
if (DM_ValueCount(List, &count, 0)>0 && List->type == DT_matrix
&& count->type == DT_index)
{
index.type = DT_index;
index.value.index.first = 0;
index.value.index.second = 1;
/* loop through [0,1],[1,1],[2,1],... */
while(index.value.index.first<=count.value.index.second)
{
if (DM_ValueGet(List, &index, &value, 0)
&& value.type == DT_integer)
icount++;
index.value.index.first++;
}
}
return icount;
}
Verfügbarkeit
Siehe auch