Subversion Repositories gelsvn

Rev

Rev 136 | Rev 595 | Go to most recent revision | 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
 
425 jrf 113
	void parse(const char* str,vector<double>& v) {
39 bj 114
		const char *btoken=next_btoken(const_cast<char*>(str));
115
		char *etoken= next_etoken(btoken);
116
		while(etoken>btoken)
117
		{
425 jrf 118
			v.push_back(strtod(btoken,0));
119
			btoken=next_btoken(etoken);
120
			etoken=next_etoken(btoken);
121
		}
122
	}
123
 
124
  void parse(const char* str,vector<Vec2f>& v) {
125
		const char *btoken=next_btoken(const_cast<char*>(str));
126
		char *etoken= next_etoken(btoken);
127
		while(etoken>btoken)
128
		{
39 bj 129
			Vec2f vec;
130
			vec[0] = strtod(btoken,0);
131
			btoken=next_btoken(etoken);
132
			etoken=next_etoken(btoken);
133
			vec[1] = strtod(btoken,0);
134
			btoken=next_btoken(etoken);
135
			etoken=next_etoken(btoken);
136
			v.push_back(vec);
137
		}
138
	}
139
 
140
	void parse(const char* str,vector<Vec3f>& v) {
141
   /* Establish string and get the first token: */
142
		const char *btoken=next_btoken(const_cast<char*>(str));
143
		char *etoken= next_etoken(btoken);
144
		while(etoken>btoken)
145
		{
146
			Vec3f vec;
147
			vec[0] = strtod(btoken,0);
148
			btoken=next_btoken(etoken);
149
			etoken=next_etoken(btoken);
150
			vec[1] = strtod(btoken,0);
151
			btoken=next_btoken(etoken);
152
			etoken=next_etoken(btoken);
153
			vec[2] = strtod(btoken,0);
154
			btoken=next_btoken(etoken);
155
			etoken=next_etoken(btoken);
156
			v.push_back(vec);
157
		}
158
	}
159
 
160
	void parse(const char* str,vector<int>& v) 
161
	{
162
		const char *btoken=next_btoken(const_cast<char*>(str));
163
		char *etoken= next_etoken(btoken);
164
		while(etoken>btoken)
165
			{
166
				v.push_back(strtol(btoken,0,10));
167
				btoken=next_btoken(etoken);
168
				etoken=next_etoken(btoken);
169
			}
170
	}
171
 
172
}