source: trunk/src/stl_utility.cc @ 266

Last change on this file since 266 was 266, checked in by Peter, 17 years ago
  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 2.4 KB
Line 
1// $Id: stl_utility.cc 266 2005-04-11 16:58:57Z peter $
2
3#include "stl_utility.h"
4
5#include <iostream>
6#include <sstream>
7#include <string>
8#include <vector>
9
10namespace theplu {
11namespace cpptools {
12
13  bool is_float(const std::string& s)
14  {
15    // have decimal point
16    bool dp = false; 
17    size_t i = 0;
18    if (s[i] == '-' || s[i] == '+') {
19      i++;
20      // empty after sign
21      if (i >= s.size())
22        return false;                         
23    }
24    bool isf = false;
25    while(i<s.size()){
26      if (s[i] < '0' || s[i] > '9'){
27          if (s[i] == '.') {
28            // two decimals
29            if (dp) 
30              return false;               
31            else
32              dp = true;
33          }
34          else if (s[i] == 'E' || s[i] == 'e'){
35            i++;
36            // nothing following E
37            if (i >=s.size()) 
38              return false;           
39            std::string tmp_str(s,i) ;
40            return is_int(tmp_str);
41          }
42      }
43      else 
44        isf = true;                       
45      i++;
46    }
47    return isf;
48  }
49 
50  bool is_int(const std::string& s)
51  {
52    size_t i = 0;
53    if (s[i] == '-' || s[i] == '+') {             
54      i++;
55      // nothing following sign
56      if (i >= s.size())
57        return false;
58    }
59    while (i<s.size()) {
60      if (s[i] < '0' ||  s[i] > '9')
61        return false;
62      i++;
63    }
64    return true;
65  }
66
67  bool read_to_double(std::istream& is, std::vector<double>& vec)
68  {
69    std::vector<std::string> vec_str;
70    if (read_to_string(is,vec_str)){
71      for (size_t i=0; i<vec_str.size(); i++) {
72        if (!is_float(vec_str[i])){
73          std::cerr << "Warning: " << vec_str[i] 
74                    << " is not a number." << std::endl;
75        }
76        vec.push_back(atoi(vec_str[i].c_str()));
77      } 
78      return true;
79    }
80    else 
81      return false;
82  }
83
84  bool read_to_int(std::istream& is, std::vector<int>& vec)
85  {
86    std::vector<std::string> vec_str;
87    if (read_to_string(is,vec_str)){
88      for (size_t i=0; i<vec_str.size(); i++) {
89        if (!is_int(vec_str[i])){
90          std::cerr << "Warning: " << vec_str[i] 
91                    << " is not an integer." << std::endl;
92        }
93        vec.push_back(atoi(vec_str[i].c_str()));
94      }
95      return true;
96    }
97    else 
98      return false;
99  }
100
101  bool read_to_string(std::istream& is, std::vector<std::string>& vec)
102  {
103    std::string s;
104    if (getline(is, s, '\n')){
105      std::istringstream line(s);
106      std::string tmp_string;
107      while (line >> tmp_string) {
108        if(!is.good()) {
109          std::cerr << "error reading data file!" << std::endl;
110          exit(1);
111        }
112        vec.push_back(tmp_string);
113      }
114      return true;
115    }
116    else 
117      return false;
118  }
119
120
121}} // end of namespace cpptools and namespace thep
122
Note: See TracBrowser for help on using the repository browser.