Subversion Repositories gelsvn

Rev

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

Rev Author Line No. Line
39 bj 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) {
34
		x = (strcmp(str,"true")==0) || (strcmp(str,"TRUE")==0);
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
		x = strtol(str,0,10);
44
	} 
45
 
46
	void parse(const char* str,Vec2i& vec)
47
	{   /* Establish string and get the first token: */
48
		const char *btoken=next_btoken(const_cast<char*>(str));
49
		char *etoken=next_etoken(btoken);
50
		vec[0] = strtol(btoken,0,10);
51
		btoken= next_btoken(etoken);
52
		etoken= next_etoken(btoken);
53
		vec[1] = strtol(btoken,0,10);
54
	}
55
 
56
 
57
	void parse(const char* str,float& x) 
58
	{
59
		/* Establish string and get the first token: */
60
		x = strtod(str,0);
61
	}
62
 
63
	void parse(const char* str,Vec2f& vec) {
64
		const char *btoken=next_btoken(const_cast<char*>(str));
65
		char *etoken= next_etoken(btoken);
66
		vec[0] = strtod(btoken,0);
67
		btoken=next_btoken(etoken);
68
		etoken=next_etoken(btoken);
69
		vec[1] = strtod(btoken,0);
70
	}
71
 
72
	void parse(const char* str,Vec3f& vec) {
73
   /* Establish string and get the first token: */
74
		const char *btoken=next_btoken(const_cast<char*>(str));
75
		char *etoken= next_etoken(btoken);
76
		vec[0] = strtod(btoken,0);
77
		btoken=next_btoken(etoken);
78
		etoken=next_etoken(btoken);
79
		vec[1] = strtod(btoken,0);
80
		btoken=next_btoken(etoken);
81
		etoken=next_etoken(btoken);
82
		vec[2] = strtod(btoken,0);
83
	}
84
 
85
 
86
	void parse(const char* str,Vec4f& vec) {
87
   /* Establish string and get the first token: */
88
		const char *btoken=next_btoken(const_cast<char*>(str));
89
		char *etoken= next_etoken(btoken);
90
		vec[0] = strtod(btoken,0);
91
		btoken=next_btoken(etoken);
92
		etoken=next_etoken(btoken);
93
		vec[1] = strtod(btoken,0);
94
		btoken=next_btoken(etoken);
95
		etoken=next_etoken(btoken);
96
		vec[2] = strtod(btoken,0);
97
		btoken=next_btoken(etoken);
98
		etoken=next_etoken(btoken);
99
		vec[3] = strtod(btoken,0);
100
	}
101
 
102
	void parse(const char* str,vector<float>& v) {
103
		const char *btoken=next_btoken(const_cast<char*>(str));
104
		char *etoken= next_etoken(btoken);
105
		while(etoken>btoken)
106
		{
107
			v.push_back(strtod(btoken,0));
108
			btoken=next_btoken(etoken);
109
			etoken=next_etoken(btoken);
110
		}
111
	}
112
 
113
	void parse(const char* str,vector<Vec2f>& v) {
114
		const char *btoken=next_btoken(const_cast<char*>(str));
115
		char *etoken= next_etoken(btoken);
116
		while(etoken>btoken)
117
		{
118
			Vec2f vec;
119
			vec[0] = strtod(btoken,0);
120
			btoken=next_btoken(etoken);
121
			etoken=next_etoken(btoken);
122
			vec[1] = strtod(btoken,0);
123
			btoken=next_btoken(etoken);
124
			etoken=next_etoken(btoken);
125
			v.push_back(vec);
126
		}
127
	}
128
 
129
	void parse(const char* str,vector<Vec3f>& v) {
130
   /* Establish string and get the first token: */
131
		const char *btoken=next_btoken(const_cast<char*>(str));
132
		char *etoken= next_etoken(btoken);
133
		while(etoken>btoken)
134
		{
135
			Vec3f vec;
136
			vec[0] = strtod(btoken,0);
137
			btoken=next_btoken(etoken);
138
			etoken=next_etoken(btoken);
139
			vec[1] = strtod(btoken,0);
140
			btoken=next_btoken(etoken);
141
			etoken=next_etoken(btoken);
142
			vec[2] = strtod(btoken,0);
143
			btoken=next_btoken(etoken);
144
			etoken=next_etoken(btoken);
145
			v.push_back(vec);
146
		}
147
	}
148
 
149
	void parse(const char* str,vector<int>& v) 
150
	{
151
		const char *btoken=next_btoken(const_cast<char*>(str));
152
		char *etoken= next_etoken(btoken);
153
		while(etoken>btoken)
154
			{
155
				v.push_back(strtol(btoken,0,10));
156
				btoken=next_btoken(etoken);
157
				etoken=next_etoken(btoken);
158
			}
159
	}
160
 
161
}