moab
DamselUtil.cpp
Go to the documentation of this file.
00001 #include "DamselUtil.hpp"
00002 #include "moab/Range.hpp"
00003 
00004 #include "damsel.h"
00005 
00006 namespace moab {
00007 
00008 damsel_entity_type DamselUtil::mtod_entity_type[] = {
00009     DAMSEL_ENTITY_TYPE_VERTEX,      //  MBVERTEX
00010     DAMSEL_ENTITY_TYPE_EDGE,  // MBEDGE
00011     DAMSEL_ENTITY_TYPE_TRI, // MBTRI
00012     DAMSEL_ENTITY_TYPE_QUAD, //   MBQUAD
00013     DAMSEL_ENTITY_TYPE_POLYGON, //   MBPOLYGON
00014     DAMSEL_ENTITY_TYPE_TET,//  MBTET
00015     DAMSEL_ENTITY_TYPE_PYRAMID,  //   MBPYRAMID
00016     DAMSEL_ENTITY_TYPE_PRISM,  //   MBPRISM
00017     DAMSEL_ENTITY_TYPE_UNDEFINED, // MBKNIFE
00018     DAMSEL_ENTITY_TYPE_HEX,  //   MBHEX,
00019     DAMSEL_ENTITY_TYPE_POLYHEDRON, //   MBPOLYHEDRON
00020     DAMSEL_ENTITY_TYPE_UNDEFINED   //   MBENTITYSET
00021 };
00022 
00023 EntityType DamselUtil::dtom_entity_type[] = {
00024     MBVERTEX,      //  MBVERTEX
00025     MBEDGE,  // MBEDGE
00026     MBTRI, // MBTRI
00027     MBQUAD, //   MBQUAD
00028     MBPOLYGON, //   MBPOLYGON
00029     MBTET,//  MBTET
00030     MBPRISM,  //   MBPRISM
00031     MBPYRAMID,  //   MBPYRAMID
00032     MBHEX,  //   MBHEX,
00033     MBPOLYHEDRON, //   MBPOLYHEDRON
00034     MBMAXTYPE,   //   MBENTITYSET
00035     MBMAXTYPE // MBMAXTYPE
00036 };
00037 
00038 damsel_data_type DamselUtil::mtod_data_type[] = {
00039     DAMSEL_DATA_TYPE_BYTES, // MB_TYPE_OPAQUE
00040     DAMSEL_DATA_TYPE_INTEGER, // MB_TYPE_INTEGER
00041     DAMSEL_DATA_TYPE_DOUBLE, // MB_TYPE_DOUBLE
00042     DAMSEL_DATA_TYPE_INVALID, // MB_TYPE_BIT
00043     DAMSEL_DATA_TYPE_HANDLE // MB_TYPE_HANDLE
00044 };
00045 
00046 DataType DamselUtil::dtom_data_type[] = {
00047     MB_TYPE_OPAQUE, // DAMSEL_DATA_TYPE_INVALID = 0,
00048     MB_TYPE_OPAQUE,   // DAMSEL_DATA_TYPE_BYTES = 1,
00049     MB_TYPE_INTEGER,  // DAMSEL_DATA_TYPE_INTEGER = 2,
00050     MB_TYPE_OPAQUE,  // DAMSEL_DATA_TYPE_INT64 = 3,
00051     MB_TYPE_OPAQUE,  // DAMSEL_DATA_TYPE_FLOAT = 4,
00052     MB_TYPE_DOUBLE,  // DAMSEL_DATA_TYPE_DOUBLE = 5,
00053     MB_TYPE_HANDLE,  // DAMSEL_DATA_TYPE_HANDLE = 6,
00054     MB_TYPE_OPAQUE,  // DAMSEL_DATA_TYPE_ID_T = 7,
00055     MB_TYPE_OPAQUE,  // DAMSEL_DATA_TYPE_SHORTINT = 8,
00056     MB_TYPE_OPAQUE  // DAMSEL_DATA_TYPE_PREDEFINED_WATERMARK = 9;
00057 };
00058 
00059 DamselUtil::DamselUtil() 
00060         : dmslLib(DAMSEL_LIBRARY_INVALID), dmslModel(DAMSEL_MODEL_INVALID),
00061           moabHandleType(DAMSEL_HANDLE_TYPE_INVALID) 
00062 {}
00063     
00066 ErrorCode DamselUtil::container_to_range(damsel_model m, damsel_container &c, Range &r) 
00067 {
00068   if (DMSLcontainer_get_type(c) == DAMSEL_HANDLE_CONTAINER_TYPE_SEQUENCE) {
00069     damsel_handle start;
00070     size_t count, stride;
00071     damsel_err_t err = DMSLcontainer_sequence_get_contents(m, c, &start, &count, &stride);
00072     CHK_DMSL_ERR_NM(err);
00073     for (damsel_handle i = start+(count-1)*stride; i >= start; i-=stride)
00074       r.insert(i);
00075   }
00076   else if (DMSLcontainer_get_type(c) == DAMSEL_HANDLE_CONTAINER_TYPE_VECTOR) {
00077     damsel_handle *handle_ptr;
00078     size_t count;
00079     damsel_err_t err = DMSLcontainer_vector_get_contents(m, c, &handle_ptr, &count);
00080     CHK_DMSL_ERR_NM(err);
00081     for (int i = count-1; i >= 0; i--)
00082       r.insert(handle_ptr[i]);
00083   }
00084   else if (DMSLcontainer_get_type(c) == DAMSEL_HANDLE_CONTAINER_TYPE_TREE) {
00085     damsel_handle_ptr node_ptr = NULL;
00086     damsel_container cont = NULL;
00087     damsel_err_t err = DMSLcontainer_tree_get_contents(m, c, &node_ptr, &cont);
00088     while (err.id == DMSL_OK.id && cont) {
00089       ErrorCode rval = container_to_range(m, c, r);
00090       if (MB_SUCCESS != rval) return rval;
00091       err = DMSLcontainer_tree_get_contents(m, c, &node_ptr, &cont);
00092     }
00093   }
00094       
00095   return MB_SUCCESS;
00096 }
00097 
00098 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines