• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

marble

  • kde-4.x
  • kdeedu
  • marble
  • src
  • 3rdparty
  • o5mreader
o5mreader.cpp
Go to the documentation of this file.
1 // Permission is hereby granted, free of charge, to any person obtaining a
2 // copy of this software and associated documentation files (the "Software"),
3 // to deal in the Software without restriction, including without limitation
4 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
5 // and/or sell copies of the Software, and to permit persons to whom the
6 // Software is furnished to do so, subject to the following conditions:
7 
8 // The above copyright notice and this permission notice shall be included in
9 // all copies or substantial portions of the Software.
10 
11 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
12 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
15 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
16 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
17 // DEALINGS IN THE SOFTWARE.
18 
19 
20 #include "o5mreader.h"
21 #include <cstdint>
22 #include <cstdio>
23 #include <cstring>
24 #include <cerrno>
25 #include <cstdlib>
26 
27 
28 #define STR_PAIR_TABLE_SIZE 15000
29 #define STR_PAIR_STRING_SIZE 256
30 
31 
32 O5mreaderRet o5mreader_readUInt(O5mreader *pReader, uint64_t *ret) {
33  uint8_t b;
34  uint8_t i = 0;
35  *ret = 0LL;
36 
37  do {
38  if ( fread(&b,1,1,pReader->f) == 0 ) {
39  o5mreader_setError(pReader,
40  O5MREADER_ERR_CODE_UNEXPECTED_END_OF_FILE,
41  NULL
42  );
43  return O5MREADER_RET_ERR;
44  }
45  *ret |= (long long)(b & 0x7f) << (i++ * 7);
46  } while ( b & 0x80 );
47 
48  o5mreader_setNoError(pReader);
49 
50  return O5MREADER_RET_OK;
51 }
52 
53 O5mreaderRet o5mreader_readInt(O5mreader *pReader, uint64_t *ret) {
54  if ( o5mreader_readUInt(pReader, ret) == O5MREADER_RET_ERR )
55  return O5MREADER_RET_ERR;
56  *ret = *ret & 1
57  ? -(int64_t)(*ret >> 1) - 1
58  : (int64_t)(*ret >> 1);
59  return O5MREADER_RET_OK;
60 }
61 
62 
63 O5mreaderRet o5mreader_readStrPair(O5mreader *pReader, char **tagpair, int single) {
64  static char buffer[1024];
65  char* pBuf;
66  static uint64_t pointer = 0;
67  int length;
68  uint64_t key;
69  int i;
70 
71  if ( o5mreader_readUInt(pReader,&key) == O5MREADER_RET_ERR ) {
72  return O5MREADER_RET_ERR;
73  }
74 
75  if ( key ) {
76  *tagpair = pReader->strPairTable[(pointer+15000-key)%15000];
77  return key;
78  }
79  else {
80  pBuf = buffer;
81  for ( i=0; i<(single?1:2); i++ ) {
82  do {
83  if ( fread(pBuf,1,1,pReader->f) == 0 ) {
84  o5mreader_setError(pReader,
85  O5MREADER_ERR_CODE_UNEXPECTED_END_OF_FILE,
86  NULL
87  );
88  return O5MREADER_RET_ERR;
89  }
90  } while ( *(pBuf++) );
91  }
92 
93  length = strlen(buffer) + (single ? 1 : strlen(buffer+strlen(buffer) +1) + 2);
94 
95  if ( length <= 252 ) {
96  *tagpair = pReader->strPairTable[(pointer+15000)%15000];
97  memcpy(pReader->strPairTable[((pointer++)+15000)%15000],buffer,length);
98  }
99  else {
100  *tagpair = buffer;
101  }
102 
103  }
104 
105  return O5MREADER_RET_OK;
106 }
107 
108 O5mreaderRet o5mreader_reset(O5mreader *pReader) {
109  pReader->nodeId = pReader->wayId = pReader->wayNodeId = pReader->relId = pReader->nodeRefId = pReader->wayRefId = pReader->relRefId = 0;
110  pReader->lon = pReader->lat = 0;
111  pReader->offset = 0;
112  pReader->canIterateTags = pReader->canIterateNds = pReader->canIterateRefs = 0;
113  return O5MREADER_RET_OK;
114 }
115 
116 O5mreaderRet o5mreader_open(O5mreader **ppReader,FILE* f) {
117  uint8_t byte;
118  int i;
119  *ppReader = (O5mreader*)malloc(sizeof(O5mreader));
120  if ( !(*ppReader) ) {
121  return O5MREADER_RET_ERR;
122  }
123  (*ppReader)->errMsg = NULL;
124  (*ppReader)->f = f;
125  (*ppReader)->strPairTable = NULL;
126  if ( fread(&byte,1,1,(*ppReader)->f) == 0 ) {
127  o5mreader_setError(*ppReader,
128  O5MREADER_ERR_CODE_UNEXPECTED_END_OF_FILE,
129  NULL
130  );
131  return O5MREADER_RET_ERR;
132  }
133  if ( byte != O5MREADER_DS_RESET ) {
134  o5mreader_setError(*ppReader,
135  O5MREADER_ERR_CODE_FILE_HAS_WRONG_START,
136  NULL
137  );
138  return O5MREADER_RET_ERR;
139  }
140 
141  o5mreader_reset(*ppReader);
142 
143  (*ppReader)->strPairTable = (char**) malloc(STR_PAIR_TABLE_SIZE*sizeof(char*));
144  if ( (*ppReader)->strPairTable == 0 ) {
145  o5mreader_setError(*ppReader,
146  O5MREADER_ERR_CODE_MEMORY_ERROR,
147  NULL
148  );
149  return O5MREADER_RET_ERR;
150  }
151  for ( i = 0; i < STR_PAIR_TABLE_SIZE; ++i ) {
152  (*ppReader)->strPairTable[i] = (char*) malloc(sizeof(char)*STR_PAIR_STRING_SIZE);
153  if ( (*ppReader)->strPairTable[i] == 0 ) {
154  o5mreader_setError(*ppReader,
155  O5MREADER_ERR_CODE_MEMORY_ERROR,
156  NULL
157  );
158  return O5MREADER_RET_ERR;
159  }
160  }
161 
162  o5mreader_setNoError(*ppReader);
163  return O5MREADER_RET_OK;
164 }
165 
166 void o5mreader_close(O5mreader *pReader) {
167  int i;
168  if ( pReader ) {
169  if ( pReader->strPairTable ) {
170  for ( i = 0; i < STR_PAIR_TABLE_SIZE; ++i )
171  if ( pReader->strPairTable[i] )
172  free(pReader->strPairTable[i]);
173  free(pReader->strPairTable);
174  }
175  o5mreader_setNoError(pReader);
176  free(pReader);
177  }
178 }
179 
180 const char* o5mreader_strerror(int errCode) {
181  switch ( errCode ) {
182  case O5MREADER_ERR_CODE_FILE_HAS_WRONG_START:
183  return "'0xFF' isn't first byte of file.";
184  case O5MREADER_ERR_CODE_MEMORY_ERROR:
185  return "Memory error.";
186  case O5MREADER_ERR_CODE_UNEXPECTED_END_OF_FILE:
187  return "Unexpected end of file.";
188  case O5MREADER_ERR_CODE_CAN_NOT_ITERATE_TAGS_HERE:
189  return "Tags iteration is not allowed here.";
190  case O5MREADER_ERR_CODE_CAN_NOT_ITERATE_NDS_HERE:
191  return "Nodes iteration is not allowed here.";
192  case O5MREADER_ERR_CODE_CAN_NOT_ITERATE_REFS_HERE:
193  return "References iteration is not allowed here.";
194  default:
195  return "Unknown error code";
196  }
197 }
198 
199 void o5mreader_setError(O5mreader *pReader,int code, const char* message) {
200  pReader->errCode = code;
201  if ( pReader->errMsg ) {
202  free(pReader->errMsg);
203  }
204  if ( message ) {
205  pReader->errMsg = (char*) malloc(strlen(message)+1);
206  strcpy(pReader->errMsg,message);
207  }
208 }
209 
210 void o5mreader_setNoError(O5mreader *pReader) {
211  pReader->errCode = O5MREADER_ERR_CODE_OK;
212  if ( pReader->errMsg ) {
213  free(pReader->errMsg);
214  }
215  pReader->errMsg = NULL;
216 }
217 
218 O5mreaderIterateRet o5mreader_iterateDataSet(O5mreader *pReader, O5mreaderDataset* ds) {
219  for (;;) {
220  if ( pReader->offset ) {
221  if ( o5mreader_skipTags(pReader) == O5MREADER_ITERATE_RET_ERR )
222  return O5MREADER_ITERATE_RET_ERR;
223 
224  fseek(
225  pReader->f,
226  (pReader->current - ftell(pReader->f)) + pReader->offset,
227  SEEK_CUR
228  );
229 
230  pReader->offset = 0;
231  }
232 
233  if ( fread(&(ds->type),1,1,pReader->f) == 0 ) {
234  o5mreader_setError(pReader,
235  O5MREADER_ERR_CODE_UNEXPECTED_END_OF_FILE,
236  NULL
237  );
238  return O5MREADER_ITERATE_RET_ERR;
239  }
240 
241  if ( O5MREADER_DS_END == ds->type )
242  return O5MREADER_ITERATE_RET_DONE;
243 
244  if ( O5MREADER_DS_RESET == ds->type ) {
245  o5mreader_reset(pReader);
246  }
247  else if ( 0xf0 == ds->type ) {}
248  else {
249  if ( o5mreader_readUInt(pReader,&pReader->offset) == O5MREADER_RET_ERR ) {
250  return O5MREADER_ITERATE_RET_ERR;
251  }
252  pReader->current = ftell(pReader->f);
253 
254  switch ( ds->type ) {
255  case O5MREADER_DS_NODE:
256  return o5mreader_readNode(pReader, ds);
257  case O5MREADER_DS_WAY:
258  return o5mreader_readWay(pReader, ds);
259  case O5MREADER_DS_REL:
260  return o5mreader_readRel(pReader, ds);
261  /*
262  case O5MREADER_DS_BBOX:
263  case O5MREADER_DS_TSTAMP:
264  case O5MREADER_DS_HEADER:
265  case O5MREADER_DS_SYNC:
266  case O5MREADER_DS_JUMP:
267  default:
268  break;
269  */
270  }
271  }
272  }
273 
274 
275 }
276 
277 int o5mreader_thereAreNoMoreData(O5mreader *pReader) {
278  return (int)((pReader->current - ftell(pReader->f)) + pReader->offset) <= 0;
279 }
280 
281 O5mreaderIterateRet o5mreader_readVersion(O5mreader *pReader, O5mreaderDataset* ds) {
282  uint64_t tmp;
283  if ( o5mreader_readUInt(pReader,&tmp) == O5MREADER_ITERATE_RET_ERR ) {
284  return O5MREADER_ITERATE_RET_ERR;
285  }
286  ds->version = tmp;
287  if ( tmp ) {
288  if ( o5mreader_readUInt(pReader,&tmp) == O5MREADER_ITERATE_RET_ERR ) {
289  return O5MREADER_ITERATE_RET_ERR;
290  }
291 
292  if ( o5mreader_readInt(pReader,&tmp) == O5MREADER_ITERATE_RET_ERR ) {
293  return O5MREADER_ITERATE_RET_ERR;
294  }
295 
296  if ( o5mreader_thereAreNoMoreData(pReader) )
297  return O5MREADER_ITERATE_RET_DONE;
298 
299  if ( o5mreader_readStrPair(pReader,&pReader->tagPair,0) == O5MREADER_ITERATE_RET_ERR ) {
300  return O5MREADER_ITERATE_RET_ERR;
301  }
302  }
303 
304  if ( o5mreader_thereAreNoMoreData(pReader) )
305  return O5MREADER_ITERATE_RET_DONE;
306 
307  return O5MREADER_ITERATE_RET_NEXT;
308 }
309 
310 O5mreaderIterateRet o5mreader_iterateTags(O5mreader *pReader, char** pKey, char** pVal) {
311  if ( pReader->canIterateRefs ) {
312  if ( o5mreader_skipRefs(pReader) == O5MREADER_ITERATE_RET_ERR )
313  return O5MREADER_ITERATE_RET_ERR;
314  }
315  if ( pReader->canIterateNds ) {
316  if ( o5mreader_skipNds(pReader) == O5MREADER_ITERATE_RET_ERR )
317  return O5MREADER_ITERATE_RET_ERR;
318  }
319  if ( !pReader->canIterateTags ) {
320  o5mreader_setError(pReader,
321  O5MREADER_ERR_CODE_CAN_NOT_ITERATE_TAGS_HERE,
322  NULL
323  );
324  return O5MREADER_ITERATE_RET_ERR;
325  }
326  if ( o5mreader_thereAreNoMoreData(pReader) ) {
327  pReader->canIterateTags = 0;
328  return O5MREADER_ITERATE_RET_DONE;
329  }
330 
331  if ( o5mreader_readStrPair(pReader,&pReader->tagPair,0) == O5MREADER_RET_ERR ) {
332  return O5MREADER_ITERATE_RET_ERR;
333  }
334  if ( pKey )
335  *pKey = pReader->tagPair;
336  if ( pVal )
337  *pVal = pReader->tagPair + strlen(pReader->tagPair) + 1;
338 
339  return O5MREADER_ITERATE_RET_NEXT;
340 }
341 
342 O5mreaderIterateRet o5mreader_skipTags(O5mreader *pReader) {
343  int ret = O5MREADER_ITERATE_RET_DONE;
344  if ( pReader->canIterateTags ) {
345  while ( O5MREADER_ITERATE_RET_NEXT == (ret = o5mreader_iterateTags(pReader, NULL, NULL)) );
346  }
347 
348  return ret;
349 }
350 
351 O5mreaderIterateRet o5mreader_readNode(O5mreader *pReader, O5mreaderDataset* ds) {
352  int64_t nodeId;
353  int64_t lon,lat;
354  if ( o5mreader_readInt(pReader,(uint64_t *)&nodeId) == O5MREADER_RET_ERR )
355  return O5MREADER_ITERATE_RET_ERR;
356 
357  pReader->canIterateRefs = 0;
358  pReader->canIterateNds = 0;
359  pReader->canIterateTags = 1;
360 
361  pReader->nodeId += nodeId;
362  ds->id = pReader->nodeId;
363 
364 
365  if ( o5mreader_readVersion(pReader, ds) == O5MREADER_ITERATE_RET_DONE ) {
366  ds->isEmpty = 1;
367  return O5MREADER_ITERATE_RET_NEXT;
368  }
369  else
370  ds->isEmpty = 0;
371 
372  if ( o5mreader_thereAreNoMoreData(pReader) ) {
373  return O5MREADER_ITERATE_RET_NEXT;
374  }
375 
376  if ( o5mreader_readInt(pReader,(uint64_t *)&lon) == O5MREADER_RET_ERR )
377  return O5MREADER_ITERATE_RET_ERR;
378  pReader->lon += (int32_t)lon;
379 
380  if ( o5mreader_readInt(pReader,(uint64_t *)&lat) == O5MREADER_RET_ERR ) {
381  return O5MREADER_ITERATE_RET_ERR;
382  }
383  pReader->lat += (int32_t)lat;
384 
385  ds->lon = pReader->lon;
386  ds->lat = pReader->lat;
387 
388  return O5MREADER_ITERATE_RET_NEXT;
389 }
390 
391 O5mreaderIterateRet o5mreader_iterateNds(O5mreader *pReader, uint64_t *nodeId) {
392  int64_t wayNodeId;
393 
394  if ( !pReader->canIterateNds ) {
395  o5mreader_setError(pReader,
396  O5MREADER_ERR_CODE_CAN_NOT_ITERATE_NDS_HERE,
397  NULL
398  );
399  return O5MREADER_ITERATE_RET_ERR;
400  }
401  if ( ftell(pReader->f) >= long(pReader->offsetNd) ) {
402  pReader->canIterateNds = 0;
403  pReader->canIterateTags = 1;
404  pReader->canIterateRefs = 0;
405  return O5MREADER_ITERATE_RET_DONE;
406  }
407 
408  if ( o5mreader_readInt(pReader,(uint64_t *)&wayNodeId) == O5MREADER_RET_ERR )
409  return O5MREADER_ITERATE_RET_ERR;
410 
411  pReader->wayNodeId += wayNodeId;
412 
413  if ( nodeId )
414  *nodeId = pReader->wayNodeId;
415 
416  return O5MREADER_ITERATE_RET_NEXT;
417 }
418 
419 O5mreaderIterateRet o5mreader_skipNds(O5mreader *pReader) {
420  uint8_t ret;
421  while ( pReader->canIterateNds &&
422  O5MREADER_ITERATE_RET_NEXT == (ret = o5mreader_iterateNds(pReader, NULL)) );
423  return ret;
424 }
425 
426 O5mreaderIterateRet o5mreader_readWay(O5mreader *pReader, O5mreaderDataset* ds) {
427  int64_t wayId;
428  if ( o5mreader_readInt(pReader,(uint64_t *)&wayId) == O5MREADER_RET_ERR)
429  return O5MREADER_ITERATE_RET_ERR;
430 
431  pReader->wayId += wayId;
432  ds->id = pReader->wayId;
433  if ( o5mreader_readVersion(pReader, ds) == O5MREADER_ITERATE_RET_DONE ) {
434  ds->isEmpty = 1;
435  return O5MREADER_ITERATE_RET_NEXT;
436  }
437  else
438  ds->isEmpty = 0;
439  if ( o5mreader_readUInt(pReader,&pReader->offsetNd) == O5MREADER_RET_ERR ) {
440  return O5MREADER_ITERATE_RET_ERR;
441  }
442  pReader->offsetNd += ftell(pReader->f);
443  pReader->canIterateRefs = 0;
444  pReader->canIterateNds = 1;
445  pReader->canIterateTags = 0;
446  return O5MREADER_ITERATE_RET_NEXT;
447 }
448 
449 O5mreaderIterateRet o5mreader_iterateRefs(O5mreader *pReader, uint64_t *refId, uint8_t *type, char** pRole) {
450  int64_t relRefId;
451 
452  if ( !pReader->canIterateRefs ) {
453  o5mreader_setError(pReader,
454  O5MREADER_ERR_CODE_CAN_NOT_ITERATE_REFS_HERE,
455  NULL
456  );
457  return O5MREADER_ITERATE_RET_ERR;
458  }
459  if ( ftell(pReader->f) >= long(pReader->offsetRf) ) {
460  pReader->canIterateNds = 0;
461  pReader->canIterateTags = 1;
462  pReader->canIterateRefs = 0;
463  return O5MREADER_ITERATE_RET_DONE;
464  }
465 
466  if ( o5mreader_readInt(pReader, (uint64_t *)&relRefId) == O5MREADER_RET_ERR )
467  return O5MREADER_ITERATE_RET_ERR;
468 
469 
470  //fread(_,1,1,pReader->f);
471 
472  if ( o5mreader_readStrPair(pReader, &pReader->tagPair,1) == O5MREADER_RET_ERR ) {
473  return O5MREADER_ITERATE_RET_ERR;
474  }
475 
476  switch( pReader->tagPair[0] ) {
477  case '0':
478  if ( type )
479  *type = O5MREADER_DS_NODE;
480  pReader->nodeRefId += relRefId;
481  if ( refId )
482  *refId = pReader->nodeRefId;
483  break;
484  case '1':
485  if ( type )
486  *type = O5MREADER_DS_WAY;
487  pReader->wayRefId += relRefId;
488  if ( refId )
489  *refId = pReader->wayRefId;
490  break;
491  case '2':
492  if ( type )
493  *type = O5MREADER_DS_REL;
494  pReader->relRefId += relRefId;
495  if ( refId )
496  *refId = pReader->relRefId;
497  break;
498  }
499 
500  if ( pRole ) {
501  *pRole = pReader->tagPair + 1;
502  }
503 
504  return O5MREADER_ITERATE_RET_NEXT;
505 }
506 
507 O5mreaderIterateRet o5mreader_skipRefs(O5mreader *pReader) {
508  uint8_t ret;
509  while ( pReader->canIterateRefs &&
510  O5MREADER_ITERATE_RET_NEXT == (ret = o5mreader_iterateRefs(pReader, NULL, NULL, NULL)) );
511  return ret;
512 }
513 
514 O5mreaderIterateRet o5mreader_readRel(O5mreader *pReader, O5mreaderDataset* ds) {
515  int64_t relId;
516  if ( o5mreader_readInt(pReader,(uint64_t *)&relId) == O5MREADER_RET_ERR )
517  return O5MREADER_ITERATE_RET_ERR;
518  pReader->relId += relId;
519  ds->id = pReader->relId;
520  if ( o5mreader_readVersion(pReader,ds) == O5MREADER_ITERATE_RET_DONE ) {
521  ds->isEmpty = 1;
522  return O5MREADER_ITERATE_RET_NEXT;
523  }
524  else
525  ds->isEmpty = 0;
526  o5mreader_readUInt(pReader,&pReader->offsetRf);
527  pReader->offsetRf += ftell(pReader->f);
528 
529  pReader->canIterateRefs = 1;
530  pReader->canIterateNds = 0;
531  pReader->canIterateTags = 0;
532  return O5MREADER_ITERATE_RET_NEXT;
533 }
o5mreader_thereAreNoMoreData
int o5mreader_thereAreNoMoreData(O5mreader *pReader)
Definition: o5mreader.cpp:277
O5mreaderDataset::isEmpty
uint8_t isEmpty
Definition: o5mreader.h:85
STR_PAIR_STRING_SIZE
#define STR_PAIR_STRING_SIZE
Definition: o5mreader.cpp:29
O5mreaderIterateRet
int O5mreaderIterateRet
Definition: o5mreader.h:55
O5mreader::offsetRf
uint64_t offsetRf
Definition: o5mreader.h:63
O5mreaderDataset::lon
int32_t lon
Definition: o5mreader.h:86
O5mreader::canIterateNds
uint8_t canIterateNds
Definition: o5mreader.h:76
o5mreader_close
void o5mreader_close(O5mreader *pReader)
Definition: o5mreader.cpp:166
O5mreader::nodeRefId
int64_t nodeRefId
Definition: o5mreader.h:70
O5mreader::wayNodeId
int64_t wayNodeId
Definition: o5mreader.h:68
O5mreaderDataset::id
uint64_t id
Definition: o5mreader.h:83
o5mreader_readNode
O5mreaderIterateRet o5mreader_readNode(O5mreader *pReader, O5mreaderDataset *ds)
Definition: o5mreader.cpp:351
O5mreader::relRefId
int64_t relRefId
Definition: o5mreader.h:72
o5mreader_readStrPair
O5mreaderRet o5mreader_readStrPair(O5mreader *pReader, char **tagpair, int single)
Definition: o5mreader.cpp:63
O5MREADER_DS_END
#define O5MREADER_DS_END
Definition: o5mreader.h:34
o5mreader_iterateNds
O5mreaderIterateRet o5mreader_iterateNds(O5mreader *pReader, uint64_t *nodeId)
Definition: o5mreader.cpp:391
O5mreader::strPairTable
char ** strPairTable
Definition: o5mreader.h:78
o5mreader_readInt
O5mreaderRet o5mreader_readInt(O5mreader *pReader, uint64_t *ret)
Definition: o5mreader.cpp:53
O5MREADER_DS_WAY
#define O5MREADER_DS_WAY
Definition: o5mreader.h:36
O5mreaderDataset::lat
int32_t lat
Definition: o5mreader.h:87
O5mreader::current
uint64_t current
Definition: o5mreader.h:64
O5MREADER_DS_RESET
#define O5MREADER_DS_RESET
Definition: o5mreader.h:43
O5mreaderRet
int O5mreaderRet
Definition: o5mreader.h:54
O5mreaderDataset::version
uint32_t version
Definition: o5mreader.h:84
o5mreader_iterateTags
O5mreaderIterateRet o5mreader_iterateTags(O5mreader *pReader, char **pKey, char **pVal)
Definition: o5mreader.cpp:310
o5mreader_readWay
O5mreaderIterateRet o5mreader_readWay(O5mreader *pReader, O5mreaderDataset *ds)
Definition: o5mreader.cpp:426
O5mreader::canIterateTags
uint8_t canIterateTags
Definition: o5mreader.h:75
o5mreader_skipTags
O5mreaderIterateRet o5mreader_skipTags(O5mreader *pReader)
Definition: o5mreader.cpp:342
O5mreader::canIterateRefs
uint8_t canIterateRefs
Definition: o5mreader.h:77
o5mreader.h
o5mreader_open
O5mreaderRet o5mreader_open(O5mreader **ppReader, FILE *f)
Definition: o5mreader.cpp:116
O5MREADER_ITERATE_RET_ERR
#define O5MREADER_ITERATE_RET_ERR
Definition: o5mreader.h:31
O5MREADER_ITERATE_RET_NEXT
#define O5MREADER_ITERATE_RET_NEXT
Definition: o5mreader.h:32
O5mreader::tagPair
char * tagPair
Definition: o5mreader.h:65
O5MREADER_ERR_CODE_OK
#define O5MREADER_ERR_CODE_OK
Definition: o5mreader.h:46
O5mreader::nodeId
int64_t nodeId
Definition: o5mreader.h:66
O5MREADER_DS_NODE
#define O5MREADER_DS_NODE
Definition: o5mreader.h:35
o5mreader_iterateDataSet
O5mreaderIterateRet o5mreader_iterateDataSet(O5mreader *pReader, O5mreaderDataset *ds)
Definition: o5mreader.cpp:218
O5mreader
Definition: o5mreader.h:57
O5MREADER_ERR_CODE_UNEXPECTED_END_OF_FILE
#define O5MREADER_ERR_CODE_UNEXPECTED_END_OF_FILE
Definition: o5mreader.h:48
O5mreader::lon
int32_t lon
Definition: o5mreader.h:73
O5mreader::offsetNd
uint64_t offsetNd
Definition: o5mreader.h:62
o5mreader_readUInt
O5mreaderRet o5mreader_readUInt(O5mreader *pReader, uint64_t *ret)
Definition: o5mreader.cpp:32
O5mreaderDataset
Definition: o5mreader.h:81
O5MREADER_ERR_CODE_CAN_NOT_ITERATE_NDS_HERE
#define O5MREADER_ERR_CODE_CAN_NOT_ITERATE_NDS_HERE
Definition: o5mreader.h:51
O5MREADER_DS_REL
#define O5MREADER_DS_REL
Definition: o5mreader.h:37
o5mreader_setNoError
void o5mreader_setNoError(O5mreader *pReader)
Definition: o5mreader.cpp:210
O5mreader::offset
uint64_t offset
Definition: o5mreader.h:61
O5MREADER_ERR_CODE_MEMORY_ERROR
#define O5MREADER_ERR_CODE_MEMORY_ERROR
Definition: o5mreader.h:49
o5mreader_readRel
O5mreaderIterateRet o5mreader_readRel(O5mreader *pReader, O5mreaderDataset *ds)
Definition: o5mreader.cpp:514
O5mreader::wayRefId
int64_t wayRefId
Definition: o5mreader.h:71
code
Definition: inftrees.h:24
o5mreader_reset
O5mreaderRet o5mreader_reset(O5mreader *pReader)
Definition: o5mreader.cpp:108
O5MREADER_ERR_CODE_FILE_HAS_WRONG_START
#define O5MREADER_ERR_CODE_FILE_HAS_WRONG_START
Definition: o5mreader.h:47
O5mreader::lat
int32_t lat
Definition: o5mreader.h:74
o5mreader_readVersion
O5mreaderIterateRet o5mreader_readVersion(O5mreader *pReader, O5mreaderDataset *ds)
Definition: o5mreader.cpp:281
O5mreader::relId
int64_t relId
Definition: o5mreader.h:69
O5MREADER_ITERATE_RET_DONE
#define O5MREADER_ITERATE_RET_DONE
Definition: o5mreader.h:30
O5MREADER_ERR_CODE_CAN_NOT_ITERATE_REFS_HERE
#define O5MREADER_ERR_CODE_CAN_NOT_ITERATE_REFS_HERE
Definition: o5mreader.h:52
o5mreader_skipRefs
O5mreaderIterateRet o5mreader_skipRefs(O5mreader *pReader)
Definition: o5mreader.cpp:507
o5mreader_skipNds
O5mreaderIterateRet o5mreader_skipNds(O5mreader *pReader)
Definition: o5mreader.cpp:419
O5MREADER_RET_OK
#define O5MREADER_RET_OK
Definition: o5mreader.h:27
O5mreaderDataset::type
uint8_t type
Definition: o5mreader.h:82
o5mreader_strerror
const char * o5mreader_strerror(int errCode)
Definition: o5mreader.cpp:180
O5MREADER_ERR_CODE_CAN_NOT_ITERATE_TAGS_HERE
#define O5MREADER_ERR_CODE_CAN_NOT_ITERATE_TAGS_HERE
Definition: o5mreader.h:50
STR_PAIR_TABLE_SIZE
#define STR_PAIR_TABLE_SIZE
Definition: o5mreader.cpp:28
O5mreader::errMsg
char * errMsg
Definition: o5mreader.h:59
o5mreader_setError
void o5mreader_setError(O5mreader *pReader, int code, const char *message)
Definition: o5mreader.cpp:199
O5MREADER_RET_ERR
#define O5MREADER_RET_ERR
Definition: o5mreader.h:28
o5mreader_iterateRefs
O5mreaderIterateRet o5mreader_iterateRefs(O5mreader *pReader, uint64_t *refId, uint8_t *type, char **pRole)
Definition: o5mreader.cpp:449
O5mreader::f
FILE * f
Definition: o5mreader.h:60
O5mreader::errCode
int errCode
Definition: o5mreader.h:58
O5mreader::wayId
int64_t wayId
Definition: o5mreader.h:67
This file is part of the KDE documentation.
Documentation copyright © 1996-2019 The KDE developers.
Generated on Wed Dec 11 2019 06:11:10 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

marble

Skip menu "marble"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  •   KmPlot
  • libkeduvocdocument
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   src
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal