File indexing completed on 2024-05-05 07:48:06
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