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 -Typ

retvalue -Rückgabetyp

Bemerkung

DT_refvec, DT_list, DT_vector

DT_integer

Höchster Indexwert

DT_matrix

DT_index

Höchster Indexwert

DT_hash

DT_datatype

Beliebiger Indextyp (anyvalue)

ansonsten

DT_void

Unindizierter WertN

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

Dialogdatei

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();
}

C-Teil

...

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

Ab IDM-Version A.06.01.a

Siehe auch

Funktionen DM_ValueChange, DM_ValueGet, DM_ValueIndex

Eingebaute Funktionen countof(), itemcount()