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

/*---------------------------------------------------------------------------*/