ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/utils/StringUtils.cpp
(Generate patch)

Comparing trunk/src/utils/StringUtils.cpp (file contents):
Revision 1442 by gezelter, Mon May 10 17:28:26 2010 UTC vs.
Revision 1596 by gezelter, Mon Jul 25 17:30:53 2011 UTC

# Line 39 | Line 39
39   * [4]  Vardeman & Gezelter, in progress (2009).                        
40   */
41  
42 < #include <algorithm>
42 > #include <algorithm>
43   #include "utils/StringUtils.hpp"
44  
45   namespace OpenMD {
# Line 218 | Line 218 | namespace OpenMD {
218      return str.substr(0, str.find('.'));
219    }
220  
221 < bool isInteger(const std::string& str) {
222 <
221 >  bool isInteger(const std::string& str) {
222 >    
223      bool result = false;
224 <
224 >    
225      std::string::const_iterator i = str.begin();    
226      if (i != str.end() && (*i == '+' || *i == '-' || std::isdigit(*i) )) {
227 <        ++i;        
228 <        while (i != str.end() && std::isdigit(*i))
229 <            ++i;
230 <        if (i == str.end())
231 <            result = true;
227 >      ++i;        
228 >      while (i != str.end() && std::isdigit(*i))
229 >        ++i;
230 >      if (i == str.end())
231 >        result = true;
232      }
233      
234      return result;
235 < }
236 <
235 >  }
236 >  
237   bool CaseInsensitiveEquals(const char ch1, const char ch2) {
238    return std::toupper((unsigned char)ch1) == std::toupper((unsigned char)ch2);
239   }
# Line 245 | Line 245 | size_t CaseInsensitiveFind(const std::string& str1, co
245    else
246      return pos - str1.begin();
247   }
248 +
249 +  /**
250 +   *    memparse - parse a string with mem suffixes into a number
251 +   *    @ptr: Where parse begins
252 +   *    @retptr: (output) Pointer to next char after parse completes
253 +   *
254 +   *    Parses a string into a number.  The number stored at @ptr is
255 +   *    potentially suffixed with %K (for kilobytes, or 1024 bytes),
256 +   *    %M (for megabytes, or 1048576 bytes), or %G (for gigabytes, or
257 +   *    1073741824).  If the number is suffixed with K, M, or G, then
258 +   *    the return value is the number multiplied by one kilobyte, one
259 +   *    megabyte, or one gigabyte, respectively.
260 +   */  
261 +  unsigned long long memparse (char *ptr,  char **retptr) {
262 +    unsigned long long ret = strtoull (ptr, retptr, 0);
263 +    
264 +    switch (**retptr) {
265 +    case 'G':
266 +    case 'g':
267 +      ret <<= 10;
268 +    case 'M':
269 +    case 'm':
270 +      ret <<= 10;
271 +    case 'K':
272 +    case 'k':
273 +      ret <<= 10;
274 +      (*retptr)++;
275 +    default:
276 +      break;
277 +    }
278 +    return ret;
279 +  }
280  
281   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines