[MOAB-dev] r4521 - in MOAB/trunk/src: . moab
    kraftche at cae.wisc.edu 
    kraftche at cae.wisc.edu
       
    Wed Feb 23 13:51:02 CST 2011
    
    
  
Author: kraftche
Date: 2011-02-23 13:51:02 -0600 (Wed, 23 Feb 2011)
New Revision: 4521
Modified:
   MOAB/trunk/src/Core.cpp
   MOAB/trunk/src/moab/Core.hpp
   MOAB/trunk/src/moab/Interface.hpp
   MOAB/trunk/src/moab/Types.hpp
Log:
Check in some changes to the new tag_get_handle() function discussed with
Tim in January.
Everything compiles and works but this change is incomplete.  Still to 
come someday when I have time: 
  - Change tag-related functions to use number of values rather than
     number of bytes for size arguments.  This would include the
     function to query tag size, the function to get the default 
     value, and functions relating to getting/setting variable-length tags.
  - Rename functions for getting/setting variable-length tags so that
     one doesn't end up accidentally calling the wrong variant because
     of a missing 'const'.
  - No longer accept a NULL handle array pointer as a request for the
     mesh value of a tag.  Accept only root set handles (0-valued handles)
     for that purpose.
Modified: MOAB/trunk/src/Core.cpp
===================================================================
--- MOAB/trunk/src/Core.cpp	2011-02-23 19:46:04 UTC (rev 4520)
+++ MOAB/trunk/src/Core.cpp	2011-02-23 19:51:02 UTC (rev 4521)
@@ -1942,16 +1942,25 @@
 
 ErrorCode Core::tag_get_handle( const char* name,
                                 int size,
-                                TagType storage,
                                 DataType type,
                                 Tag& tag_handle,
                                 unsigned flags,
-                                const void* default_value ) 
+                                const void* default_value,
+                                bool* created ) 
 {
+  if (created) *created = false;
+
   // we always work with sizes in bytes internally
-  if (flags & TAG_COUNT)
+  if (flags & MB_TAG_BYTES) {
+    if (size % TagInfo::size_from_data_type( type ))
+      return MB_INVALID_SIZE;
+  }
+  else {
     size *= TagInfo::size_from_data_type( type );
+  }
 
+  const TagType storage = static_cast<TagType>(flags & 3);
+
   // search for an existing tag
   tag_handle = 0;
   if (name && *name) { // not anonymous tag
@@ -1964,27 +1973,27 @@
   }
  
   if (tag_handle) {
-    if (flags & TAG_EXCL)
+    if (flags & MB_TAG_EXCL)
       return MB_ALREADY_ALLOCATED;
     // user asked that we not check anything
-    if (flags & TAG_ANY)
+    if (flags & MB_TAG_ANY)
       return MB_SUCCESS;
     // user asked that we also match storage types
-    if ((flags & TAG_STORE) && tag_handle->get_storage_type() != storage)
+    if ((flags & MB_TAG_STORE) && tag_handle->get_storage_type() != storage)
       return MB_TYPE_OUT_OF_RANGE;
     // check if data type matches
     const DataType extype = tag_handle->get_data_type();
     if (extype != type) {
    
    
More information about the moab-dev
mailing list