@@ -20,128 +20,128 @@ namespace osmo {
20
20
DBClientConnection* c;
21
21
const char * collection;
22
22
GeoObject geoObject;
23
- } context;
23
+ } context;
24
24
25
25
const int BUFFER_SIZE = 10240 * 1 ;
26
26
27
27
void init_object (GeoObject* geoObject, const XML_Char* element, const XML_Char** attrs) {
28
28
29
- geoObject->reset ();
30
- geoObject->set_attr (" p" , element);
31
- for (int i = 0 ; attrs[i]; i += 2 ) {
29
+ geoObject->reset ();
30
+ geoObject->set_attr (" p" , element);
31
+ for (int i = 0 ; attrs[i]; i += 2 ) {
32
32
33
- geoObject->set_attr (attrs[i], attrs[i + 1 ]);
34
- }
33
+ geoObject->set_attr (attrs[i], attrs[i + 1 ]);
34
+ }
35
35
}
36
36
37
37
void XMLCALL startElement (void * data, const XML_Char* element, const XML_Char** attrs) {
38
38
39
39
context* ct = (context*)data;
40
40
GeoObject* geoObject = &ct->geoObject ;
41
41
42
- // order in the following "if" statements is based on frequency of tags in planet file
43
- if (!strcmp (element, " nd" )) {
42
+ // order in the following "if" statements is based on frequency of tags in planet file
43
+ if (!strcmp (element, " nd" )) {
44
44
45
- GeoObjectRef geoObjectRef;
46
- geoObjectRef.set_attr (" p" , " n" );
47
- for (int i = 0 ; attrs[i]; i += 2 ) {
48
-
49
- geoObjectRef.set_attr (attrs[i], attrs[i + 1 ]);
50
- }
51
- geoObject->parts ->add (geoObjectRef);
52
- }
53
- else if (!strcmp (element, " node" )) {
45
+ GeoObjectRef geoObjectRef;
46
+ geoObjectRef.set_attr (" p" , " n" );
47
+ for (int i = 0 ; attrs[i]; i += 2 ) {
48
+
49
+ geoObjectRef.set_attr (attrs[i], attrs[i + 1 ]);
50
+ }
51
+ geoObject->parts ->add (geoObjectRef);
52
+ }
53
+ else if (!strcmp (element, " node" )) {
54
54
55
- init_object (geoObject, element, attrs);
56
- }
57
- else if (!strcmp (element, " tag" )) {
55
+ init_object (geoObject, element, attrs);
56
+ }
57
+ else if (!strcmp (element, " tag" )) {
58
58
59
59
Tag tag;
60
- for (int i = 0 ; attrs[i]; i += 2 ) {
61
-
62
- tag.set_attr (attrs[i], attrs[i + 1 ]);
63
- }
64
- geoObject->add_tag (tag);
65
- }
66
- else if (!strcmp (element, " way" )) {
67
-
68
- init_object (geoObject, element, attrs);
69
- }
70
- else if (!strcmp (element, " member" )) {
60
+ for (int i = 0 ; attrs[i]; i += 2 ) {
61
+
62
+ tag.set_attr (attrs[i], attrs[i + 1 ]);
63
+ }
64
+ geoObject->add_tag (tag);
65
+ }
66
+ else if (!strcmp (element, " way" )) {
67
+
68
+ init_object (geoObject, element, attrs);
69
+ }
70
+ else if (!strcmp (element, " member" )) {
71
71
72
72
GeoObjectRef geoObjectRef;
73
73
GeoObjectRel geoObjectRel;
74
- for (int i = 0 ; attrs[i]; i += 2 ) {
75
-
76
- geoObjectRef.set_attr (attrs[i], attrs[i + 1 ]);
77
- geoObjectRel.set_attr (attrs[i], attrs[i + 1 ]);
78
- }
79
- geoObject->parts ->add (geoObjectRef, geoObjectRel);
80
- }
81
- else if (!strcmp (element, " relation" )) {
82
-
74
+ for (int i = 0 ; attrs[i]; i += 2 ) {
75
+
76
+ geoObjectRef.set_attr (attrs[i], attrs[i + 1 ]);
77
+ geoObjectRel.set_attr (attrs[i], attrs[i + 1 ]);
78
+ }
79
+ geoObject->parts ->add (geoObjectRef, geoObjectRel);
80
+ }
81
+ else if (!strcmp (element, " relation" )) {
82
+
83
83
init_object (geoObject, element, attrs);
84
- }
84
+ }
85
85
}
86
86
87
87
void XMLCALL endElement (void *data, const XML_Char* element) {
88
88
89
89
context* ct = (context*)data;
90
90
91
- if (!strcmp (element, " node" ) || !strcmp (element, " way" ) || !strcmp (element, " relation" )) {
91
+ if (!strcmp (element, " node" ) || !strcmp (element, " way" ) || !strcmp (element, " relation" )) {
92
92
93
- ct->c ->insert (ct->collection , ct->geoObject .getBson ());
94
- // std::cout << ct->c->getLastErrorDetailed().jsonString() << " ";
95
- }
93
+ ct->c ->insert (ct->collection , ct->geoObject .getBson ());
94
+ // std::cout << ct->c->getLastErrorDetailed().jsonString() << " ";
95
+ }
96
96
}
97
97
98
98
void parse (int fd, DBClientConnection* c, const char * collection) {
99
99
100
- bool done;
101
- register context ct = {
102
- c,
103
- collection,
100
+ bool done;
101
+ register context ct = {
102
+ c,
103
+ collection,
104
104
GeoObject ()
105
- };
106
-
107
- // c->dropCollection(collection);
108
-
109
- XML_Parser parser = XML_ParserCreate (0 );
110
- if (!parser) {
111
- throw std::runtime_error (" Error creating parser" );
112
- }
113
-
114
- XML_SetUserData (parser, (void *)&ct);
115
-
116
- XML_SetElementHandler (parser, startElement, endElement);
117
-
118
- do {
119
- void *buffer = XML_GetBuffer (parser, BUFFER_SIZE);
120
- if (buffer == 0 ) {
121
- throw std::runtime_error (" Out of memory" );
122
- }
123
-
124
- int result = read (fd, buffer, BUFFER_SIZE);
125
- if (result < 0 ) {
126
- exit (1 );
127
- }
128
- done = (result == 0 );
129
- if (XML_ParseBuffer (parser, result, done) == XML_STATUS_ERROR)
130
- {
131
- XML_Error errorCode = XML_GetErrorCode (parser);
132
- long errorLine = XML_GetCurrentLineNumber (parser);
133
- long errorCol = XML_GetCurrentColumnNumber (parser);
134
- const XML_LChar *errorString = XML_ErrorString (errorCode);
135
-
136
- std::stringstream errorDesc;
137
- errorDesc << " XML parsing error at line " << errorLine << " :" << errorCol;
138
- errorDesc << " : " << errorString;
139
- throw std::runtime_error (errorDesc.str ());
140
- }
141
- } while (!done);
142
-
143
- XML_ParserFree (parser);
144
- // error = "";
105
+ };
106
+
107
+ // c->dropCollection(collection);
108
+
109
+ XML_Parser parser = XML_ParserCreate (0 );
110
+ if (!parser) {
111
+ throw std::runtime_error (" Error creating parser" );
112
+ }
113
+
114
+ XML_SetUserData (parser, (void *)&ct);
115
+
116
+ XML_SetElementHandler (parser, startElement, endElement);
117
+
118
+ do {
119
+ void *buffer = XML_GetBuffer (parser, BUFFER_SIZE);
120
+ if (buffer == 0 ) {
121
+ throw std::runtime_error (" Out of memory" );
122
+ }
123
+
124
+ int result = read (fd, buffer, BUFFER_SIZE);
125
+ if (result < 0 ) {
126
+ exit (1 );
127
+ }
128
+ done = (result == 0 );
129
+ if (XML_ParseBuffer (parser, result, done) == XML_STATUS_ERROR)
130
+ {
131
+ XML_Error errorCode = XML_GetErrorCode (parser);
132
+ long errorLine = XML_GetCurrentLineNumber (parser);
133
+ long errorCol = XML_GetCurrentColumnNumber (parser);
134
+ const XML_LChar *errorString = XML_ErrorString (errorCode);
135
+
136
+ std::stringstream errorDesc;
137
+ errorDesc << " XML parsing error at line " << errorLine << " :" << errorCol;
138
+ errorDesc << " : " << errorString;
139
+ throw std::runtime_error (errorDesc.str ());
140
+ }
141
+ } while (!done);
142
+
143
+ XML_ParserFree (parser);
144
+ // error = "";
145
145
}
146
146
147
147
0 commit comments