Automatic commit. Sun Sep 23 00:00:07 WST 2012
[matches/honours.git] / research / transmission_spectroscopy / Tools / dataX / main.cpp
1 #include <cstdlib>\r
2 #include <iostream>\r
3 \r
4 #include <vector>\r
5 #include <fstream>\r
6 \r
7 using namespace std;\r
8 \r
9 typedef vector<pair<double, double> > Data;\r
10 \r
11 void readData(Data & data, const char * fileName);\r
12 void operate(Data & data1, Data & data2, const char * op);\r
13 void writeData(Data & data, ostream & output);\r
14 \r
15 \r
16 int main(int argc, const char * argv[])\r
17 {\r
18     Data data[2];\r
19     \r
20     readData(data[0], argv[1]);\r
21     readData(data[1], argv[3]);\r
22     operate(data[0], data[1], argv[2]);\r
23     \r
24     ostream & output = cout;\r
25     writeData(data[0], output);\r
26 }\r
27 \r
28 void readData(Data & data, const char * fileName)\r
29 {\r
30      ifstream input(fileName);\r
31      while (input.good())\r
32      {\r
33            double x; double y;\r
34            input >> x; input >> y;\r
35            data.push_back(pair<double, double>(x, y));      \r
36      }\r
37      input.close(); \r
38 }\r
39 \r
40 void operate(Data & data1, Data & data2, const char * op)\r
41 {\r
42      if (data1.size() != data2.size())\r
43      {\r
44         cerr << "Error; data sizes do not match (" << data1.size() << " .vs " << data2.size() << ")\n";\r
45         exit(EXIT_FAILURE);\r
46      }  \r
47      for (int ii=0; ii < data1.size() && ii < data2.size(); ++ii)\r
48      {\r
49          if (data1[ii].first != data2[ii].first)\r
50          {\r
51             cerr << "Error: Data do not have matching x values at index " << ii << " (" << data1[ii].first << " vs. " << data2[ii].first << ")\n";\r
52             exit(EXIT_FAILURE);                    \r
53          }\r
54          switch (op[0])\r
55          {\r
56                 case '+':\r
57                      data1[ii].second += data2[ii].second;\r
58                      break;\r
59                 case '-':\r
60                      data1[ii].second -= data2[ii].second;\r
61                      break;\r
62                 case '*':\r
63                      data1[ii].second = data1[ii].second * data2[ii].second;\r
64                      break;\r
65                 case '/':\r
66                      data1[ii].second /= data2[ii].second;\r
67                      break;\r
68                 default:\r
69                         cerr << "Operation \"" << op << "\" is not understood!\n";\r
70                         exit(EXIT_FAILURE);\r
71                         break;\r
72                      \r
73          }    \r
74      }     \r
75 }\r
76 \r
77 void writeData(Data & data, ostream & output)\r
78 {\r
79      for (int ii=0; ii < data.size(); ++ii)\r
80      {\r
81          output << data[ii].first << " " << data[ii].second << "\n";    \r
82      }     \r
83 }\r

UCC git Repository :: git.ucc.asn.au