Changeset 1761


Ignore:
Timestamp:
16/11/11 17:52:10 (6 months ago)
Author:
Freddie Akeroyd
Message:

Add in support for 64bit integers. Refs #304

Location:
trunk/applications/NXtranslate
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/applications/NXtranslate/nexus_util.cpp

    r1686 r1761  
    394394  }else if(type==NX_INT32 || type==NX_UINT32 || type==NX_FLOAT32){ 
    395395    size*=4; 
    396   }else if(type==NX_FLOAT64){ 
     396  }else if(type==NX_FLOAT64 || type==NX_UINT64 || type==NX_INT64){ 
    397397    size*=8; 
    398398  }else{ 
  • trunk/applications/NXtranslate/node.cpp

    r1452 r1761  
    3131  else if(type==Node::INT32) 
    3232    return "NX_INT32"; 
     33  else if(type==Node::INT64) 
     34    return "NX_INT64"; 
    3335  else if(type==Node::UINT8) 
    3436    return "NX_UINT8"; 
     
    3739  else if(type==Node::UINT32) 
    3840    return "NX_UINT32"; 
     41  else if(type==Node::UINT64) 
     42    return "NX_UINT64"; 
    3943  else 
    4044    throw runtime_error("Did not understand type in set_data"); 
     
    154158  else if(__type=="NX_INT32") 
    155159    return INT32; 
     160  else if(__type=="NX_INT64") 
     161    return INT64; 
    156162  else if(__type=="NX_UINT8") 
    157163    return UINT8; 
     
    160166  else if(__type=="NX_UINT32") 
    161167    return UINT32; 
     168  else if(__type=="NX_UINT64") 
     169    return UINT64; 
    162170  else 
    163171    throw runtime_error("do not understand type"); 
  • trunk/applications/NXtranslate/node.h

    r1452 r1761  
    1313  // enum for types 
    1414  enum NXtype{CHAR=NX_CHAR,   FLOAT32=NX_FLOAT32, FLOAT64=NX_FLOAT64, 
    15               INT8=NX_INT8,   INT16=NX_INT16,     INT32=NX_INT32, 
    16               UINT8=NX_UINT8, UINT16=NX_UINT16,   UINT32=NX_UINT32, 
     15              INT8=NX_INT8,   INT16=NX_INT16,     INT32=NX_INT32, INT64=NX_INT64, 
     16              UINT8=NX_UINT8, UINT16=NX_UINT16,   UINT32=NX_UINT32, UINT64=NX_UINT64, 
    1717              GROUP}; 
    1818  enum NXcompress{COMP_NONE=NX_COMP_NONE, COMP_LZW=NX_COMP_LZW, 
  • trunk/applications/NXtranslate/node_util.cpp

    r1452 r1761  
    6060  }else if(type==NX_INT32){ 
    6161    string_util::str_to_intArray(char_data,(int *)value,len); 
     62  }else if(type==NX_INT64){ 
     63    string_util::str_to_int64Array(char_data,(long long*)value,len); 
    6264  }else if(type==NX_UINT8){ 
    6365    string_util::str_to_ucharArray(char_data,(unsigned char *)value,len); 
     
    6668  }else if(type==NX_UINT32){ 
    6769    string_util::str_to_uintArray(char_data,(unsigned int *)value,len); 
     70  }else if(type==NX_UINT64){ 
     71    string_util::str_to_uint64Array(char_data,(unsigned long long*)value,len); 
    6872  }else{ 
    6973    throw runtime_error("unknown type in end_add_char()"); 
     
    116120  else if(str=="NX_INT32") 
    117121    return Node::INT32; 
     122  else if(str=="NX_INT64") 
     123    return Node::INT64; 
    118124  else if(str=="NX_UINT8") 
    119125    return Node::UINT8; 
     
    122128  else if(str=="NX_UINT32") 
    123129    return Node::UINT32; 
     130  else if(str=="NX_UINT64") 
     131    return Node::UINT64; 
    124132  else 
    125133    throw runtime_error("Could not understand type in node_type("+str+")"); 
  • trunk/applications/NXtranslate/string_util.cpp

    r851 r1761  
    104104} 
    105105 
     106extern long long string_util::str_to_int64(const string &str){ 
     107  if(str.substr(0,1)=="-") 
     108    return -1*str_to_int64(str.substr(1,str.size())); 
     109 
     110  string::const_iterator it=str.begin(); 
     111  it=find_if(it,str.end(),my_isnotdigit); 
     112 
     113  if(it!=str.end()) 
     114    throw invalid_argument("str_to_int(string) argument is not an integer"); 
     115 
     116  return atoll(str.c_str()); 
     117} 
     118 
    106119extern unsigned long string_util::str_to_uint(const string &str){ 
    107120  long num=str_to_int(str); 
     121  if(num<0) 
     122    throw invalid_argument("str_to_uint(string) argument is not an integer"); 
     123  return num; 
     124} 
     125 
     126extern unsigned long long string_util::str_to_uint64(const string &str){ 
     127  long long num=str_to_int64(str); 
    108128  if(num<0) 
    109129    throw invalid_argument("str_to_uint(string) argument is not an integer"); 
     
    306326} 
    307327 
     328extern void string_util::str_to_int64Array(std::string & str,long long *array, const unsigned int len){ 
     329  // break it up into a string vector 
     330  StrVec splitted=shrink_and_split(str); 
     331 
     332  if(splitted.size()!=len) 
     333    throw runtime_error("array and string not same size"); 
     334 
     335  // turn each string into a short 
     336  StrVecIter strIt=splitted.begin(); 
     337  for( unsigned int i=0 ; i<len ; i++ ) 
     338    *(array+i)=(long long)str_to_int64(*(strIt+i)); 
     339} 
     340 
    308341extern void string_util::str_to_intArray(std::string & str,int *array, const unsigned int len){ 
    309342  // break it up into a string vector 
     
    356389  for( unsigned int i=0 ; i<len ; i++ ) 
    357390    *(array+i)=(unsigned short)str_to_uint(*(strIt+i)); 
     391} 
     392 
     393extern void string_util::str_to_uint64Array(std::string & str,unsigned long long *array, const unsigned int len){ 
     394  // break it up into a string vector 
     395  StrVec splitted=shrink_and_split(str); 
     396 
     397  if(splitted.size()!=len) 
     398    throw runtime_error("array and string not same size"); 
     399 
     400  // turn each string into a short 
     401  StrVecIter strIt=splitted.begin(); 
     402  for( unsigned int i=0 ; i<len ; i++ ) 
     403    *(array+i)=(unsigned long long)str_to_uint64(*(strIt+i)); 
    358404} 
    359405 
  • trunk/applications/NXtranslate/string_util.h

    r851 r1761  
    1414  extern std::string trim(const std::string &); 
    1515  extern long   str_to_int(const std::string &); 
     16  extern long long  str_to_int64(const std::string &); 
    1617  extern unsigned long  str_to_uint(const std::string &); 
     18  extern unsigned long long  str_to_uint64(const std::string &); 
    1719  extern double str_to_float(const std::string &); 
    1820  extern std::vector<std::string> string_to_path(const std::string &); 
     
    2224  extern void str_to_shortArray(std::string &,short *, const unsigned int); 
    2325  extern void str_to_intArray(std::string &,int *, const unsigned int); 
     26  extern void str_to_int64Array(std::string &,long long *, const unsigned int); 
    2427  extern void str_to_longArray(std::string &,long *, const unsigned int); 
    2528  extern void str_to_ushortArray(std::string &,unsigned short *, const unsigned int); 
    2629  extern void str_to_uintArray(std::string &,unsigned int *, const unsigned int); 
     30  extern void str_to_uint64Array(std::string &,unsigned long long *, const unsigned int); 
    2731  extern void str_to_ulongArray(std::string &,unsigned long *, const unsigned int); 
    2832  extern void str_to_floatArray(std::string &,float *, const unsigned int); 
Note: See TracChangeset for help on using the changeset viewer.