25 enum DatagramElement {
38 std::getline(in, line);
42 while (p < line.length()) {
44 while (p < line.length() && isspace(line[p])) {
49 if (p < line.length()) {
50 if (isdigit(line[p]) || line[p] ==
'-') {
54 while (p < line.length() && isdigit(line[p])) {
57 if (p < line.length() && line[p] ==
'.') {
60 while (p < line.length() && isdigit(line[p])) {
63 double num =
patof(line.substr(start, p - start).c_str());
68 int num = atoi(line.substr(start, p - start).c_str());
73 }
else if (line[p] ==
'"') {
77 while (p < line.length() && line[p] !=
'"') {
80 std::string str = line.substr(start, p - start);
88 while (p < line.length() && !isspace(line[p])) {
91 std::string str = line.substr(start, p - start);
102 operator << (ostream &out,
const NetDatagram &datagram) {
105 DatagramElement de = (DatagramElement)di.get_int8();
106 while (de != DE_end) {
109 out << di.get_int32() <<
" ";
113 out << di.get_float64() <<
" ";
117 out <<
"\"" << di.get_string() <<
"\" ";
121 out <<
"(invalid datagram)";
124 de = (DatagramElement)di.get_int8();