/***********************************************************************/ /* Open Visualization Data Explorer */ /* (C) Copyright IBM Corp. 1989,1999 */ /* ALL RIGHTS RESERVED */ /* This code licensed under the */ /* "IBM PUBLIC LICENSE - Open Visualization Data Explorer" */ /***********************************************************************/ #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #define class __class__ #endif struct arrayHandle { /* * All arrays */ Class class; int itemSize; Type type; Category cat; int nValues; /* number of TYPE vlaues in each array element */ int nElements; /* number of elements in the array */ /* * Generic arrays */ Pointer data; /* * Constant arrays */ Pointer cdata; /* * Regular arrays */ Pointer origin, delta; /* * Compound arrays */ int nTerms; int *strides; int *counts; int *indices; struct arrayHandle **handles; Pointer *scratch; /* * Path arrays only */ int *scr1, *scr2; }; typedef struct arrayHandle *ArrayHandle; ArrayHandle DXCreateArrayHandle(Array); Error DXFreeArrayHandle(ArrayHandle); Pointer DXCalculateArrayEntry(ArrayHandle, int, Pointer); #define DXGetArrayEntry(_h, _off, _scr) \ (((_h)->data != NULL) ? \ (Pointer)(((ubyte *)((_h)->data)) + (_off)*(_h)->itemSize) \ : ((_h)->cdata != NULL) ? (_h)->cdata \ : DXCalculateArrayEntry((_h), (_off), (_scr))) #define DXIterateArray(_h, _off, last, _scr) \ (((_h)->data != NULL) ? \ (((_off) == 0) ? \ (_h)->data \ : (Pointer)(((ubyte *)last) + (_h)->itemSize)) \ : (((_h)->cdata != NULL) ? \ (_h)->cdata \ : DXCalculateArrayEntry((_h), (_off), (_scr)))) #define DXGetArrayEntries(_h, _cnt, _off, _ptrs, _scr) \ do { \ int __i, __cnt = (_cnt), *(__off) = (_off); \ Pointer *__ptrs = (Pointer *)(_ptrs); \ ubyte *__scr = (ubyte *)(_scr); \ for(__i = 0; __i < __cnt; __i++) \ { \ __ptrs[__i] = DXGetArrayEntry((_h), (__off)[_i], (__scr)); \ (__scr) += (_h)->itemSize; \ } \ } while(0); #if defined(__cplusplus) || defined(c_plusplus) #undef class } #endif