ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libgender/txtprt_import.h
Revision: 1.2
Committed: Sun Oct 3 02:29:28 2004 UTC (19 years, 8 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.1: +1 -1 lines
Log Message:
Fixed small bug

File Contents

# User Rev Content
1 root 1.1 #ifndef TXTPRT_IMPORT
2     #define TXTPRT_IMPORT
3     #include <iostream>
4     #include <fstream>
5     #include <string>
6     #include <cstdio>
7    
8     #include "entity.h"
9    
10     struct txtprt_i_exception {
11     txtprt_i_exception (std::string m) : msg (m) { }
12     std::string msg;
13     };
14    
15     class txtprt_parser {
16     std::ifstream ifs;
17     int cur_line;
18     std::string line_data;
19    
20     public:
21     txtprt_parser () {}
22    
23 root 1.2 entity* read (std::string filename);
24 root 1.1 inline void match_char (char c) {
25     char o;
26     match_achar (o);
27     if (o != c)
28     throw txtprt_i_exception ((std::string)"Fileformat invalid, expected '" + c + "' got: '" + o + "' -> '" + line_data.substr (0, 10) + "...");
29     }
30     inline void match_achar (char &c) {
31     std::string s = line_data.substr (0, 1);
32     c = s[0];
33     cout << "Char: " << c << endl;
34     line_data.erase(0, 1);
35     }
36    
37     inline void match_space () { match_char (' '); }
38     inline void match_nl () { match_char ('\n'); }
39     inline void match_number (double &d) {
40     size_t p = line_data.find_first_not_of ("0123456789.-+");
41     std::string tmp = line_data.substr (0, p);
42     line_data.erase (0, p);
43     d = strtod (tmp.c_str (), NULL);
44     cout << "NUM: " << d << endl;
45     printf("%f\n", d);
46     }
47     inline void match_section (char c, std::string &sect) { // c - section char, sect - name of section
48     match_char (c); match_space ();
49     size_t p = line_data.find_first_of ("\n");
50     sect = line_data.substr (0, p);
51     line_data.erase (0, p);
52     match_nl ();
53     }
54     inline void match_section (char c, double &num) { // c - section char, sect - name of section
55     match_char (c); match_space ();
56     match_number (num);
57     match_nl ();
58     }
59     inline void match_asection (char & c, std::string &sect) { // c - section char, sect - name of section
60     match_achar (c); match_space ();
61     size_t p = line_data.find_first_of ("\n");
62     sect = line_data.substr (0, p);
63     line_data.erase (0, p);
64     match_nl ();
65     }
66     inline void match_asection (char & c, double &num) { // c - section char, sect - name of section
67     match_achar (c); match_space ();
68     match_number (num);
69     match_nl ();
70     }
71     };
72    
73     #endif