itaps-parallel [Fwd: iMesh_getAdjEntities (yet another proposed iMesh change)]

Tim Tautges tautges at mcs.anl.gov
Thu Mar 12 13:53:47 CDT 2009


I agree with Mark here.  I'd think twice a year would be sufficient 
chances to change interfaces.

- tim

Mark Miller wrote:
> On the surface of it, I think I generally agree with Jason's rationale
> for suggesting these and other changes. On the other hand, there is a
> cost-benefit question to consider as well. So, my response isn't so much
> on the topic of the changes itself. Its more on the topic of managing
> changes to the API.
> 
> My impression is that we are all trying to press ahead on various high
> priority issues. Whenever we have had any time to discuss in detail
> different corners of any of the APIs, there is always some good argument
> for doing something one way or another. Much of this kind of design
> iteration is behind us. However, I think much is also ahead, even on the
> relatively mature iMesh interface. So, I think we need to accept that
> our APIs will probably need to change from time to time and instead
> decide on a policy for managing that change.
> 
> In my world, every time iMesh.h changes and I am trying to build VisIt
> against 3 different implementations, each one being in flux relative to
> iMesh, it becomes quite a challenge to arrive at a stable build again.
> Such a challenge that I am unlikely to want to 'update' it for a long
> while once I get it stable Hence, iMeshIO release is built against stuff
> that is 3-4 months old. At the same time, I get VisIt/MOAB customers
> asking about the latest MOAB/iMesh implementation and whether VisIt will
> build with it.
> 
> So, I think we should decide to NOT change iMesh.h until some date
> certain in the future (well apart from any SciDAC or other such
> Conference). I think we should queue up all the proposed changes and
> rationals and then decide to discuss them all at once, make the agreed
> upon changes and then agree NOT to touch it again for another long
> interval of time.
> 
> So, while I have no issue with why Jason would like to make these
> changes, I would nonetheless like to suggest that we do not make these
> changes now and instead decide on some interval of time from now that
> we'll keep iMesh.h fixed.
> 
> Mark
> 
> On Thu, 2009-03-12 at 07:50, Lori A. Diachin wrote:
>> Here's the second outstanding issue that Jason brought up for 
>> discussion.  I've also attached the latest iMesh.h and iBase.h to this 
>> email from the repository - I believe those are up to date with all the 
>> other changes we've agreed to..
>>
>> Lori
>>
>> -------- Original Message --------
>> Subject: 	iMesh_getAdjEntities (yet another proposed iMesh change)
>> Date: 	Wed, 04 Feb 2009 11:33:26 -0600
>> From: 	Jason Kraftcheck <kraftche at cae.wisc.edu>
>> To: 	TSTT Interface <tstt-interface at mcs.anl.gov>
>>
>>
>>
>> I think that we should either drop the iMesh_getAdjEntities function
>> entirely, or if not, then remove the 'offset' argument.  This function
>> returns entities of the "requested" type, but not the entities of the
>> "requestor" type/topology.
>>
>> For the "offset" information to be useful, one must also have the entities
>> of the "requestor" type/topology in the appropriate order.  Presumably to
>> get that list the application must call iMesh_getEntities with the implicit
>> assumption that the order will be correct.  But if the application has the
>> ordered "requestor" list, then it could just as easily call
>> iMesh_getEntAdjArr to get the adjacent entities without needing to make any
>> assumptions about functions returning entities in a consistent order.
>>
>> The only case where that might be inefficient is if one wanted something
>> like the list of vertices adjacent to all of the entities in a set but
>> didn't care about the entities.  But for this use case, presumably the
>> application would rather have a single list of unique vertex handles and
>> would have no use for the offset list.
>>
>> - jason
>>
>>
>>
>>
>> ______________________________________________________________________
>> #ifndef IMESH_CBIND_H__
>> #define IMESH_CBIND_H__
>>
>> #define IMESH_MAJOR_VERSION 0
>> #define IMESH_MINOR_VERSION 8
>>
>>   /** \mainpage The ITAPS Mesh Interface iMesh
>>    *
>>    * The ITAPS Mesh Interface iMesh provides a common interface for
>>    * accessing mesh and data associated with a mesh.  Applications written
>>    * to use this interface can use a variety of implementations, choosing
>>    * the one that best meets its needs.  They can also use tools written
>>    * to this interface, for example mesh smoothing, adaptive mesh refinement,
>>    * and parallel mesh support.
>>    *
>>    * \section ITAPS Data Model
>>    *
>>    * The ITAPS interfaces use a data model composed of four basic data types: \n
>>    * \em Entity: basic topological entities in a mesh, e.g. vertices, 
>>    * triangles, hexahedra. \n
>>    * \em Entity \em Set: arbitrary grouping of other entities and sets. 
>>    * Entity sets also support parent/child relations with other sets which
>>    * are distinct from entities contained in those sets.  Parent/child links
>>    * can be used to embed graph relationships between sets, e.g. to 
>>    * represent topological relationships between the sets. \n
>>    * \em Interface: the object with which mesh is associated and on which
>>    * functions in iMesh are called. \n
>>    * \em Tag: application data associated with objects of any of the other 
>>    * data types.  Each tag has a designated name, size, and data type.
>>    *
>>    * \section JTAPS Entity Type, Topology
>>    * Each entity has a specific Entity Type and Entity Topology.  The Entity 
>>    * Type is one of VERTEX, EDGE, FACE, and REGION, and is synonymous with
>>    * the topological dimension of the entity.  The Entity Topology denotes
>>    * the specific shape, for example TRIANGLE, QUADRILATERAL, TETRAHEDRON,
>>    * and HEXAHEDRON.  Entity Type and Entity Topology exist as enumerated
>>    * types, Entity Type in the iBase_EntityType enumeration, and
>>    * Entity Topology in the iMesh_EntityTopology enumeration.
>>    *
>>    * \section KTAPS Entity-, Array-, and Iterator-Based Access
>>    *
>>    * The iMesh interface provides functions for accessing entities
>>    * individually, as arrays of entities, or using iterators.  These access
>>    * methods have different memory versus execution time tradeoffs, 
>>    * depending on the implementation.
>>    *
>>    * \section LTAPS Lists Passed Through Interface
>>    *
>>    * Many of the functions in iMesh have arguments corresponding to lists of 
>>    * objects.  In-type arguments for lists consist of a pointer to an array and
>>    * a list size.  Lists returned from functions are passed in three arguments,
>>    * a pointer to the array representing the list, and pointers to the
>>    * allocated and occupied lengths of the array.  These three arguments are 
>>    * inout-type arguments, because they can be allocated by the application and
>>    * passed into the interface to hold the results of the function.  Lists
>>    * which are pre-allocated must be large enough to hold the results of the
>>    * function; if this is not the case, an error is generated.  Otherwise, the
>>    * occupied size is changed to the size output from the function.  If a list
>>    * argument is unallocated (the list pointer points to a NULL value) or if
>>    * the incoming value of the allocated size is zero, the list storage will be
>>    * allocated by the implementation.  IN ALL CASES, MEMORY ALLOCATED BY ITAPS
>>    * INTERFACE IMPLEMENTATIONS IS DONE USING THE C MALLOC FUNCTION, AND CAN BE
>>    * DE-ALLOCATED USING THE C FREE FUNCTION.
>>    *
>>    */
>>
>> #ifndef ITAPS
>> #define ITAPS
>> #endif
>>
>> #include "iBase.h"
>> #include "iMesh_protos.h"
>>
>> #ifdef __cplusplus
>> extern "C" {
>> #endif
>>
>>     /**\brief  Type used to store iMesh interface handle
>>      *
>>      * Type used to store iMesh interface handle
>>      */
>>   typedef struct iMesh_Instance_Private* iMesh_Instance;
>>
>>     /**\brief  Type used to store an iterator returned by iMesh
>>      *
>>      * Type used to store an iterator returned by iMesh
>>      */
>>   typedef struct iMesh_EntityIterator_Private* iMesh_EntityIterator;
>>  
>>     /**\brief  Type used to store an array iterator returned by iMesh
>>      *
>>      * Type used to store an array iterator returned by iMesh
>>      */
>>   typedef struct iMesh_EntityArrIterator_Private* iMesh_EntityArrIterator;
>>
>>     /**\brief  Enumerator specifying entity topology
>>      *
>>      * Enumerator specifying entity topology.
>>      */
>>   enum iMesh_EntityTopology {
>>     iMesh_POINT = 0,              /**< a general zero-dimensional entity  */
>>     iMesh_LINE_SEGMENT,       /**< a general one-dimensional entity  */
>>     iMesh_POLYGON,            /**< a general two-dimensional element  */
>>     iMesh_TRIANGLE,           /**< a three-sided, two-dimensional element  */
>>     iMesh_QUADRILATERAL,      /**< a four-sided, two-dimensional element  */
>>     iMesh_POLYHEDRON,         /**< a general three-dimensional element */
>>     iMesh_TETRAHEDRON,        /**< a four-sided, three-dimensional element whose
>> 			       *     faces are triangles */
>>     iMesh_HEXAHEDRON,         /**< a six-sided, three-dimensional element whose
>> 			       *     faces are quadrilaterals */
>>     iMesh_PRISM,              /**< a five-sided, three-dimensional element which
>> 			       *     has three quadrilateral faces and two
>> 			       *     triangular faces  */
>>     iMesh_PYRAMID,            /**< a five-sided, three-dimensional element
>> 			       *     which has one quadrilateral face and four
>> 			       *     triangular faces */
>>     iMesh_SEPTAHEDRON,        /**< a hexahedral entity with one collapsed edge */
>>     iMesh_ALL_TOPOLOGIES      /**< allows the user to request information
>> 			       *     about all the topology types */
>>   };
>>
>>     /**\brief  Get the error type returned from the last iMesh function
>>      *
>>      * Get the error type returned from the last iMesh function.  Value
>>      * returned is a member of the iBase_ErrorType enumeration.
>>      * \param instance iMesh instance handle
>>      * \param *error_type Error type returned from last iMesh function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getErrorType(iMesh_Instance instance,
>>                           /*out*/ int *error_type, 
>>                           int *err);
>>
>>     /**\brief  Get a description of the error returned from the last iMesh function
>>      *
>>      * Get a description of the error returned from the last iMesh function
>>      * \param instance iMesh instance handle
>>      * \param descr Pointer to a character string to be filled with a
>>      *        description of the error from the last iMesh function
>>      * \param *err Pointer to error type returned from function
>>      * \param descr_len Length of the character string pointed to by descr
>>      */
>>   void iMesh_getDescription(iMesh_Instance instance,
>>                             /*inout*/ char *descr, 
>>                             int *err, 
>>                             /*in*/ int descr_len);
>>
>>     /**\brief  Construct a new iMesh instance
>>      *
>>      * Construct a new iMesh instance, using implementation-specific
>>      * options
>>      * \param options Pointer to implementation-specific options string
>>      * \param instance Pointer to iMesh instance handle returned from function
>>      * \param *err Pointer to error type returned from function
>>      * \param options_len Length of the character string pointed to by options
>>      */
>>   void iMesh_newMesh(const char *options,
>>                      /*out*/ iMesh_Instance *instance, 
>>                      /*out*/ int *err, 
>>                      /*in*/ int options_len);
>>
>>     /**\brief  Destroy an iMesh instance
>>      *
>>      * Destroy an iMesh instance
>>      * \param instance iMesh instance to be destroyed
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_dtor(iMesh_Instance instance, 
>>                   /*out*/ int *err);
>>
>>     /**\brief  Load a mesh from a file
>>      *
>>      * Load a mesh from a file.  If entity set is specified, loaded mesh
>>      * is added to that set; specify root set if that is not desired.
>>      * \param instance iMesh instance handle
>>      * \param entity_set_handle Set to which loaded mesh will be added, 
>>      *        root set if not desired
>>      * \param name File name from which mesh is to be loaded
>>      * \param options Pointer to implementation-specific options string
>>      * \param *err Pointer to error type returned from function
>>      * \param name_len Length of the file name character string
>>      * \param options_len Length of the options character string
>>      */
>>   void iMesh_load(iMesh_Instance instance,
>>                   /*in*/ const iBase_EntitySetHandle entity_set_handle,
>>                   /*in*/ const char *name, 
>>                   /*in*/ const char *options,
>>                   /*out*/ int *err, 
>>                   /*in*/ int name_len, 
>>                   /*in*/ int options_len);
>>
>>     /**\brief  Save a mesh to a file
>>      *
>>      * Save a mesh to a file.  If entity set is specified, save only the
>>      * mesh contained in that set.
>>      * \param instance iMesh instance handle
>>      * \param entity_set_handle Entity set being saved
>>      * \param name File name to which mesh is to be saved
>>      * \param options Pointer to implementation-specific options string
>>      * \param *err Pointer to error type returned from function
>>      * \param name_len Length of the file name character string
>>      * \param options_len Length of the options character string
>>      */
>>   void iMesh_save(iMesh_Instance instance,
>>                   /*in*/ const iBase_EntitySetHandle entity_set_handle,
>>                   /*in*/ const char *name, 
>>                   /*in*/ const char *options,
>>                   /*out*/ int *err, 
>>                   /*in*/ const int name_len, 
>>                   /*in*/ int options_len);
>>
>>     /**\brief  Get handle of the root set for this instance
>>      *
>>      * Get handle of the root set for this instance.  All mesh in
>>      * this instance can be accessed from this set.
>>      * \param instance iMesh instance handle
>>      * \param root_set Pointer to set handle returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getRootSet(iMesh_Instance instance,
>>                         /*out*/ iBase_EntitySetHandle *root_set, 
>>                         /*out*/ int *err);
>>
>>     /**\brief  Get the geometric dimension of mesh represented in this instance
>>      *
>>      * Get the geometric dimension of mesh represented in this instance
>>      * \param instance iMesh instance handle
>>      * \param geom_dim Pointer to dimension returned from this function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getGeometricDimension(iMesh_Instance instance,
>>                                    /*out*/ int *geom_dim, 
>>                                    /*out*/ int *err);
>>
>>    /**\brief Set geometric dimension of vertex coordinates
>>     *
>>     * Set the geometric dimension of the mesh.  Notes:  An application
>>     * should not expect this function to succeed unless the mesh database
>>     * is empty (no vertices created, no files read, etc.)
>>     *\param instance Mesh database from which to request change.
>>     *\param geom_dim Requested geometric dimension.
>>     */
>>   void iMesh_setGeometricDimension( iMesh_Instance instance,
>>                                     /*in*/ int geom_dim,
>>                                     /*out*/ int* err );
>>
>>     /**\brief  Get the default storage order used by this implementation
>>      *
>>      * Get the default storage order used by this implementation.  Value
>>      * returned is a member of the iBase_StorageOrder enumeration.
>>      * \param instance iMesh instance handle
>>      * \param order Pointer to storage order returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getDfltStorage(iMesh_Instance instance,
>>                             /*out*/ int *order, 
>>                             /*out*/ int *err);
>>
>>     /**\brief  Get the adjacency table for this implementation
>>      *
>>      * Get the adjacency table for this implementation.  This table 
>>      * is a 4x4 array, with indices 0-based, where A(i,j) (i=row, j=column) 
>>      * represents the relative cost of retrieving adjacencies between
>>      * entities of dimension i to entities of dimension j
>>      * \param instance iMesh instance handle
>>      * \param *adjacency_table Pointer to array representing adjacency table
>>      *        returned from function
>>      * \param adjacency_table_allocated Pointer to allocated size of 
>>      *        adjacency table
>>      * \param adjacency_table_size Pointer to occupied size of 
>>      *        adjacency table
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getAdjTable (iMesh_Instance instance,
>>                           /*out*/ int** adjacency_table,
>>                           /*inout*/ int* adjacency_table_allocated,
>>                           /*out*/ int* adjacency_table_size, 
>>                           /*out*/ int *err);
>>
>>     /**\brief  Get the number of entities with the specified type in the instance or set
>>      *
>>      * Get the number of entities with the specified type in the instance 
>>      * or set.  If entity set handle is root set, return information for instance,
>>      * otherwise for set.  Value of entity type must be from the
>>      * iBase_EntityType enumeration.  If iBase_ALL_TYPES is specified,
>>      * total number of entities (excluding entity sets) is returned.
>>      * \param instance iMesh instance handle
>>      * \param entity_set_handle Entity set being queried
>>      * \param entity_type Type of entity requested
>>      * \param num_type Pointer to number of entities, returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getNumOfType(iMesh_Instance instance,
>>                           /*in*/ const iBase_EntitySetHandle entity_set_handle,
>>                           /*in*/ const int entity_type,
>>                           /*out*/ int *num_type, 
>>                           /*out*/ int *err);
>>
>>     /**\brief  Get the number of entities with the specified topology in the instance or set
>>      *
>>      * Get the number of entities with the specified topology in the instance 
>>      * or set.  If entity set handle is root set, return information for instance,
>>      * otherwise for set.  Value of entity topology must be from the
>>      * iMesh_EntityTopology enumeration.  If iMesh_ALL_TOPOLOGIES is specified,
>>      * total number of entities (excluding entity sets) is returned.
>>      * \param instance iMesh instance handle
>>      * \param entity_set_handle Entity set being queried
>>      * \param entity_topology Topology of entity requested
>>      * \param num_topo Pointer to number of entities, returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getNumOfTopo(iMesh_Instance instance,
>>                           /*in*/ const iBase_EntitySetHandle entity_set_handle,
>>                           /*in*/ const int entity_topology,
>>                           /*out*/ int *num_topo, 
>>                           /*out*/ int *err);
>>
>>     /**\brief Return whether entity handles have changed since last reset or since
>>      *        instance construction
>>      *
>>      * Return whether entity handles have changed since last reset or since
>>      * instance construction.  If non-zero value is returned, it is not
>>      * guaranteed that a handle from before the last call to this function
>>      * represents the same entity as the same handle value does now.  If
>>      * doReset is non-zero, resets the starting point for this function.
>>      * \param instance iMesh instance handle
>>      * \param doReset Perform a reset on the starting point after which handles
>>      *        are invariant.
>>      * \param areHandlesInvariant Pointer to invariant flag returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_areEHValid(iMesh_Instance instance, 
>>                         /*in*/ int doReset,
>>                         /*out*/ int *areHandlesInvariant, 
>>                         /*out*/ int *err);
>>
>>
>>     /**\brief  Get entities of specific type and/or topology in set or instance
>>      *
>>      * Get entities of specific type and/or topology in set or instance.  All 
>>      * entities of a given type or topology are requested by specifying
>>      * iBase_ALL_TOPOLOGIES or iBase_ALL_TYPES, respectively.  Specified type
>>      * or topology must be a value in the iBase_EntityType or iBase_EntityTopology
>>      * enumeration, respectively.
>>      * \param instance iMesh instance handle
>>      * \param entity_set_handle Entity set being queried
>>      * \param entity_type Type of entities being requested
>>      * \param entity_topology Topology of entities being requested
>>      * \param *entity_handles Pointer to array of entity handles returned 
>>      *        from function
>>      * \param *entity_handles_allocated Pointer to allocated size of 
>>      *        entity_handles array
>>      * \param *entity_handles_size Pointer to occupied size of entity_handles array
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getEntities(iMesh_Instance instance,
>>                          /*in*/ const iBase_EntitySetHandle entity_set_handle,
>>                          /*in*/ const int entity_type,
>>                          /*in*/ const int entity_topology,
>>                          /*out*/ iBase_EntityHandle** entity_handles,
>>                          /*out*/ int* entity_handles_allocated,
>>                          /*out*/ int* entity_handles_size,
>>                          /*out*/ int *err);
>>
>>     /**\brief  Get coordinates of specified vertices
>>      *
>>      * Get coordinates of specified vertices.  If storage order is passed in
>>      * with a value other than iBase_UNDETERMINED, coordinates are returned
>>      * in the specified storage order, otherwise storage order is that native
>>      * to the implementation.  Storage order of returned coordinates is also
>>      * returned.
>>      * \param instance iMesh instance handle
>>      * \param vertex_handles Array of mesh vertex handles whose coordinates are
>>      *        being requested
>>      * \param vertex_handles_size Number of vertices in vertex_handles array
>>      * \param storage_order Pointer to storage order requested/returned from
>>      *        function
>>      * \param *coords Pointer to array of coordinates returned from function
>>      * \param *coords_allocated Pointer to allocated size of coords array
>>      * \param *coords_size Pointer to occupied size of coords array
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getVtxArrCoords(iMesh_Instance instance,
>>                              /*in*/ const iBase_EntityHandle* vertex_handles,
>>                              /*in*/ const int vertex_handles_size,
>>                              /*inout*/ int* storage_order,
>>                              /*inout*/ double** coords,
>>                              /*inout*/ int* coords_allocated,
>>                              /*out*/ int* coords_size, 
>>                              /*out*/ int *err);
>>
>>
>>     /**\brief  Get entities adjacent to those of requested type/topology in set or instance
>>      *
>>      * Get entities adjacent to those of requested type/topology in set or 
>>      * instance.  
>>      *
>>      * If adjacencies for all entities of specified type or
>>      * topology are desired, specify iMesh_ALL_TOPOLOGIES or iBase_ALL_TYPES,
>>      * respectively.  Types and topologies input to this function must be values
>>      * in the iBase_EntityType or iBase_EntityTopology enumerations, respectively.
>>      * \em offset[i] stores index of first adjacent entity to entity \em i from
>>      * mesh or set.
>>      * \param instance iMesh instance handle
>>      * \param entity_set_handle Entity set whose adjacent entities are requested
>>      *        (root set indicates whole mesh)
>>      * \param entity_type_requestor Return entities adjacent to entities of this 
>>      *        type
>>      * \param entity_topology_requestor Return entities adjacent to entities of 
>>      *        this topology
>>      * \param entity_type_requested Return adjacent entities of this type
>>      * \param *adj_entity_handles Pointer to array of adjacent entity handles 
>>      *        returned from function
>>      * \param *adj_entity_handles_allocated Pointer to allocated size of 
>>      *        adj_entity_handles array
>>      * \param *adj_entity_handles_size Pointer to occupied size of 
>>      *        adj_entity_handles array
>>      * \param *offset Pointer to array of offsets returned from function
>>      * \param *offset_allocated Pointer to allocated size of offset array
>>      * \param *offset_size Pointer to occupied size of offset array
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getAdjEntities(iMesh_Instance instance,
>>                             /*in*/ const iBase_EntitySetHandle entity_set_handle,
>>                             /*in*/ const int entity_type_requestor,
>>                             /*in*/ const int entity_topology_requestor,
>>                             /*in*/ const int entity_type_requested,
>>                             /*inout*/ iBase_EntityHandle** adj_entity_handles,
>>                             /*inout*/ int* adj_entity_handles_allocated,
>>                             /*out*/ int* adj_entity_handles_size,
>>                             /*inout*/ int** offset,
>>                             /*inout*/ int* offset_allocated,
>>                             /*out*/ int* offset_size,
>>                             /*out*/ int *err);
>>
>>     /**\brief Initialize an array iterator over specified entity type, topology, and 
>>      *        size
>>      *
>>      * Initialize an array iterator over specified entity type, topology, and 
>>      * size, for a specified set or instance.  Iterator returned can be used 
>>      * as input to functions returning entities for the iterator.  If all 
>>      * entities of a specified type and/or topology are to be iterated, 
>>      * specify iBase_ALL_TYPES or iMesh_ALL_TOPOLOGIES, respectively.  
>>      * Specified type or topology must be a value in the iBase_EntityType or 
>>      * iMesh_EntityTopology enumerations, respectively.
>>      * \param instance iMesh instance handle
>>      * \param entity_set_handle Entity set being iterated
>>      * \param requested_entity_type Type of entity to iterate
>>      * \param requested_entity_topology Topology of entity to iterate
>>      * \param requested_array_size Size of chunks of handles returned for each
>>      *        value of the iterator
>>      * \param entArr_iterator Pointer to iterator returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_initEntArrIter(iMesh_Instance instance,
>>                             /*in*/ const iBase_EntitySetHandle entity_set_handle,
>>                             /*in*/ const int requested_entity_type,
>>                             /*in*/ const int requested_entity_topology,
>>                             /*in*/ const int requested_array_size,
>>                             /*out*/ iMesh_EntityArrIterator* entArr_iterator,
>>                             /*out*/ int *err);
>>
>>     /**\brief  Get entities contained in array iterator and increment iterator
>>      *
>>      * Get the entities contained in an array iterator, and increment the 
>>      * iterator.  Also return whether the next value of the iterator has
>>      * any entities (if non-zero, next iterator value is the end of the
>>      * iteration).
>>      * \param instance iMesh instance handle
>>      * \param entArr_iterator Iterator being queried
>>      * \param *entity_handles Pointer to array of entity handles contained in
>>      *        current value of iterator
>>      * \param *entity_handles_allocated Pointer to allocated size of 
>>      *        entity_handles array
>>      * \param *entity_handles_size Pointer to occupied size of entity_handles 
>>      *        array
>>      * \param has_data Pointer to flag; if returned non-zero, next iterator
>>      *        has a non-zero number of entities
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getNextEntArrIter(iMesh_Instance instance,
>>                                /*in*/ iMesh_EntityArrIterator entArr_iterator,
>>                                /*inout*/ iBase_EntityHandle** entity_handles,
>>                                /*inout*/ int* entity_handles_allocated,
>>                                /*out*/ int* entity_handles_size,
>>                                /*out*/ int *has_data, 
>>                                /*out*/ int *err);
>>
>>
>>     /**\brief  Reset the array iterator
>>      *
>>      * Reset the array iterator
>>      * \param instance iMesh instance handle
>>      * \param entArr_iterator Iterator to reset
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_resetEntArrIter(iMesh_Instance instance,
>>                              /*in*/ iMesh_EntityArrIterator entArr_iterator, 
>>                              /*out*/ int *err);
>>
>>
>>     /**\brief  Destroy the specified array iterator
>>      *
>>      * Destroy the specified array iterator
>>      * \param instance iMesh instance handle
>>      * \param entArr_iterator Iterator which gets destroyed
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_endEntArrIter(iMesh_Instance instance,
>>                            /*in*/ iMesh_EntityArrIterator entArr_iterator, 
>>                            /*out*/ int *err);
>>
>>     /**\brief  Get the entity topology for the specified entities
>>      *
>>      * Get the entity topology for the specified entities.  Topologies 
>>      * returned are values in the iMesh_EntityTopology enumeration.
>>      * \param instance iMesh instance handle
>>      * \param entity_handles Array of entity handles being queried
>>      * \param entity_handles_size Number of entities in entity_handles array
>>      * \param *topology Pointer to array of entity topologies returned 
>>      *        from function
>>      * \param *topology_allocated Pointer to allocated size of topology array
>>      * \param *topology_size Pointer to occupied size of topology array
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getEntArrTopo(iMesh_Instance instance,
>>                            /*in*/ const iBase_EntityHandle* entity_handles,
>>                            /*in*/ const int entity_handles_size,
>>                            /*inout*/ int** topology,
>>                            /*inout*/ int* topology_allocated,
>>                            /*out*/ int* topology_size, 
>>                            /*out*/ int *err);
>>
>>
>>     /**\brief  Get the entity type for the specified entities
>>      *
>>      * Get the entity type for the specified entities.  Types
>>      * returned are values in the iBase_EntityType enumeration.
>>      * \param instance iMesh instance handle
>>      * \param entity_handles Array of entity handles being queried
>>      * \param entity_handles_size Number of entities in entity_handles array
>>      * \param *type Pointer to array of types returned from function
>>      * \param *type_allocated Pointer to allocated size of type array
>>      * \param *type_size Pointer to occupied size of type array
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getEntArrType(iMesh_Instance instance,
>>                            /*in*/ const iBase_EntityHandle* entity_handles,
>>                            /*in*/ const int entity_handles_size,
>>                            /*inout*/ int** type,
>>                            /*inout*/ int* type_allocated,
>>                            /*out*/ int* type_size, 
>>                            /*out*/ int *err);
>>
>>
>>     /**\brief  Get entities of specified type adjacent to entities
>>      *
>>      * Get entities of specified type adjacent to entities.  Specified type
>>      * must be value in the iBase_EntityType enumeration.  \em offset(i) is
>>      * index of first entity in adjacentEntityHandles array adjacent to 
>>      * entity_handles[i].
>>      * \param instance iMesh instance handle
>>      * \param entity_handles Array of entity handles being queried
>>      * \param entity_handles_size Number of entities in entity_handles array
>>      * \param entity_type_requested Type of adjacent entities requested
>>      * \param *adjacentEntityHandles Pointer to array of adjacentEntityHandles 
>>      *        returned from function
>>      * \param *adjacentEntityHandles_allocated Pointer to allocated size of 
>>      *        adjacentEntityHandles array
>>      * \param *adj_entity_handles_size Pointer to occupied size of 
>>      *        adjacentEntityHandles array
>>      * \param *offset Pointer to array of offsets returned from function
>>      * \param *offset_allocated Pointer to allocated size of offset array
>>      * \param *offset_size Pointer to occupied size of offset array
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getEntArrAdj(iMesh_Instance instance,
>>                           /*in*/ const iBase_EntityHandle* entity_handles,
>>                           /*in*/ const int entity_handles_size,
>>                           /*in*/ const int entity_type_requested,
>>                           /*inout*/ iBase_EntityHandle** adjacentEntityHandles,
>>                           /*inout*/ int* adjacentEntityHandles_allocated,
>>                           /*out*/ int* adj_entity_handles_size,
>>                           /*inout*/ int** offset,
>>                           /*inout*/ int* offset_allocated,
>>                           /*out*/ int* offset_size,
>>                           /*out*/ int *err);
>>
>> /**\brief Get "2nd order" adjacencies to an array of entities
>>  * Get "2nd order" adjacencies to an array of entities, that is, from each 
>>  * entity, through other entities of a specified "bridge" dimension, to other 
>>  * entities of another specified "to" dimension.
>>  *
>>  * \param instance iMesh instance for this call
>>  * \param entity_handles Entities from which adjacencies are requested
>>  * \param entity_handles_size Number of entities whose adjacencies are requested
>>  * \param bridge_entity_type  Type of bridge entity for 2nd order adjacencies
>>  * \param requested_entity_type Type of adjacent entities returned
>>  * \param adj_entity_handles Adjacent entities
>>  * \param adj_entity_handles_allocated Allocated size of returned array
>>  * \param adj_entity_handles_size Occupied size of returned array
>>  * \param offset Offset[i] is offset into adj_entity_handles of 2nd order 
>>  *        adjacencies of ith entity in entity_handles
>>  * \param offset_allocated Allocated size of offset array
>>  * \param offset_size Occupied size of offset array
>>  * \param err 
>>  */
>>   void iMesh_getEntArr2ndAdj( iMesh_Instance instance,
>>                               iBase_EntityHandle const* entity_handles,
>>                               int entity_handles_size,
>>                               int bridge_entity_type,
>>                               int requested_entity_type,
>>                               iBase_EntityHandle** adj_entity_handles,
>>                               int* adj_entity_handles_allocated,
>>                               int* adj_entity_handles_size,
>>                               int** offset,
>>                               int* offset_allocated,
>>                               int* offset_size,
>>                               int* err );
>>
>>    /**\brief Get indexed representation of mesh or subset of mesh
>>     *
>>     * Given an entity set and optionally a type or topology, return:
>>     * - The entities in the set of the specified type or topology
>>     * - The entities adjacent to those entities with a specified
>>     *    type, as a list of unique handles.
>>     * - For each entity in the first list, the adjacent entities,
>>     *    specified as indices into the second list.
>>     *
>>     *\param entity_set_handle     The set of entities from which to query
>>     *\param entity_type_requestor If not iBase_ALL_TYPES, act only on 
>>     *                             the subset of 'entity_set_handle' of the
>>     *                             specified type.
>>     *\param entity_topology_requestor If not iMesh_ALL_TOPOLOGIES, act only
>>     *                             on the subset of 'entity_set_handle' with
>>     *                             the specified topology.
>>     *\param entity_type_requested The type of the adjacent entities to
>>     *                             return.
>>     *\param entity_handles        The handles of the (non-struct) subset of   
>>     *                             the entity set indicated by 
>>     *                             'entity_set_handle' and the optional type
>>     *                             and topology filtering arguments.
>>     *\param adj_entity_handles    The union of the entities of type 
>>     *                             'requested_entity_type' adjacent to each
>>     *                             entity in 'entity_handles'.
>>     *\param adj_entity_indices    For each entity in 'entity_handles', the
>>     *                             adjacent entities of type
>>     *                             'entity_type_requested', specified as 
>>     *                             indices into 'adj_entity_handles'.  The
>>     *                             values are concatenated into a single   
>>     *                             array in the order of the entity handles 
>>     *                             in 'entity_handles'.
>>     *\param offset                For each entity in the corresponding 
>>     *                             position in 'entity_handles', the position
>>     *                             in 'adj_entity_indices' at which values
>>     *                             for that entity are stored.
>>     */
>>   void iMesh_getAdjEntIndices(iMesh_Instance instance,
>>                       /*in*/    iBase_EntitySetHandle entity_set_handle,
>>                       /*in*/    int entity_type_requestor,
>>                       /*in*/    int entity_topology_requestor,
>>                       /*in*/    int entity_type_requested,
>>                       /*inout*/ iBase_EntityHandle** entity_handles,
>>                       /*inout*/ int* entity_handles_allocated,
>>                       /*out*/   int* entity_handles_size,
>>                       /*inout*/ iBase_EntityHandle** adj_entity_handles,
>>                       /*inout*/ int* adj_entity_handles_allocated,
>>                       /*out*/   int* adj_entity_handles_size,
>>                       /*inout*/ int** adj_entity_indices,
>>                       /*inout*/ int* adj_entity_indices_allocated,
>>                       /*out*/   int* adj_entity_indices_size,
>>                       /*inout*/ int** offset,
>>                       /*inout*/ int* offset_allocated,
>>                       /*out*/   int* offset_size,
>>                       /*out*/   int *err);
>>
>>     /**\brief  Create an entity set
>>      *
>>      * Create an entity set, either ordered (isList=1) or unordered 
>>      * (isList=0).  Unordered entity sets can contain a given entity or 
>>      * set only once.
>>      * \param instance iMesh instance handle
>>      * \param isList If non-zero, an ordered list is created, otherwise an
>>      *        unordered set is created.
>>      * \param entity_set_created Entity set created by function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_createEntSet(iMesh_Instance instance,
>>                           /*in*/ const int isList,
>>                           /*out*/ iBase_EntitySetHandle* entity_set_created,
>>                           /*out*/ int *err);
>>
>>     /**\brief  Destroy an entity set
>>      *
>>      * Destroy an entity set
>>      * \param instance iMesh instance handle
>>      * \param entity_set Entity set to be destroyed
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_destroyEntSet(iMesh_Instance instance,
>>                            /*in*/ iBase_EntitySetHandle entity_set,
>>                            /*out*/ int *err);
>>
>>     /**\brief  Return whether a specified set is ordered or unordered
>>      *
>>      * Return whether a specified set is ordered (*is_list=1) or 
>>      * unordered (*is_list=0)
>>      * \param instance iMesh instance handle
>>      * \param entity_set Entity set being queried
>>      * \param is_list Pointer to flag returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_isList(iMesh_Instance instance,
>>                     /*in*/ const iBase_EntitySetHandle entity_set,
>>                     /*out*/ int *is_list,
>>                     /*out*/ int *err);
>>
>>     /**\brief  Get the number of entity sets contained in a set or interface
>>      *
>>      * Get the number of entity sets contained in a set or interface.  If
>>      * a set is input which is not the root set, num_hops indicates the 
>>      * maximum number of contained sets from entity_set_handle to one of the
>>      * contained sets, inclusive of the contained set.
>>      * \param instance iMesh instance handle
>>      * \param entity_set_handle Entity set being queried
>>      * \param num_hops Maximum hops from entity_set_handle to contained set,
>>      *        inclusive of the contained set
>>      * \param num_sets Pointer to the number of sets returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getNumEntSets(iMesh_Instance instance,
>>                            /*in*/ const iBase_EntitySetHandle entity_set_handle,
>>                            /*in*/ const int num_hops,
>>                            /*out*/ int *num_sets,
>>                            /*out*/ int *err);
>>
>>
>>     /**\brief  Get the entity sets contained in a set or interface
>>      *
>>      * Get the entity sets contained in a set or interface.  If
>>      * a set is input which is not the root set, num_hops indicates the 
>>      * maximum number of contained sets from entity_set_handle to one of the
>>      * contained sets, inclusive of the contained set.
>>      * \param instance iMesh instance handle
>>      * \param entity_set_handle Entity set being queried
>>      * \param num_hops Maximum hops from entity_set_handle to contained set,
>>      *        inclusive of the contained set
>>      * \param *contained_set_handles Pointer to array of set handles returned
>>      *        from function
>>      * \param contained_set_handles_allocated Pointer to allocated length of
>>      *        contained_set_handles array
>>      * \param contained_set_handles_size Pointer to occupied length of
>>      *        contained_set_handles array
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getEntSets(iMesh_Instance instance,
>>                         /*in*/ const iBase_EntitySetHandle entity_set_handle,
>>                         /*in*/ const int num_hops,
>>                         /*out*/ iBase_EntitySetHandle** contained_set_handles,
>>                         /*out*/ int* contained_set_handles_allocated,
>>                         /*out*/ int* contained_set_handles_size,
>>                         /*out*/ int *err);
>>
>>     /**\brief  Add an entity to a set
>>      *
>>      * Add an entity to a set
>>      * \param instance iMesh instance handle
>>      * \param entity_handle The entity being added
>>      * \param entity_set Pointer to the set being added to
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_addEntToSet(iMesh_Instance instance,
>>                          /*in*/ iBase_EntityHandle entity_handle,
>>                          /*in*/ iBase_EntitySetHandle entity_set,
>>                          /*out*/ int *err);
>>
>>     /**\brief  Remove an entity from a set
>>      *
>>      * Remove an entity from a set
>>      *
>>      * \param instance iMesh instance handle
>>      * \param entity_handle The entity being removed
>>      * \param entity_set Pointer to the set being removed from
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_rmvEntFromSet(iMesh_Instance instance,
>>                            /*in*/ iBase_EntityHandle entity_handle,
>>                            /*in*/ iBase_EntitySetHandle entity_set,
>>                            /*out*/ int *err);
>>
>>
>>     /**\brief  Add an array of entities to a set
>>      *
>>      * Add an array of entities to a set
>>      * \param instance iMesh instance handle
>>      * \param entity_handles Array of entities being added
>>      * \param entity_handles_size Number of entities in entity_handles array
>>      * \param entity_set Pointer to the set being added to
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_addEntArrToSet(iMesh_Instance instance,
>>                             /*in*/ const iBase_EntityHandle* entity_handles,
>>                             /*in*/ int entity_handles_size,
>>                             /*in*/ iBase_EntitySetHandle entity_set,
>>                             /*out*/ int *err);
>>
>>
>>     /**\brief  Remove an array of entities from a set
>>      *
>>      * Remove an array of entities from a set
>>      * \param instance iMesh instance handle
>>      * \param entity_handles Array of entities being remove
>>      * \param entity_handles_size Number of entities in entity_handles array
>>      * \param entity_set Pointer to the set being removed from
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_rmvEntArrFromSet(iMesh_Instance instance,
>>                               /*in*/ const iBase_EntityHandle* entity_handles,
>>                               /*in*/ int entity_handles_size,
>>                               /*in*/ iBase_EntitySetHandle entity_set,
>>                               /*out*/ int *err);
>>
>>
>>     /**\brief  Add an entity set to a set
>>      *
>>      * Add an entity set to a set
>>      * \param instance iMesh instance handle
>>      * \param entity_set_to_add The entity set being added
>>      * \param entity_set_handle Pointer to the set being added to
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_addEntSet(iMesh_Instance instance,
>>                        /*in*/ iBase_EntitySetHandle entity_set_to_add,
>>                        /*in*/ iBase_EntitySetHandle entity_set_handle,
>>                        /*out*/ int *err);
>>
>>
>>     /**\brief  Remove an entity set from a set
>>      *
>>      * Remove an entity set from a set
>>      * \param instance iMesh instance handle
>>      * \param entity_set_to_remove The entity set being removed
>>      * \param entity_set_handle Pointer to the set being removed from
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_rmvEntSet(iMesh_Instance instance,
>>                        /*in*/ iBase_EntitySetHandle entity_set_to_remove,
>>                        /*in*/ iBase_EntitySetHandle entity_set_handle,
>>                        /*out*/ int *err);
>>
>>     /**\brief  Return whether an entity is contained in another set
>>      *
>>      * Return whether an entity is contained (*is_contained=1) or not 
>>      * contained (*is_contained=0) in another set
>>      * \param instance iMesh instance handle
>>      * \param containing_entity_set Entity set being queried
>>      * \param contained_entity Entity potentially contained in 
>>      *        containing_entity_set
>>      * \param is_contained Pointer to flag returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_isEntContained(iMesh_Instance instance,
>>                             /*in*/ iBase_EntitySetHandle containing_entity_set,
>>                             /*in*/ iBase_EntityHandle contained_entity,
>>                             /*out*/ int *is_contained,
>>                             /*out*/ int *err);
>>
>>     /**\brief  Return whether entities are contained in a set
>>      *
>>      * Return whether each entity is contained in the set.
>>      * \param instance iMesh instance handle
>>      * \param containing_entity_set Entity set being queried
>>      * \param entity_handles List of entities for which to check containment.
>>      * \param is_contained One value for each input entity, 1 if contained
>>      *          in set, zero otherwise.
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_isEntArrContained( iMesh_Instance instance,
>>                          /*in*/ iBase_EntitySetHandle containing_set,
>>                          /*in*/ const iBase_EntityHandle* entity_handles,
>>                          /*in*/ int num_entity_handles,
>>                       /*inout*/ int** is_contained,
>>                       /*inout*/ int* is_contained_allocated,
>>                         /*out*/ int* is_contained_size,
>>                         /*out*/ int* err );
>>
>>     /**\brief  Return whether an entity set is contained in another set
>>      *
>>      * Return whether a set is contained (*is_contained=1) or not contained
>>      * (*is_contained=0) in another set
>>      * \param instance iMesh instance handle
>>      * \param containing_entity_set Entity set being queried
>>      * \param contained_entity_set Entity set potentially contained in 
>>      *        containing_entity_set
>>      * \param is_contained Pointer to flag returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_isEntSetContained(iMesh_Instance instance,
>>                                /*in*/ const iBase_EntitySetHandle containing_entity_set,
>>                                /*in*/ const iBase_EntitySetHandle contained_entity_set,
>>                                /*out*/ int *is_contained,
>>                                /*out*/ int *err);
>>
>>     /**\brief  Add parent/child links between two sets
>>      *
>>      * Add parent/child links between two sets.  Makes parent point to child
>>      * and child point to parent.
>>      * \param instance iMesh instance handle
>>      * \param parent_entity_set Pointer to parent set
>>      * \param child_entity_set Pointer to child set
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_addPrntChld(iMesh_Instance instance,
>>                          /*in*/ iBase_EntitySetHandle parent_entity_set,
>>                          /*in*/ iBase_EntitySetHandle child_entity_set,
>>                          /*out*/ int *err);
>>
>>     /**\brief  Remove parent/child links between two sets
>>      *
>>      * Remove parent/child links between two sets.
>>      * \param instance iMesh instance handle
>>      * \param parent_entity_set Pointer to parent set
>>      * \param child_entity_set Pointer to child set
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_rmvPrntChld(iMesh_Instance instance,
>>                          /*in*/ iBase_EntitySetHandle parent_entity_set,
>>                          /*in*/ iBase_EntitySetHandle child_entity_set,
>>                          /*out*/ int *err);
>>
>>     /**\brief  Return whether two sets are related by parent/child links
>>      *
>>      * Return whether two sets are related (*is_child=1) or not (*is_child=0)
>>      * by parent/child links
>>      * \param instance iMesh instance handle
>>      * \param parent_entity_set Pointer to parent set
>>      * \param child_entity_set Pointer to child set
>>      * \param is_child Pointer to flag returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_isChildOf(iMesh_Instance instance,
>>                        /*in*/ const iBase_EntitySetHandle parent_entity_set,
>>                        /*in*/ const iBase_EntitySetHandle child_entity_set,
>>                        /*out*/ int *is_child,
>>                        /*out*/ int *err);
>>
>>     /**\brief  Get the number of child sets linked from a specified set
>>      *
>>      * Get the number of child sets linked from a specified set.  If num_hops
>>      * is non-zero, this represents the maximum hops from entity_set to any
>>      * child in the count.
>>      * \param instance iMesh instance handle
>>      * \param entity_set Entity set being queried
>>      * \param num_hops Maximum hops from entity_set_handle to child set,
>>      *        inclusive of the child set
>>      * \param num_child Pointer to number of children returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getNumChld(iMesh_Instance instance,
>>                         /*in*/ const iBase_EntitySetHandle entity_set,
>>                         /*in*/ const int num_hops,
>>                         /*out*/ int *num_child,
>>                         /*out*/ int *err);
>>
>>     /**\brief  Get the number of parent sets linked from a specified set
>>      *
>>      * Get the number of parent sets linked from a specified set.  If num_hops
>>      * is non-zero, this represents the maximum hops from entity_set to any
>>      * parent in the count.
>>      * \param instance iMesh instance handle
>>      * \param entity_set Entity set being queried
>>      * \param num_hops Maximum hops from entity_set_handle to parent set,
>>      *        inclusive of the parent set
>>      * \param num_parent Pointer to number of parents returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getNumPrnt(iMesh_Instance instance,
>>                         /*in*/ const iBase_EntitySetHandle entity_set,
>>                         /*in*/ const int num_hops,
>>                         /*out*/ int *num_parent,
>>                         /*out*/ int *err);
>>
>>     /**\brief  Get the child sets linked from a specified set
>>      *
>>      * Get the child sets linked from a specified set.  If num_hops
>>      * is non-zero, this represents the maximum hops from entity_set to any
>>      * child.
>>      * \param instance iMesh instance handle
>>      * \param from_entity_set Entity set being queried
>>      * \param num_hops Maximum hops from entity_set_handle to child set,
>>      *        inclusive of the child set
>>      * \param *entity_set_handles Pointer to array of child sets
>>      *        returned from function
>>      * \param *entity_set_handles_allocated Pointer to allocated size of 
>>      *        entity_set_handles array
>>      * \param *entity_set_handles_size Pointer to occupied size of 
>>      *        entity_set_handles array
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getChldn(iMesh_Instance instance,
>>                       /*in*/ const iBase_EntitySetHandle from_entity_set,
>>                       /*in*/ const int num_hops,
>>                       /*out*/ iBase_EntitySetHandle** entity_set_handles,
>>                       /*out*/ int* entity_set_handles_allocated,
>>                       /*out*/ int* entity_set_handles_size,
>>                       /*out*/ int *err);
>>
>>     /**\brief  Get the parent sets linked from a specified set
>>      *
>>      * Get the parent sets linked from a specified set.  If num_hops
>>      * is non-zero, this represents the maximum hops from entity_set to any
>>      * parent.
>>      * \param instance iMesh instance handle
>>      * \param from_entity_set Entity set being queried
>>      * \param num_hops Maximum hops from entity_set_handle to parent set,
>>      *        inclusive of the parent set
>>      * \param *entity_set_handles Pointer to array of parent sets
>>      *        returned from function
>>      * \param *entity_set_handles_allocated Pointer to allocated size of 
>>      *        entity_set_handles array
>>      * \param *entity_set_handles_size Pointer to occupied size of 
>>      *        entity_set_handles array
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getPrnts(iMesh_Instance instance,
>>                       /*in*/ const iBase_EntitySetHandle from_entity_set,
>>                       /*in*/ const int num_hops,
>>                       /*out*/ iBase_EntitySetHandle** entity_set_handles,
>>                       /*out*/ int* entity_set_handles_allocated,
>>                       /*out*/ int* entity_set_handles_size,
>>                       /*out*/ int *err);
>>
>>     /**\brief  Set coordinates for an array of vertices
>>      *
>>      * Set coordinates for an array of vertices.  Specified storage 
>>      * order must be either iBase_INTERLEAVED or iBase_BLOCKED, and 
>>      * indicates order of x, y, and z coordinates in coordinate array.
>>      * \param instance iMesh instance handle
>>      * \param vertex_handles Array of vertex handles
>>      * \param vertex_handles_size Number of vertex handles in array
>>      * \param storage_order Storage order of coordinates in coordinate array
>>      * \param new_coords Coordinate array
>>      * \param new_coords_size Size of coordinate array; should be 
>>      *        3*vertex_handles_size
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_setVtxArrCoords(iMesh_Instance instance,
>>                              /*in*/ const iBase_EntityHandle* vertex_handles,
>>                              /*in*/ const int vertex_handles_size,
>>                              /*in*/ const int storage_order,
>>                              /*in*/ const double* new_coords,
>>                              /*in*/ const int new_coords_size,
>>                              /*out*/ int *err);
>>
>>
>>     /**\brief  Create an array of new vertices at specified coordinates
>>      *
>>      * Create an array of new vertices at specified coordinates.  Value of
>>      * storage_order must be either iBase_INTERLEAVED or iBase_BLOCKED.
>>      * \param instance iMesh instance handle
>>      * \param num_verts Number of new vertices to be created
>>      * \param storage_order Storage order of coordinates in new_coords array
>>      * \param new_coords Array of coordinates of new vertices
>>      * \param new_coords_size Number of coordinates in new_coords array, should
>>      *        be 3*num_verts
>>      * \param *new_vertex_handles Pointer to array of new vertex handles 
>>      *        returned from function
>>      * \param *new_vertex_handles_allocated Pointer to allocated size of 
>>      *        new_vertex_handles array
>>      * \param *new_vertex_handles_size Pointer to occupied size of 
>>      *        new_vertex_handles array
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_createVtxArr(iMesh_Instance instance,
>>                           /*in*/ const int num_verts,
>>                           /*in*/ const int storage_order,
>>                           /*in*/ const double* new_coords,
>>                           /*in*/ const int new_coords_size,
>>                           /*inout*/ iBase_EntityHandle** new_vertex_handles,
>>                           /*inout*/ int* new_vertex_handles_allocated,
>>                           /*inout*/ int* new_vertex_handles_size,
>>                           /*out*/ int *err);
>>
>>
>>     /**\brief  Create an array of new entities with specified lower-order topology
>>      *
>>      * Create an array of new entities with specified lower-order topology.  
>>      * Specified new_entity_topology must be value in iMesh_EntityTopology
>>      * enumeration.  Values return in status array must be values in the
>>      * iBase_CreationStatus enumeration.
>>      * \param instance iMesh instance handle
>>      * \param new_entity_topology Topology of created entity
>>      * \param lower_order_entity_handles Array of lower order entity handles
>>      *        used to construct new entities
>>      * \param lower_order_entity_handles_size Number of entities in array of 
>>      *        lower order entity handles
>>      * \param *new_entity_handles Pointer to array of new_entity_handles 
>>      *        returned from function
>>      * \param *new_entity_handles_allocated Pointer to allocated size of 
>>      *        new_entity_handles array
>>      * \param *new_entity_handles_size Pointer to occupied size of 
>>      *        new_entity_handles array
>>      * \param *status Pointer to array of creation status returned from 
>>      *        function
>>      * \param *status_allocated Pointer to allocated size of status array
>>      * \param *status_size Pointer to occupied size of status array
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_createEntArr(iMesh_Instance instance,
>>                           /*in*/ const int new_entity_topology,
>>                           /*in*/ const iBase_EntityHandle* lower_order_entity_handles,
>>                           /*in*/ const int lower_order_entity_handles_size,
>>                           /*out*/ iBase_EntityHandle** new_entity_handles,
>>                           /*out*/ int* new_entity_handles_allocated,
>>                           /*out*/ int* new_entity_handles_size,
>>                           /*inout*/ int** status,
>>                           /*inout*/ int* status_allocated,
>>                           /*out*/ int* status_size,
>>                           /*out*/ int *err);
>>
>>
>>     /**\brief  Delete specified entities
>>      *
>>      * Delete specified entities
>>      * \param instance iMesh instance handle
>>      * \param entity_handles Array of entity handles to be deleted
>>      * \param entity_handles_size Number of entities in array to be deleted
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_deleteEntArr(iMesh_Instance instance,
>>                           /*in*/ const iBase_EntityHandle* entity_handles,
>>                           /*in*/ const int entity_handles_size,
>>                           /*out*/ int *err);
>>
>>
>>     /**\brief  Create a tag with specified name, size, and type
>>      *
>>      * Create a tag with specified name, size, and type.  Tag size is in
>>      * units of size of tag_type data types.  Value input for tag type must be 
>>      * value in iBase_TagType enumeration.
>>      * \param instance iMesh instance handle
>>      * \param tag_name Character string indicating tag name
>>      * \param tag_size Size of each tag value, in units of number of tag_type 
>>      *        entities
>>      * \param tag_type Data type for data stored in this tag
>>      * \param tag_handle Pointer to tag handle returned from function
>>      * \param *err Pointer to error type returned from function
>>      * \param tag_name_len Length of tag name string
>>      */
>>   void iMesh_createTag(iMesh_Instance instance,
>>                        /*in*/ const char* tag_name,
>>                        /*in*/ const int tag_size,
>>                        /*in*/ const int tag_type,
>>                        /*out*/ iBase_TagHandle* tag_handle, 
>>                        /*out*/ int *err,
>>                        /*in*/ const int tag_name_len);
>>
>>
>>     /**\brief  Destroy a tag
>>      *
>>      * Destroy a tag.  If forced is non-zero and entities still have values
>>      * set for this tag, tag is deleted anyway and those values disappear,
>>      * otherwise tag is not deleted.
>>      * \param instance iMesh instance handle
>>      * \param tag_handle Handle of tag to be deleted
>>      * \param forced If non-zero, delete the tag even if entities have values
>>      *        set for that tag
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_destroyTag(iMesh_Instance instance,
>>                         /*in*/ iBase_TagHandle tag_handle,
>>                         /*in*/ const int forced,
>>                         /*out*/ int *err);
>>
>>     /**\brief  Get the name for a given tag handle
>>      *
>>      * Get the name for a given tag handle
>>      * \param instance iMesh instance handle
>>      * \param tag_handle Tag handle being queried
>>      * \param name Pointer to character string to store name returned from 
>>      *        function
>>      * \param *err Pointer to error type returned from function
>>      * \param name_len Length of character string input to function
>>      */
>>   void iMesh_getTagName(iMesh_Instance instance,
>>                         /*in*/ const iBase_TagHandle tag_handle,
>>                         /*inout*/ char *name,
>>                         /*out*/ int *err,
>>                         /*in*/ int name_len);
>>
>>     /**\brief  Get size of a tag in units of numbers of tag data type
>>      *
>>      * Get size of a tag in units of numbers of tag data type
>>      * \param instance iMesh instance handle
>>      * \param tag_handle Handle of tag being queried
>>      * \param tag_size Pointer to tag size returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getTagSizeValues(iMesh_Instance instance,
>>                               /*in*/ const iBase_TagHandle tag_handle,
>>                               /*out*/ int *tag_size,
>>                               /*out*/ int *err);
>>
>>     /**\brief  Get size of a tag in units of bytes
>>      *
>>      * Get size of a tag in units of bytes
>>      * \param instance iMesh instance handle
>>      * \param tag_handle Handle of tag being queried
>>      * \param tag_size Pointer to tag size returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getTagSizeBytes(iMesh_Instance instance,
>>                              /*in*/ const iBase_TagHandle tag_handle,
>>                              /*out*/ int *tag_size,
>>                              /*out*/ int *err);
>>
>>     /**\brief  Get a the handle of an existing tag with the specified name
>>      *
>>      * Get a the handle of an existing tag with the specified name
>>      * \param instance iMesh instance handle
>>      * \param tag_name Name of tag being queried
>>      * \param tag_handle Pointer to tag handle returned from function
>>      * \param *err Pointer to error type returned from function
>>      * \param tag_name_len Length of tag name string
>>      */
>>   void iMesh_getTagHandle(iMesh_Instance instance,
>>                           /*in*/ const char* tag_name,
>>                           /*out*/ iBase_TagHandle *tag_handle, 
>>                           /*out*/ int *err,
>>                           int tag_name_len);
>>
>>     /**\brief  Get the data type of the specified tag handle
>>      *
>>      * Get the data type of the specified tag handle.  Tag type is a value in
>>      * the iBase_TagType enumeration.
>>      * \param instance iMesh instance handle
>>      * \param tag_handle Handle for the tag being queried
>>      * \param tag_type Pointer to tag type returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getTagType(iMesh_Instance instance,
>>                         /*in*/ const iBase_TagHandle tag_handle,
>>                         /*out*/ int *tag_type,
>>                         /*out*/ int *err);
>>
>>     /**\brief  Set a tag value of arbitrary type on an entity set
>>      *
>>      * Set a tag value of arbitrary type on an entity set.  Tag data is 
>>      * passed as char* type,
>>      * but really represents pointer to arbitrary data.
>>      * \param instance iMesh instance handle
>>      * \param entity_set_handle Entity set on which tag is being set
>>      * \param tag_handle Tag being set on an entity set
>>      * \param tag_value Pointer to tag data being set on entity set
>>      * \param tag_value_size Size in bytes of tag data
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_setEntSetData(iMesh_Instance instance,
>>                            /*in*/ iBase_EntitySetHandle entity_set_handle,
>>                            /*in*/ const iBase_TagHandle tag_handle,
>>                            /*in*/ const char* tag_value,
>>                            /*in*/ const int tag_value_size,
>>                            /*out*/ int *err);
>>
>>
>>     /**\brief  Set a tag value of integer type on an entity set
>>      *
>>      * Set a tag value of integer type on an entity set.
>>      * \param instance iMesh instance handle
>>      * \param entity_set Entity set on which tag is being set
>>      * \param tag_handle Tag being set on an entity set
>>      * \param tag_value Tag value being set on entity set
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_setEntSetIntData(iMesh_Instance instance,
>>                               /*in*/ iBase_EntitySetHandle entity_set,
>>                               /*in*/ const iBase_TagHandle tag_handle,
>>                               /*in*/ const int tag_value,
>>                               /*out*/ int *err);
>>
>>
>>     /**\brief  Set a tag value of double type on an entity set
>>      *
>>      * Set a tag value of double type on an entity set.
>>      * \param instance iMesh instance handle
>>      * \param entity_set Entity set on which tag is being set
>>      * \param tag_handle Tag being set on an entity set
>>      * \param tag_value Tag value being set on entity set
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_setEntSetDblData(iMesh_Instance instance,
>>                               /*in*/ iBase_EntitySetHandle entity_set,
>>                               /*in*/ const iBase_TagHandle tag_handle,
>>                               /*in*/ const double tag_value,
>>                               /*out*/ int *err);
>>
>>
>>     /**\brief  Set a tag value of entity handle type on an entity set
>>      *
>>      * Set a tag value of entity handle type on an entity set.
>>      * \param instance iMesh instance handle
>>      * \param entity_set Entity set on which tag is being set
>>      * \param tag_handle Tag being set on an entity set
>>      * \param tag_value Tag value being set on entity set
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_setEntSetEHData(iMesh_Instance instance,
>>                              /*in*/ iBase_EntitySetHandle entity_set,
>>                              /*in*/ const iBase_TagHandle tag_handle,
>>                              /*in*/ const iBase_EntityHandle tag_value,
>>                              /*out*/ int *err);
>>
>>
>>     /**\brief  Get the value of a tag of arbitrary type on an entity set
>>      *
>>      * Get the value of a tag of arbitrary type on an entity set.  Tag data 
>>      * is passed back as char* type, but really represents arbitrary data.
>>      * \param instance iMesh instance handle
>>      * \param entity_set_handle Entity set on which tag is being set
>>      * \param tag_handle Tag being set on an entity set
>>      * \param *tag_value Pointer to tag data array being queried
>>      * \param *tag_value_allocated Pointer to tag data array allocated size
>>      * \param *tag_value_size Pointer to tag data array occupied size
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getEntSetData(iMesh_Instance instance,
>>                            /*in*/ const iBase_EntitySetHandle entity_set_handle,
>>                            /*in*/ const iBase_TagHandle tag_handle,
>>                            /*inout*/ char** tag_value,
>>                            /*inout*/ int* tag_value_allocated,
>>                            /*inout*/ int* tag_value_size,
>>                            /*out*/ int *err);
>>
>>     /**\brief  Get the value of a tag of integer type on an entity set
>>      *
>>      * Get the value of a tag of integer type on an entity set.
>>      * \param instance iMesh instance handle
>>      * \param entity_set Entity set on which tag is being set
>>      * \param tag_handle Tag being set on an entity set
>>      * \param *out_data Pointer to tag value returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getEntSetIntData(iMesh_Instance instance,
>>                               /*in*/ const iBase_EntitySetHandle entity_set,
>>                               /*in*/ const iBase_TagHandle tag_handle,
>>                               /*out*/ int *out_data,
>>                               /*out*/ int *err);
>>
>>     /**\brief  Get the value of a tag of double type on an entity set
>>      *
>>      * Get the value of a tag of double type on an entity set.
>>      * \param instance iMesh instance handle
>>      * \param entity_set Entity set on which tag is being set
>>      * \param tag_handle Tag being set on an entity set
>>      * \param *out_data Pointer to tag value returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getEntSetDblData(iMesh_Instance instance,
>>                               /*in*/ const iBase_EntitySetHandle entity_set,
>>                               /*in*/ const iBase_TagHandle tag_handle,
>>                               /*out*/ double *out_data,
>>                               /*out*/ int *err);
>>
>>     /**\brief  Get the value of a tag of entity handle type on an entity set
>>      *
>>      * Get the value of a tag of entity handle type on an entity set.
>>      * \param instance iMesh instance handle
>>      * \param entity_set Entity set on which tag is being set
>>      * \param tag_handle Tag being set on an entity set
>>      * \param *out_data Pointer to tag value returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getEntSetEHData(iMesh_Instance instance,
>>                              /*in*/ const iBase_EntitySetHandle entity_set,
>>                              /*in*/ const iBase_TagHandle tag_handle,
>>                              /*out*/ iBase_EntityHandle *out_data,
>>                              /*out*/ int *err);
>>
>>     /**\brief  Get all the tags associated with a specified entity set
>>      *
>>      * Get all the tags associated with a specified entity set
>>      * \param instance iMesh instance handle
>>      * \param entity_set_handle Entity being queried
>>      * \param *tag_handles Pointer to array of tag_handles returned from 
>>      *        function
>>      * \param *tag_handles_allocated Pointer to allocated size of tag_handles 
>>      *        array
>>      * \param *tag_handles_size Pointer to occupied size of tag_handles array
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getAllEntSetTags(iMesh_Instance instance,
>>                               /*in*/ const iBase_EntitySetHandle entity_set_handle,
>>                               /*out*/ iBase_TagHandle** tag_handles,
>>                               /*out*/ int* tag_handles_allocated,
>>                               /*out*/ int* tag_handles_size,
>>                               /*out*/ int *err);
>>
>>     /**\brief  Remove a tag value from an entity set
>>      *
>>      * Remove a tag value from an entity set
>>      * \param instance iMesh instance handle
>>      * \param entity_set_handle Entity set from which tag is being removed
>>      * \param tag_handle Tag handle of tag being removed
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_rmvEntSetTag(iMesh_Instance instance,
>>                           /*in*/ iBase_EntitySetHandle entity_set_handle,
>>                           /*in*/ const iBase_TagHandle tag_handle,
>>                           /*out*/ int *err);
>>
>>     /**\brief  Set coordinates for a vertex
>>      *
>>      * Set coordinates for a vertex.
>>      * \param instance iMesh instance handle
>>      * \param vertex_handle vertex handle being set
>>      * \param x x coordinate being set
>>      * \param y y coordinate being set
>>      * \param z z coordinate being set
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_setVtxCoords(iMesh_Instance instance,
>>                           /*in*/ iBase_EntityHandle vertex_handle,
>>                           /*in*/ const double x, /*in*/ const double y,
>>                           /*in*/ const double z,
>>                           /*out*/ int *err);
>>
>>     /**\brief  Create a new vertex at specified coordinates
>>      *
>>      * Create a new vertex at specified coordinates.
>>      * \param instance iMesh instance handle
>>      * \param x x coordinate of new vertex
>>      * \param y y coordinate of new vertex
>>      * \param z z coordinate of new vertex
>>      * \param new_vertex_handle Pointer to new vertex handles returned from 
>>      *        function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_createVtx(iMesh_Instance instance,
>>                        /*in*/ const double x, /*in*/ const double y,
>>                        /*in*/ const double z,
>>                        /*out*/ iBase_EntityHandle* new_vertex_handle,
>>                        /*out*/ int *err);
>>
>>     /**\brief  Create a new entity with specified lower-order topology
>>      *
>>      * Create a new entity with specified lower-order topology.  
>>      * Specified new_entity_topology must be value in iMesh_EntityTopology
>>      * enumeration.  Value returned as status must be a value in the
>>      * iBase_CreationStatus enumeration.
>>      * \param instance iMesh instance handle
>>      * \param new_entity_topology Topology of created entity
>>      * \param lower_order_entity_handles Array of lower order entity handles
>>      *        used to construct new entity
>>      * \param lower_order_entity_handles_size Number of entities in array of 
>>      *        lower order entity handles
>>      * \param new_entity_handle Pointer to new entity handle returned from 
>>      *        function
>>      * \param status Pointer to creation status returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_createEnt(iMesh_Instance instance,
>>                        /*in*/ const int new_entity_topology,
>>                        /*in*/ const iBase_EntityHandle* lower_order_entity_handles,
>>                        /*in*/ const int lower_order_entity_handles_size,
>>                        /*out*/ iBase_EntityHandle* new_entity_handle,
>>                        /*out*/ int* status,
>>                        /*out*/ int *err);
>>
>>     /**\brief  Delete specified entity
>>      *
>>      * Delete specified entity
>>      * \param instance iMesh instance handle
>>      * \param entity_handle Entity to be deleted
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_deleteEnt(iMesh_Instance instance,
>>                        /*in*/ iBase_EntityHandle entity_handle,
>>                        /*out*/ int *err);
>>
>>     /**\brief  Get tag values of arbitrary type for an array of entities
>>      *
>>      * Get tag values of arbitrary type for an array of entities.  Tag data 
>>      * is returned as char* type, but really represents arbitrary data.
>>      * \param instance iMesh instance handle
>>      * \param entity_handles Entity array on which tag is being set
>>      * \param entity_handles_size Number of entities in array
>>      * \param tag_handle Tag being set on an entity
>>      * \param *tag_values Pointer to tag data array being returned from 
>>      *        function
>>      * \param tag_values_allocated Pointer to allocated size of tag data array
>>      * \param tag_values_size Pointer to occupied size of tag data array
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getArrData(iMesh_Instance instance,
>>                         /*in*/ const iBase_EntityHandle* entity_handles,
>>                         /*in*/ const int entity_handles_size,
>>                         /*in*/ const iBase_TagHandle tag_handle,
>>                         /*inout*/ char** tag_values,
>>                         /*inout*/int* tag_values_allocated,
>>                         /*out*/ int* tag_values_size,
>>                         /*out*/ int *err);
>>
>>     /**\brief  Get tag values of integer type for an array of entities
>>      *
>>      * Get tag values of integer type for an array of entities.
>>      * \param instance iMesh instance handle
>>      * \param entity_handles Entity array on which tag is being set
>>      * \param entity_handles_size Number of entities in array
>>      * \param tag_handle Tag being set on an entity
>>      * \param *tag_values Pointer to tag data array being returned from 
>>      *        function
>>      * \param tag_values_allocated Pointer to allocated size of tag data array
>>      * \param tag_values_size Pointer to occupied size of tag data array
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getIntArrData(iMesh_Instance instance,
>>                            /*in*/ const iBase_EntityHandle* entity_handles,
>>                            /*in*/ const int entity_handles_size,
>>                            /*in*/ const iBase_TagHandle tag_handle,
>>                            /*inout*/ int** tag_values,
>>                            /*inout*/ int* tag_values_allocated,
>>                            /*out*/ int* tag_values_size,
>>                            /*out*/ int *err);
>>
>>     /**\brief  Get tag values of double type for an array of entities
>>      *
>>      * Get tag values of double type for an array of entities.
>>      * \param instance iMesh instance handle
>>      * \param entity_handles Entity array on which tag is being set
>>      * \param entity_handles_size Number of entities in array
>>      * \param tag_handle Tag being set on an entity
>>      * \param *tag_values Pointer to tag data array being returned from 
>>      *        function
>>      * \param tag_values_allocated Pointer to allocated size of tag data array
>>      * \param tag_values_size Pointer to occupied size of tag data array
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getDblArrData(iMesh_Instance instance,
>>                            /*in*/ const iBase_EntityHandle* entity_handles,
>>                            /*in*/ const int entity_handles_size,
>>                            /*in*/ const iBase_TagHandle tag_handle,
>>                            /*inout*/ double** tag_values,
>>                            /*inout*/ int* tag_values_allocated,
>>                            /*out*/ int* tag_values_size,
>>                            /*out*/ int *err);
>>
>>     /**\brief  Get tag values of entity handle type for an array of entities
>>      *
>>      * Get tag values of entity handle type for an array of entities.
>>      * \param instance iMesh instance handle
>>      * \param entity_handles Entity array on which tag is being set
>>      * \param entity_handles_size Number of entities in array
>>      * \param tag_handle Tag being set on an entity
>>      * \param *tag_value Pointer to tag data array being returned from 
>>      *        function
>>      * \param tag_value_allocated Pointer to allocated size of tag data array
>>      * \param tag_value_size Pointer to occupied size of tag data array
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getEHArrData(iMesh_Instance instance,
>>                           /*in*/ const iBase_EntityHandle* entity_handles,
>>                           /*in*/ const int entity_handles_size,
>>                           /*in*/ const iBase_TagHandle tag_handle,
>>                           /*inout*/ iBase_EntityHandle** tag_value,
>>                           /*inout*/ int* tag_value_allocated,
>>                           /*out*/ int* tag_value_size,
>>                           /*out*/ int *err);
>>
>>     /**\brief  Set tag values of arbitrary type on an array of entities
>>      *
>>      * Set tag values of arbitrary type on an array of entities.  Tag data is 
>>      * passed as char* type, but really represents pointer to arbitrary data.
>>      * \param instance iMesh instance handle
>>      * \param entity_handles Entity array on which tag is being set
>>      * \param entity_handles_size Number of entities in array
>>      * \param tag_handle Tag being set on an entity
>>      * \param tag_values Pointer to tag data being set on entity
>>      * \param tag_values_size Size in total bytes of tag data
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_setArrData(iMesh_Instance instance,
>>                         /*in*/ const iBase_EntityHandle* entity_handles,
>>                         /*in*/ const int entity_handles_size,
>>                         /*in*/ const iBase_TagHandle tag_handle,
>>                         /*in*/ const char* tag_values,
>>                         /*in*/ const int tag_values_size,
>>                         /*out*/ int *err);
>>
>>     /**\brief  Set tag values of integer type on an array of entities
>>      *
>>      * Set tag values of integer type on an array of entities.
>>      * \param instance iMesh instance handle
>>      * \param entity_handles Entity array on which tag is being set
>>      * \param entity_handles_size Number of entities in array
>>      * \param tag_handle Tag being set on an entity
>>      * \param tag_values Pointer to tag data being set on entities
>>      * \param tag_values_size Size in total number of integers of tag data
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_setIntArrData(iMesh_Instance instance,
>>                            /*in*/ const iBase_EntityHandle* entity_handles,
>>                            /*in*/ const int entity_handles_size,
>>                            /*in*/ const iBase_TagHandle tag_handle,
>>                            /*in*/ const int* tag_values,
>>                            /*in*/ const int tag_values_size,
>>                            /*out*/ int *err);
>>
>>     /**\brief  Set tag values of double type on an array of entities
>>      *
>>      * Set tag values of double type on an array of entities.
>>      * \param instance iMesh instance handle
>>      * \param entity_handles Entity array on which tag is being set
>>      * \param entity_handles_size Number of entities in array
>>      * \param tag_handle Tag being set on an entity
>>      * \param tag_values Pointer to tag data being set on entities
>>      * \param tag_values_size Size in total number of doubles of tag data
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_setDblArrData(iMesh_Instance instance,
>>                            /*in*/ const iBase_EntityHandle* entity_handles,
>>                            /*in*/ const int entity_handles_size,
>>                            /*in*/ const iBase_TagHandle tag_handle,
>>                            /*in*/ const double* tag_values,
>>                            /*in*/ const int tag_values_size,
>>                            /*out*/ int *err);
>>
>>     /**\brief  Set tag values of entity handle type on an array of entities
>>      *
>>      * Set tag values of entity handle type on an array of entities.
>>      * \param instance iMesh instance handle
>>      * \param entity_handles Entity array on which tag is being set
>>      * \param entity_handles_size Number of entities in array
>>      * \param tag_handle Tag being set on an entity
>>      * \param tag_values Pointer to tag data being set on entities
>>      * \param tag_values_size Size in total number of entity handles of tag 
>>      *        data
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_setEHArrData(iMesh_Instance instance,
>>                           /*in*/ const iBase_EntityHandle* entity_handles,
>>                           /*in*/ const int entity_handles_size,
>>                           /*in*/ const iBase_TagHandle tag_handle,
>>                           /*in*/ const iBase_EntityHandle* tag_values,
>>                           /*in*/ const int tag_values_size,
>>                           /*out*/ int *err);
>>
>>     /**\brief  Remove a tag value from an array of entities
>>      *
>>      * Remove a tag value from an array of entities
>>      * \param instance iMesh instance handle
>>      * \param entity_handles Entity from which tag is being removed
>>      * \param entity_handles_size Number of entities in entity array
>>      * \param tag_handle Tag handle of tag being removed
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_rmvArrTag(iMesh_Instance instance,
>>                        /*in*/ const iBase_EntityHandle* entity_handles,
>>                        /*in*/ const int entity_handles_size,
>>                        /*in*/ const iBase_TagHandle tag_handle,
>>                        /*out*/ int *err);
>>
>>     /**\brief  Get the value of a tag of arbitrary type on an entity
>>      *
>>      * Get the value of a tag of arbitrary type on an entity.  Tag data 
>>      * is passed back as char* type, but really represents arbitrary data.
>>      * \param instance iMesh instance handle
>>      * \param entity_handle Entity on which tag is being set
>>      * \param tag_handle Tag being set on an entity
>>      * \param *tag_value Pointer to tag data array being queried
>>      * \param *tag_value_allocated Pointer to tag data array allocated size
>>      * \param *tag_value_size Pointer to tag data array occupied size
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getData(iMesh_Instance instance,
>>                      /*in*/ const iBase_EntityHandle entity_handle,
>>                      /*in*/ const iBase_TagHandle tag_handle,
>>                      /*inout*/ char** tag_value,
>>                      /*inout*/ int *tag_value_allocated,
>>                      /*out*/ int *tag_value_size,
>>                      /*out*/ int *err);
>>
>>     /**\brief  Get the value of a tag of integer type on an entity
>>      *
>>      * Get the value of a tag of integer type on an entity.
>>      * \param instance iMesh instance handle
>>      * \param entity_handle Entity on which tag is being set
>>      * \param tag_handle Tag being set on an entity
>>      * \param *out_data Pointer to tag value returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getIntData(iMesh_Instance instance,
>>                         /*in*/ const iBase_EntityHandle entity_handle,
>>                         /*in*/ const iBase_TagHandle tag_handle,
>>                         /*out*/ int *out_data,
>>                         /*out*/ int *err);
>>
>>     /**\brief  Get the value of a tag of double type on an entity
>>      *
>>      * Get the value of a tag of double type on an entity.
>>      * \param instance iMesh instance handle
>>      * \param entity_handle Entity on which tag is being set
>>      * \param tag_handle Tag being set on an entity
>>      * \param *out_data Pointer to tag value returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getDblData(iMesh_Instance instance,
>>                         /*in*/ const iBase_EntityHandle entity_handle,
>>                         /*in*/ const iBase_TagHandle tag_handle,
>>                         /*out*/ double *out_data,
>>                         /*out*/ int *err);
>>
>>     /**\brief  Get the value of a tag of entity handle type on an entity
>>      *
>>      * Get the value of a tag of entity handle type on an entity.
>>      * \param instance iMesh instance handle
>>      * \param entity_handle Entity on which tag is being set
>>      * \param tag_handle Tag being set on an entity
>>      * \param *out_data Pointer to tag value returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getEHData(iMesh_Instance instance,
>>                        /*in*/ const iBase_EntityHandle entity_handle,
>>                        /*in*/ const iBase_TagHandle tag_handle,
>>                        /*out*/ iBase_EntityHandle *out_data,
>>                        /*out*/ int *err);
>>
>>     /**\brief  Set a tag value of arbitrary type on an entity
>>      *
>>      * Set a tag value of arbitrary type on an entity.  Tag data is 
>>      * passed as char* type, but really represents pointer to arbitrary data.
>>      * \param instance iMesh instance handle
>>      * \param entity_handle Entity on which tag is being set
>>      * \param tag_handle Tag being set on an entity
>>      * \param tag_value Pointer to tag data being set on entity
>>      * \param tag_value_size Size in bytes of tag data
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_setData(iMesh_Instance instance,
>>                      /*in*/ iBase_EntityHandle entity_handle,
>>                      /*in*/ const iBase_TagHandle tag_handle,
>>                      /*in*/ const char* tag_value,
>>                      /*in*/ const int tag_value_size,
>>                      /*out*/ int *err);
>>
>>     /**\brief  Set a tag value of integer type on an entity
>>      *
>>      * Set a tag value of integer type on an entity.
>>      * \param instance iMesh instance handle
>>      * \param entity_handle Entity on which tag is being set
>>      * \param tag_handle Tag being set on an entity
>>      * \param tag_value Tag value being set on entity
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_setIntData(iMesh_Instance instance,
>>                         /*in*/ iBase_EntityHandle entity_handle,
>>                         /*in*/ const iBase_TagHandle tag_handle,
>>                         /*in*/ const int tag_value,
>>                         /*out*/ int *err);
>>
>>     /**\brief  Set a tag value of double type on an entity
>>      *
>>      * Set a tag value of double type on an entity.
>>      * \param instance iMesh instance handle
>>      * \param entity_handle Entity on which tag is being set
>>      * \param tag_handle Tag being set on an entity
>>      * \param tag_value Tag value being set on entity
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_setDblData(iMesh_Instance instance,
>>
>>                         /*in*/ iBase_EntityHandle entity_handle,
>>                         /*in*/ const iBase_TagHandle tag_handle,
>>                         /*in*/ const double tag_value,
>>                         /*out*/ int *err);
>>
>>     /**\brief  Set a tag value of entity handle type on an entity
>>      *
>>      * Set a tag value of entity handle type on an entity.
>>      * \param instance iMesh instance handle
>>      * \param entity_handle Entity on which tag is being set
>>      * \param tag_handle Tag being set on an entity
>>      * \param tag_value Tag value being set on entity
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_setEHData(iMesh_Instance instance,
>>                        /*in*/ iBase_EntityHandle entity_handle,
>>                        /*in*/ const iBase_TagHandle tag_handle,
>>                        /*in*/ const iBase_EntityHandle tag_value,
>>                        /*out*/ int *err);
>>
>>     /**\brief  Get all the tags associated with a specified entity handle
>>      *
>>      * Get all the tags associated with a specified entity handle
>>      * \param instance iMesh instance handle
>>      * \param entity_handle Entity being queried
>>      * \param *tag_handles Pointer to array of tag_handles returned from 
>>      *        function
>>      * \param *tag_handles_allocated Pointer to allocated size of tag_handles 
>>      *        array
>>      * \param *tag_handles_size Pointer to occupied size of tag_handles array
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getAllTags(iMesh_Instance instance,
>>                         /*in*/ const iBase_EntityHandle entity_handle,
>>                         /*inout*/ iBase_TagHandle** tag_handles,
>>                         /*inout*/ int* tag_handles_allocated,
>>                         /*out*/ int* tag_handles_size,
>>                         /*out*/ int *err);
>>
>>     /**\brief  Remove a tag value from an entity
>>      *
>>      * Remove a tag value from an entity
>>      * \param instance iMesh instance handle
>>      * \param entity_handle Entity from which tag is being removed
>>      * \param tag_handle Tag handle of tag being removed
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_rmvTag(iMesh_Instance instance,
>>                     /*in*/ iBase_EntityHandle entity_handle,
>>                     /*in*/ const iBase_TagHandle tag_handle,
>>                     /*out*/ int *err);
>>
>>     /**\brief  Initialize an iterator over specified entity type, topology, and size
>>      *
>>      * Initialize an iterator over specified entity type, topology, and size,
>>      * for a specified set or instance.  Iterator returned can be used as input
>>      * to functions returning the entity for the iterator.  If all entities of 
>>      * a specified type and/or topology are to be iterated, specify 
>>      * iBase_ALL_TYPES or iMesh_ALL_TOPOLOGIES, respectively.  Specified type 
>>      * or topology must be a value in the iBase_EntityType or 
>>      * iMesh_EntityTopology enumerations, respectively.
>>      * \param instance iMesh instance handle
>>      * \param entity_set_handle Entity set being iterated
>>      * \param requested_entity_type Type of entity to iterate
>>      * \param requested_entity_topology Topology of entity to iterate
>>      * \param entity_iterator Pointer to iterator returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_initEntIter(iMesh_Instance instance,
>>                          /*in*/ const iBase_EntitySetHandle entity_set_handle,
>>                          /*in*/ const int requested_entity_type,
>>                          /*in*/ const int requested_entity_topology,
>>                          /*out*/ iMesh_EntityIterator* entity_iterator,
>>                          /*out*/ int *err);
>>
>>     /**\brief  Get entity corresponding to an iterator and increment iterator
>>      *
>>      * Get the entity corresponding to an array iterator, and increment the 
>>      * iterator.  Also return whether the next value of the iterator has
>>      * an entity (if non-zero, next iterator value is the end of the
>>      * iteration).
>>      * \param instance iMesh instance handle
>>      * \param entity_iterator Iterator being queried
>>      * \param entity_handle Pointer to an entity handle corresponding to the
>>      *        current value of iterator
>>      * \param has_data Pointer to flag; if returned non-zero, next iterator
>>      *        has an entity
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getNextEntIter(iMesh_Instance instance,
>>                             /*in*/ iMesh_EntityIterator entity_iterator,
>>                             /*out*/ iBase_EntityHandle* entity_handle,
>>                             /*out*/ int *has_data,
>>                             /*out*/ int *err);
>>
>>     /**\brief  Reset the iterator
>>      *
>>      * Reset the iterator
>>      * \param instance iMesh instance handle
>>      * \param entity_iterator Iterator to reset
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_resetEntIter(iMesh_Instance instance,
>>                           /*in*/ iMesh_EntityIterator entity_iterator,
>>                           /*out*/ int *err);
>>
>>     /**\brief  Destroy the specified iterator
>>      *
>>      * Destroy the specified iterator
>>      * \param instance iMesh instance handle
>>      * \param entity_iterator Iterator which gets destroyed
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_endEntIter(iMesh_Instance instance,
>>                         /*in*/ iMesh_EntityIterator entity_iterator,
>>                         /*out*/ int *err);
>>
>>     /**\brief  Get the entity topology for the specified entity
>>      *
>>      * Get the entity topology for the specified entity.  Topology
>>      * returned is a value in the iMesh_EntityTopology enumeration.
>>      * \param instance iMesh instance handle
>>      * \param entity_handle Entity handle being queried
>>      * \param *out_topo Pointer to entity topology returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getEntTopo(iMesh_Instance instance,
>>                         /*in*/ const iBase_EntityHandle entity_handle,
>>                         /*out*/ int *out_topo,
>>                         /*out*/ int *err);
>>
>>     /**\brief  Get the entity type for the specified entity
>>      *
>>      * Get the entity type for the specified entity.  Type returned is a value
>>      * in the iBase_EntityType enumeration.
>>      * \param instance iMesh instance handle
>>      * \param entity_handle Entity handle being queried
>>      * \param *out_type Pointer to entity type returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getEntType(iMesh_Instance instance,
>>                         /*in*/ const iBase_EntityHandle entity_handle,
>>                         /*out*/ int *out_type,
>>                         /*out*/ int *err);
>>
>>     /**\brief  Get coordinates of specified vertex
>>      *
>>      * Get coordinates of specified vertex.
>>      * \param instance iMesh instance handle
>>      * \param vertex_handle Mesh vertex being queried
>>      * \param *x Pointer to x coordinate returned from function
>>      * \param *y Pointer to y coordinate returned from function
>>      * \param *z Pointer to z coordinate returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getVtxCoord(iMesh_Instance instance,
>>                          /*in*/ const iBase_EntityHandle vertex_handle,
>>                          /*out*/ double *x, /*out*/ double *y, /*out*/ double *z,
>>                          /*out*/ int *err);
>>
>>     /**\brief  Get entities of specified type adjacent to an entity
>>      *
>>      * Get entities of specified type adjacent to an entity.  Specified type
>>      * must be value in the iBase_EntityType enumeration.
>>      * \param instance iMesh instance handle
>>      * \param entity_handle Entity handle being queried
>>      * \param entity_type_requested Type of adjacent entities requested
>>      * \param *adj_entity_handles Pointer to array of adjacent entities
>>      *        returned from function
>>      * \param *adj_entity_handles_allocated Pointer to allocated size of 
>>      *        adj_entity_handles array
>>      * \param *adj_entity_handles_size Pointer to occupied size of 
>>      *        adj_entity_handles array
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_getEntAdj(iMesh_Instance instance,
>>                        /*in*/ const iBase_EntityHandle entity_handle,
>>                        /*in*/ const int entity_type_requested,
>>                        /*inout*/ iBase_EntityHandle** adj_entity_handles,
>>                        /*inout*/ int* adj_entity_handles_allocated,
>>                        /*out*/ int* adj_entity_handles_size,
>>                        /*out*/ int *err);
>>
>> /**\brief Get "2nd order" adjacencies to an entity
>>  * Get "2nd order" adjacencies to an entity, that is, from an entity, through
>>  * other entities of a specified "bridge" dimension, to other entities of another 
>>  * specified "to" dimension.
>>  * \param instance iMesh instance for this call
>>  * \param entity_handle Entity from which adjacencies are requested
>>  * \param bridge_entity_type  Type of bridge entity for 2nd order adjacencies
>>  * \param requested_entity_type Type of adjacent entities returned
>>  * \param adjacent_entities Adjacent entities
>>  * \param adjacent_entities_allocated Allocated size of returned array
>>  * \param adjacent_entities_size Occupied size of returned array
>>  * \param err 
>>  */
>>   void iMesh_getEnt2ndAdj( iMesh_Instance instance,
>>                            iBase_EntityHandle entity_handle,
>>                            int bridge_entity_type,
>>                            int requested_entity_type,
>>                            iBase_EntityHandle** adjacent_entities,
>>                            int* adjacent_entities_allocated,
>>                            int* adjacent_entities_size,
>>                            int* err );
>>
>>     /**\brief  Subtract contents of one entity set from another
>>      *
>>      * Subtract contents of one entity set from another
>>      * \param instance iMesh instance handle
>>      * \param entity_set_1 Entity set from which other set is being subtracted
>>      * \param entity_set_2 Entity set being subtracted from other set
>>      * \param result_entity_set Pointer to entity set returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_subtract(iMesh_Instance instance,
>>                       /*in*/ const iBase_EntitySetHandle entity_set_1,
>>                       /*in*/ const iBase_EntitySetHandle entity_set_2,
>>                       /*out*/ iBase_EntitySetHandle* result_entity_set,
>>                       /*out*/ int *err);
>>
>>     /**\brief  Intersect contents of one entity set with another
>>      *
>>      * Intersect contents of one entity set with another
>>      * \param instance iMesh instance handle
>>      * \param entity_set_1 Entity set being intersected with another
>>      * \param entity_set_2 Entity set being intersected with another
>>      * \param result_entity_set Pointer to entity set returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_intersect(iMesh_Instance instance,
>>                        /*in*/ const iBase_EntitySetHandle entity_set_1,
>>                        /*in*/ const iBase_EntitySetHandle entity_set_2,
>>                        /*out*/ iBase_EntitySetHandle* result_entity_set,
>>                        /*out*/ int *err);
>>
>>     /**\brief  Unite contents of one entity set with another
>>      *
>>      * Unite contents of one entity set with another
>>      * \param instance iMesh instance handle
>>      * \param entity_set_1 Entity set being united with another
>>      * \param entity_set_2 Entity set being united with another
>>      * \param result_entity_set Pointer to entity set returned from function
>>      * \param *err Pointer to error type returned from function
>>      */
>>   void iMesh_unite(iMesh_Instance instance,
>>                    /*in*/ const iBase_EntitySetHandle entity_set_1,
>>                    /*in*/ const iBase_EntitySetHandle entity_set_2,
>>                    /*out*/ iBase_EntitySetHandle* result_entity_set,
>>                    /*out*/ int *err);
>>
>> #ifdef __cplusplus
>> } // extern "C"
>> #endif
>>
>> #endif /* ifndef IMESH_CBIND_H__ */
>>
>> ______________________________________________________________________
>> #ifndef __IBASE_H__
>> #define __IBASE_H__
>>
>> #ifndef ITAPS
>> #define ITAPS
>> #endif
>>
>> #ifdef __cplusplus
>>
>> extern "C"
>> {
>> #endif
>>
>>     /*==========================================================
>>      * TYPEDEF'S
>>      *==========================================================
>>      */
>>   typedef void* iBase_Instance;
>>   typedef struct iBase_EntityHandle_Private* iBase_EntityHandle;
>>   typedef struct iBase_EntitySetHandle_Private* iBase_EntitySetHandle;
>>   typedef struct iBase_TagHandle_Private* iBase_TagHandle;
>>
>>     /*==========================================================
>>      * ENTITYTYPE ENUMERATION
>>      *==========================================================
>>      */
>>   enum iBase_EntityType {
>>     iBase_VERTEX = 0,
>>     iBase_EDGE,
>>     iBase_FACE,
>>     iBase_REGION,
>>     iBase_ALL_TYPES
>>   };
>>
>>     /*==========================================================
>>      * ADJACENCYCOST ENUMERATION
>>      *==========================================================
>>      */
>>   enum iBase_AdjacencyCost {
>>     iBase_UNAVAILABLE = 0,          /**< Adjacency information not supported */
>>     iBase_ALL_ORDER_1,              /**< No more than local mesh traversal required */
>>     iBase_ALL_ORDER_LOGN,           /**< Global tree search */
>>     iBase_ALL_ORDER_N,              /**< Global exhaustive search */
>>     iBase_SOME_ORDER_1,             /**< Only some adjacency info, local */
>>     iBase_SOME_ORDER_LOGN,          /**< Only some adjacency info, tree */
>>     iBase_SOME_ORDER_N              /**< Only some adjacency info, exhaustive */
>>   };
>>
>>     /*==========================================================
>>      * CREATIONSTATUS ENUMERATION
>>      *==========================================================
>>      */
>>   enum iBase_CreationStatus {
>>     iBase_NEW = 0,
>>     iBase_ALREADY_EXISTED,
>>     iBase_CREATED_DUPLICATE,
>>     iBase_CREATION_FAILED
>>   };
>>
>>     /*==========================================================
>>      * ERRORACTIONS ENUMERATION
>>      *==========================================================
>>      */
>>   enum iBase_ErrorActions {
>>     iBase_SILENT,
>>     iBase_WARN_ONLY,
>>     iBase_THROW_ERROR
>>   };
>>
>>     /*==========================================================
>>      * ERRORTYPE ENUMERATION
>>      *==========================================================
>>      */
>>   enum iBase_ErrorType {
>>     iBase_SUCCESS,
>>     iBase_MESH_ALREADY_LOADED,
>>     iBase_NO_MESH_DATA,
>>     iBase_FILE_NOT_FOUND,
>>     iBase_FILE_WRITE_ERROR,
>>     iBase_NIL_ARRAY,
>>     iBase_BAD_ARRAY_SIZE,
>>     iBase_BAD_ARRAY_DIMENSION,
>>     iBase_INVALID_ENTITY_HANDLE,
>>     iBase_INVALID_ENTITY_COUNT,
>>     iBase_INVALID_ENTITY_TYPE,
>>     iBase_INVALID_ENTITY_TOPOLOGY,
>>     iBase_BAD_TYPE_AND_TOPO,
>>     iBase_ENTITY_CREATION_ERROR,
>>     iBase_INVALID_TAG_HANDLE,
>>     iBase_TAG_NOT_FOUND,
>>     iBase_TAG_ALREADY_EXISTS,
>>     iBase_TAG_IN_USE,
>>     iBase_INVALID_ENTITYSET_HANDLE,
>>     iBase_INVALID_ITERATOR_HANDLE,
>>     iBase_INVALID_ARGUMENT,
>>     iBase_MEMORY_ALLOCATION_FAILED,
>>     iBase_NOT_SUPPORTED,
>>     iBase_FAILURE
>>   };
>>
>>     /*==========================================================
>>      * ERROR STRUCT
>>      *==========================================================
>>      */
>>   struct iBase_Error
>>   {
>>     int error_type;
>>     char description[120];
>>   };
>>
>>     /*==========================================================
>>      * STORAGEORDER ENUMERATION
>>      *==========================================================
>>      */
>>   enum iBase_StorageOrder {
>>     iBase_BLOCKED,
>>     iBase_INTERLEAVED,
>>     iBase_UNDETERMINED
>>   };
>>
>>     /*==========================================================
>>      * TAGVALUETYPE ENUMERATION
>>      *==========================================================
>>      */
>>   enum iBase_TagValueType {
>>     iBase_INTEGER,
>>     iBase_DOUBLE,
>>     iBase_ENTITY_HANDLE,
>>     iBase_BYTES
>>   };
>>
>> #ifdef __cplusplus
>> }
>> #endif
>>
>> #endif /* #ifndef __IBASE_H__ */

-- 
================================================================
"You will keep in perfect peace him whose mind is
   steadfast, because he trusts in you."               Isaiah 26:3

              Tim Tautges            Argonne National Laboratory
          (tautges at mcs.anl.gov)      (telecommuting from UW-Madison)
          phone: (608) 263-8485      1500 Engineering Dr.
            fax: (608) 263-4499      Madison, WI 53706



More information about the itaps-parallel mailing list