Subversion Repositories gelsvn

Rev

Rev 26 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
25 jab 1
#include "Parse.h"
2
#include <cstring>
3
#include <cstdlib>
4
#include <iostream>
5
 
6
using namespace std;
7
using namespace CGLA;
8
 
9
namespace
10
{
11
	const char seps[]   = " ,\t\n";
12
 
13
	inline char* next_etoken(const char* btoken)
14
	{
15
		return const_cast<char*>(btoken)+strcspn(btoken, seps);
16
	}
17
 
18
	inline const char* next_btoken(char* etoken)
19
	{
20
		return const_cast<const char*>(etoken+strspn(etoken, seps));
21
	}
22
}
23
 
24
namespace Util {
25
	string floatToString(float value) {
26
		stringstream ret;
27
		string stringret;
28
		ret << value;
29
		getline(ret,stringret);
30
		return stringret;
31
	}
32
 
33
	void parse(const char* str,bool& x) {
27 jab 34
		x = (strcmp(str,"true")==0) || (strcmp(str,"TRUE")==0);
25 jab 35
	}
36
 
37
	void parse(const char* str,string& x) {
38
		x=string(str);
39
	}
40
 
41
	void parse(const char* str,int& x) {
42
		/* Establish string and get the first token: */
43
		char *etoken=0;
44
		x = strtol(str,0,10);
45
	} 
46
 
47
	void parse(const char* str,Vec2i& vec)
48
	{   /* Establish string and get the first token: */
49
		const char *btoken=next_btoken(const_cast<char*>(str));
50
		char *etoken=next_etoken(btoken);
51
		vec[0] = strtol(btoken,0,10);
52
		btoken= next_btoken(etoken);
53
		etoken= next_etoken(btoken);
54
		vec[1] = strtol(btoken,0,10);
55
	}
56
 
57
 
58
	void parse(const char* str,float& x) 
59
	{
60
		/* Establish string and get the first token: */
61
		char *etoken=0;
62
		x = strtod(str,0);
63
	}
64
 
65
	void parse(const char* str,Vec2f& vec) {
66
		const char seps[]   = " ,\t\n";
67
		const char *btoken=next_btoken(const_cast<char*>(str));
68
		char *etoken= next_etoken(btoken);
69
		vec[0] = strtod(btoken,0);
70
		btoken=next_btoken(etoken);
71
		etoken=next_etoken(btoken);
72
		vec[1] = strtod(btoken,0);
73
	}
74
 
75
	void parse(const char* str,Vec3f& vec) {
76
   /* Establish string and get the first token: */
77
		const char seps[]   = " ,\t\n";
78
		const char *btoken=next_btoken(const_cast<char*>(str));
79
		char *etoken= next_etoken(btoken);
80
		vec[0] = strtod(btoken,0);
81
		btoken=next_btoken(etoken);
82
		etoken=next_etoken(btoken);
83
		vec[1] = strtod(btoken,0);
84
		btoken=next_btoken(etoken);
85
		etoken=next_etoken(btoken);
86
		vec[2] = strtod(btoken,0);
87
	}
88
 
89
 
90
	void parse(const char* str,Vec4f& vec) {
91
   /* Establish string and get the first token: */
92
		const char seps[]   = " ,\t\n";
93
		const char *btoken=next_btoken(const_cast<char*>(str));
94
		char *etoken= next_etoken(btoken);
95
		vec[0] = strtod(btoken,0);
96
		btoken=next_btoken(etoken);
97
		etoken=next_etoken(btoken);
98
		vec[1] = strtod(btoken,0);
99
		btoken=next_btoken(etoken);
100
		etoken=next_etoken(btoken);
101
		vec[2] = strtod(btoken,0);
102
		btoken=next_btoken(etoken);
103
		etoken=next_etoken(btoken);
104
		vec[3] = strtod(btoken,0);
105
	}
106
 
107
	void parse(const char* str,vector<float>& v) {
108
		const char seps[]   = " ,\t\n";
109
		const char *btoken=next_btoken(const_cast<char*>(str));
110
		char *etoken= next_etoken(btoken);
111
		while(etoken>btoken)
112
		{
113
			v.push_back(strtod(btoken,0));
114
			btoken=next_btoken(etoken);
115
			etoken=next_etoken(btoken);
116
		}
117
	}
118
 
119
	void parse(const char* str,vector<Vec2f>& v) {
120
		const char seps[]   = " ,\t\n";
121
		const char *btoken=next_btoken(const_cast<char*>(str));
122
		char *etoken= next_etoken(btoken);
123
		while(etoken>btoken)
124
		{
125
			Vec2f vec;
126
			vec[0] = strtod(btoken,0);
127
			btoken=next_btoken(etoken);
128
			etoken=next_etoken(btoken);
129
			vec[1] = strtod(btoken,0);
130
			btoken=next_btoken(etoken);
131
			etoken=next_etoken(btoken);
132
			v.push_back(vec);
133
		}
134
	}
135
 
136
	void parse(const char* str,vector<Vec3f>& v) {
137
   /* Establish string and get the first token: */
138
		const char seps[]   = " ,\t\n";
139
		const char *btoken=next_btoken(const_cast<char*>(str));
140
		char *etoken= next_etoken(btoken);
141
		while(etoken>btoken)
142
		{
143
			Vec3f vec;
144
			vec[0] = strtod(btoken,0);
145
			btoken=next_btoken(etoken);
146
			etoken=next_etoken(btoken);
147
			vec[1] = strtod(btoken,0);
148
			btoken=next_btoken(etoken);
149
			etoken=next_etoken(btoken);
150
			vec[2] = strtod(btoken,0);
151
			btoken=next_btoken(etoken);
152
			etoken=next_etoken(btoken);
153
			v.push_back(vec);
154
		}
155
	}
156
 
157
	void parse(const char* str,vector<int>& v) 
158
	{
159
		const char seps[]   = " ,\t\n";
160
		const char *btoken=next_btoken(const_cast<char*>(str));
161
		char *etoken= next_etoken(btoken);
162
		while(etoken>btoken)
163
			{
164
				v.push_back(strtol(btoken,0,10));
165
				btoken=next_btoken(etoken);
166
				etoken=next_etoken(btoken);
167
			}
168
	}
169
 
170
}