![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 #ifndef DAMSEL_UTIL_HPP
00002 #define DAMSEL_UTIL_HPP
00003
00004 #include "moab/Forward.hpp"
00005 #include "moab/ErrorHandler.hpp"
00006 #include "DebugOutput.hpp"
00007
00008 #include "damsel.h"
00009 #include "damsel-internal.h"
00010
00011 // Some macros to handle error checking (cribbed from WriteHDF5).
00012 // All macros contain a "return" statement. These macros are coded with a do if while
00013 // to allow statements calling them to be terminated with a ;
00014 #define CHK_DMSL_ERR( A, B ) \
00015 do \
00016 { \
00017 if( DMSL_OK.id != ( A ).id ) \
00018 { \
00019 MB_SET_ERR_CONT( B ); \
00020 return error( MB_FAILURE ); \
00021 } \
00022 } while( false )
00023
00024 #define CHK_DMSL_ERR_NM( A ) \
00025 do \
00026 { \
00027 if( DMSL_OK.id != ( A ).id ) \
00028 { \
00029 MB_CHK_ERR_CONT( MB_FAILURE ); \
00030 return error( MB_FAILURE ); \
00031 } \
00032 } while( false )
00033
00034 namespace moab
00035 {
00036
00037 class DamselUtil
00038 {
00039 public:
00040 friend class WriteDamsel;
00041 friend class ReadDamsel;
00042
00043 //! Needs to be a constructor to initialize dtom_data_type
00044 DamselUtil();
00045
00046 static damsel_data_type mtod_data_type[MB_MAX_DATA_TYPE + 1];
00047
00048 static enum DataType dtom_data_type[DAMSEL_DATA_TYPE_PREDEFINED_WATERMARK + 1];
00049
00050 static enum damsel_entity_type mtod_entity_type[MBMAXTYPE + 1];
00051
00052 static enum EntityType dtom_entity_type[DAMSEL_ENTITY_TYPE_ALL_TYPES + 1];
00053
00054 //! Convert handles in a container to a range; assumes EntityHandle and Damsel
00055 //! entity handles are the same size
00056 static ErrorCode container_to_range( damsel_model m, damsel_container& cont, Range& range );
00057
00058 //! struct to hold information on damsel/moab tags
00059 class tinfo
00060 {
00061 public:
00062 tinfo( Tag mt, damsel_handle dt, TagType tt ) : mTagh( mt ), dTagh( dt ), tagType( tt ) {}
00063 tinfo() : mTagh( 0 ), dTagh( 0 ), tagType( MB_TAG_ANY ) {}
00064
00065 Tag mTagh;
00066 damsel_handle dTagh;
00067 TagType tagType;
00068 };
00069
00070 template < class T >
00071 struct MtagP
00072 {
00073 // deprecation of unary_function
00074 typedef T argument_type;
00075 typedef bool result_type;
00076
00077 public:
00078 MtagP( const Tag& th )
00079 {
00080 tH = th;
00081 }
00082 bool operator()( const T& tclass )
00083 {
00084 return tclass.mTagh == tH;
00085 }
00086 Tag tH;
00087 };
00088
00089 template < class T >
00090 struct DtagP
00091 {
00092 // deprecation of unary_function
00093 typedef T argument_type;
00094 typedef bool result_type;
00095
00096 public:
00097 DtagP( const damsel_handle& th )
00098 {
00099 tH = th;
00100 }
00101 bool operator()( const T& tclass )
00102 {
00103 return tclass.dTagh == tH;
00104 }
00105 damsel_handle tH;
00106 };
00107
00108 private:
00109 //! Damsel library id
00110 damsel_library dmslLib;
00111
00112 //! Damsel model id
00113 damsel_model dmslModel;
00114
00115 //! Other conventional tags
00116 tinfo xcoordsTag, ycoordsTag, zcoordsTag, collFlagsTag, parentsTag, childrenTag;
00117
00118 //! MOAB/damsel handles for dense [0], sparse [1], and conventional [2] tags
00119 std::vector< tinfo > tagMap;
00120
00121 //! Damsel handle type used in (this build of) MOAB
00122 damsel_handle_type moabHandleType;
00123 };
00124
00125 // This function doesn't do anything useful. It's just a nice
00126 // place to set a break point to determine why the reader fails.
00127 static inline ErrorCode error( ErrorCode rval )
00128 {
00129 return rval;
00130 }
00131
00132 } // namespace moab
00133
00134 #endif