Lauf durch die Selektionsmenge |
Top Previous Next |
/* Lauf durch die Selektionsmenge */ /*================================*/ #include "moskito.h" /* ist alles drin */ #include "assert.h" /* fuer assert() */
/*
Die folgende Routine zeigt den Lauf durch die Selektionsmenge. Dabei werden von allen Objekten aus der Selektionsmenge die Objektschluessel abgefragt. Das Beispiel enthaelt zwei Varianten. Die erste Variante ist langsamer, hat aber dafuer den Vorteil, dass kein unnoetiger Speicherplatz verbraucht wird. Die zweite Variante ist dafuer schneller, belegt aber mehr Speicherplatz, der vielleicht nicht gebraucht wird.
Aufruf: Echo LaufDurchSelektionsmenge() gibt die Summe der Objekte aus.
*/ long int EXPORTENTRY LaufDurchSelektionsmenge(int argc, char* argv[], PROOT ptrRoot) { POBJECT ptrSLObj = NULL; int iAnzObj = 0; /* Anzahl der Objekte */
for (ptrSLObj = DBfirstObjectOfSelectionList(ptrRoot); ptrSLObj; ptrSLObj = DBnextObjectOfSelectionList(ptrSLObj)) { iAnzObj++; { /* 1. Moeglichkeit */ int iKeyCnt = 0; /* nur Anzahl ermitteln */ KEY *ptrKeys = NULL;
if (ERROR_OK == DBreturnObjectKeys(ptrSLObj, &iKeyCnt, ptrKeys)) /* ist jetzt beliebig */ { /* in iKeyCnt steht jetzt die Anzahl der Objekt-Schluessel */
ptrKeys = (KEY*) Malloc(iKeyCnt * sizeof(KEY)); /* Speicher jetzt holen */ assert(ptrKeys); DBreturnObjectKeys(ptrSLObj, &iKeyCnt, ptrKeys);
// ...
Free(ptrKeys); /* Wieder freigeben! */ } else /* Fehlerbehandlung ... */ ; } /* Ende 1. Moeglichkeit */
{ /* 2. Moeglichkeit */ int iKeyCnt = 100; /* oder noch groesser */ KEY ptrKeys[100]; /* gleiche Groesse */
DBreturnObjectKeys(ptrSLObj, &iKeyCnt, ptrKeys); if (iKeyCnt) { // ... } else /* Fehlerbehandlung ... */ ; } /* Ende 2. Moeglichkeit */ } // for return iAnzObj; } // LaufDurchSelektionsmenge /*---------------------------------------------------------------------------*/
|