moab
VarLenSparseTag.hpp
Go to the documentation of this file.
00001 
00017 #ifndef VAR_LEN_SPARSE_TAG_HPP
00018 #define VAR_LEN_SPARSE_TAG_HPP
00019 
00020 #ifndef IS_BUILDING_MB
00021 #error "VarLenSparseTag.hpp isn't supposed to be included into an application"
00022 #endif
00023 
00024 #ifdef WIN32
00025 #pragma warning(disable : 4786)
00026 #endif
00027 
00028 
00029 #define STRINGIFY_(X) #X
00030 #define STRINGIFY(X) STRINGIFY_(X)
00031 #ifdef HAVE_UNORDERED_MAP
00032 # include STRINGIFY(HAVE_UNORDERED_MAP)
00033 #else
00034 # include <map>
00035 #endif
00036 #include <vector>
00037 
00038 #include "TagInfo.hpp"
00039 #include "VarLenTag.hpp"
00040 #include <stdlib.h>
00041 
00042 namespace moab {
00043 
00045 class VarLenSparseTag : public TagInfo
00046 {
00047 public:
00048   
00049   VarLenSparseTag( const char* name,
00050                    DataType type,
00051                    const void* default_value,
00052                    int default_value_bytes );
00053   
00054   ~VarLenSparseTag();
00055 
00056   virtual TagType get_storage_type() const;
00057 
00071   virtual ErrorCode release_all_data( SequenceManager* seqman, 
00072                                       Error* error_handler, 
00073                                       bool delete_pending );
00074   
00075 
00087   virtual
00088   ErrorCode get_data( const SequenceManager* seqman,
00089                       Error* error_handler, 
00090                       const EntityHandle* entities,
00091                       size_t num_entities,
00092                       void* data ) const;
00093   
00104   virtual
00105   ErrorCode get_data( const SequenceManager* seqman,
00106                       Error* error_handler, 
00107                       const Range& entities,
00108                       void* data ) const;
00109                       
00123   virtual
00124   ErrorCode get_data( const SequenceManager* seqman,
00125                       Error* error_handler, 
00126                       const EntityHandle* entities,
00127                       size_t num_entities,
00128                       const void** data_ptrs,
00129                       int* data_lengths ) const ;
00130                       
00131                       
00144   virtual
00145   ErrorCode get_data( const SequenceManager* seqman,
00146                       Error* error_handler, 
00147                       const Range& entities,
00148                       const void** data_ptrs,
00149                       int* data_lengths ) const;
00150   
00161   virtual
00162   ErrorCode set_data( SequenceManager* seqman,
00163                       Error* error_handler, 
00164                       const EntityHandle* entities,
00165                       size_t num_entities,
00166                       const void* data );
00167   
00177   virtual
00178   ErrorCode set_data( SequenceManager* seqman,
00179                       Error* error_handler, 
00180                       const Range& entities,
00181                       const void* data );
00182                       
00197   virtual
00198   ErrorCode set_data( SequenceManager* seqman,
00199                       Error* error_handler, 
00200                       const EntityHandle* entities,
00201                       size_t num_entities,
00202                       void const* const* data_ptrs,
00203                       const int* data_lengths );
00204                       
00205                       
00219   virtual
00220   ErrorCode set_data( SequenceManager* seqman,
00221                       Error* error_handler, 
00222                       const Range& entities,
00223                       void const* const* data_ptrs,
00224                       const int* data_lengths );
00225                       
00239   virtual
00240   ErrorCode clear_data( SequenceManager* seqman,
00241                         Error* error_handler, 
00242                         const EntityHandle* entities,
00243                         size_t num_entities,
00244                         const void* value_ptr,
00245                         int value_len = 0 );
00246                       
00259   virtual
00260   ErrorCode clear_data( SequenceManager* seqman,
00261                         Error* error_handler, 
00262                         const Range& entities,
00263                         const void* value_ptr,
00264                         int value_len = 0 );
00265 
00274   virtual ErrorCode remove_data( SequenceManager* seqman,
00275                                  Error* error_handler, 
00276                                  const EntityHandle* entities,
00277                                  size_t num_entities );
00278 
00286   virtual ErrorCode remove_data( SequenceManager* seqman,
00287                                  Error* error_handler, 
00288                                  const Range& entities );
00289 
00312   virtual
00313   ErrorCode tag_iterate( SequenceManager* seqman,
00314                          Error* error_handler, 
00315                          Range::iterator& iter,
00316                          const Range::iterator& end,
00317                          void*& data_ptr,
00318                          bool allocate = true);
00319 
00333   virtual
00334   ErrorCode get_tagged_entities( const SequenceManager* seqman,
00335                                  Range& output_entities,
00336                                  EntityType type = MBMAXTYPE,
00337                                  const Range* intersect = 0 ) const;
00338 
00352   virtual
00353   ErrorCode num_tagged_entities( const SequenceManager* seqman,
00354                                  size_t& output_count,
00355                                  EntityType type = MBMAXTYPE,
00356                                  const Range* intersect = 0 ) const;
00357   
00371   virtual
00372   ErrorCode find_entities_with_value( const SequenceManager* seqman,
00373                                       Error* error_handler, 
00374                                       Range& output_entities,
00375                                       const void* value,
00376                                       int value_bytes = 0,
00377                                       EntityType type = MBMAXTYPE,
00378                                       const Range* intersect_entities = 0 ) const;
00379   
00381   virtual bool is_tagged( const SequenceManager*, EntityHandle h ) const;
00382   
00386   virtual
00387   ErrorCode get_memory_use( const SequenceManager* seqman,
00388                             unsigned long& total,
00389                             unsigned long& per_entity ) const;
00390 
00392   unsigned long get_number_entities()
00393     { return mData.size(); }
00394 
00395 
00397 #ifdef HAVE_UNORDERED_MAP
00398   typedef UNORDERED_MAP_NS::unordered_map<EntityHandle,VarLenTag> MapType;
00399 #else
00400   typedef std::map<EntityHandle,VarLenTag> MapType;
00401 #endif
00402 
00403 private:
00404   
00405   VarLenSparseTag( const VarLenSparseTag& );
00406   VarLenSparseTag& operator=( const VarLenSparseTag& );
00407 
00409   inline
00410   ErrorCode get_data_ptr( Error* error_handler,
00411                           EntityHandle entity_handle, 
00412                           const void*& data,
00413                           int& size) const;
00414 
00415   MapType mData;
00416 };
00417 
00418 } // namespace moab
00419 
00420 #endif // VAR_LEN_SPARSE_TAG_HPP
00421 
00422 
00423 
00424 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines