File indexing completed on 2024-04-21 03:48:27

0001 // SPDX-FileCopyrightText: 2012-2015 Pavel Klinger
0002 // SPDX-License-Identifier: MIT
0003 
0004 
0005 #ifndef O5MREADER_H
0006 #define O5MREADER_H
0007 
0008 #include <cstdint>
0009 #include <cstdio>
0010 
0011 
0012 #define O5MREADER_RET_OK 1
0013 #define O5MREADER_RET_ERR 0
0014 
0015 #define O5MREADER_ITERATE_RET_DONE 0
0016 #define O5MREADER_ITERATE_RET_ERR -1
0017 #define O5MREADER_ITERATE_RET_NEXT 1
0018 
0019 #define O5MREADER_DS_END 0xfe
0020 #define O5MREADER_DS_NODE 0x10
0021 #define O5MREADER_DS_WAY 0x11
0022 #define O5MREADER_DS_REL 0x12
0023 #define O5MREADER_DS_BBOX 0xdb
0024 #define O5MREADER_DS_TSTAMP 0xdc
0025 #define O5MREADER_DS_HEADER 0xe0
0026 #define O5MREADER_DS_SYNC 0xee
0027 #define O5MREADER_DS_JUMP 0xef
0028 #define O5MREADER_DS_RESET 0xff
0029 
0030 
0031 #define O5MREADER_ERR_CODE_OK 0
0032 #define O5MREADER_ERR_CODE_FILE_HAS_WRONG_START 1
0033 #define O5MREADER_ERR_CODE_UNEXPECTED_END_OF_FILE 2
0034 #define O5MREADER_ERR_CODE_MEMORY_ERROR 3
0035 #define O5MREADER_ERR_CODE_CAN_NOT_ITERATE_TAGS_HERE 4
0036 #define O5MREADER_ERR_CODE_CAN_NOT_ITERATE_NDS_HERE 5
0037 #define O5MREADER_ERR_CODE_CAN_NOT_ITERATE_REFS_HERE 6
0038 
0039 typedef int O5mreaderRet;
0040 typedef int O5mreaderIterateRet;
0041 
0042 typedef struct {
0043     int errCode;
0044     char* errMsg;
0045     FILE *f;
0046     uint64_t offset;
0047     uint64_t offsetNd;
0048     uint64_t offsetRf;
0049     uint64_t current;
0050     char* tagPair;
0051     int64_t nodeId;
0052     int64_t wayId;
0053     int64_t wayNodeId;  
0054     int64_t relId;  
0055     int64_t nodeRefId;
0056     int64_t wayRefId;
0057     int64_t relRefId;
0058     int32_t lon;
0059     int32_t lat;    
0060     uint8_t canIterateTags;
0061     uint8_t canIterateNds;
0062     uint8_t canIterateRefs;
0063     char** strPairTable;
0064 } O5mreader;
0065 
0066 typedef struct {    
0067     uint8_t type;   
0068     uint64_t id;
0069     uint32_t version;
0070     uint8_t isEmpty;
0071     int32_t lon;
0072     int32_t lat;    
0073 } O5mreaderDataset;
0074 
0075 #if defined (__cplusplus)
0076 extern "C" {
0077 #endif
0078 
0079 void o5mreader_setError(O5mreader *pReader,int code, const char* message);
0080 void o5mreader_setNoError(O5mreader *pReader);
0081 O5mreaderIterateRet o5mreader_skipTags(O5mreader *pReader);
0082 O5mreaderIterateRet o5mreader_readNode(O5mreader *pReader, O5mreaderDataset* ds);
0083 O5mreaderIterateRet o5mreader_readWay(O5mreader *pReader, O5mreaderDataset* ds);
0084 O5mreaderIterateRet o5mreader_readRel(O5mreader *pReader, O5mreaderDataset* ds);
0085 O5mreaderIterateRet o5mreader_skipRefs(O5mreader *pReader);
0086 O5mreaderIterateRet o5mreader_skipNds(O5mreader *pReader);
0087 O5mreaderRet o5mreader_readInt(O5mreader *pReader, uint64_t *ret);
0088 
0089 O5mreaderRet o5mreader_open(O5mreader **ppReader,FILE* f);
0090 
0091 void o5mreader_close(O5mreader *pReader);
0092 
0093 const char* o5mreader_strerror(int errCode);
0094 
0095 O5mreaderIterateRet o5mreader_iterateDataSet(O5mreader *pReader, O5mreaderDataset* ds);
0096 
0097 O5mreaderIterateRet o5mreader_iterateTags(O5mreader *pReader, char** pKey, char** pVal);
0098 
0099 O5mreaderIterateRet o5mreader_iterateNds(O5mreader *pReader, uint64_t *nodeId);
0100 
0101 O5mreaderIterateRet o5mreader_iterateRefs(O5mreader *pReader, uint64_t *refId, uint8_t *type, char** pRole);
0102 
0103 #if defined (__cplusplus)
0104 }
0105 #endif
0106 
0107 #endif // O5MREADER_H