Simplify vflist_get_formatted()
[geeqie.git] / src / zonedetect.h
1 /*
2  * Copyright (c) 2018, Bertold Van den Bergh (vandenbergh@bertold.org)
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *     * Redistributions of source code must retain the above copyright
8  *       notice, this list of conditions and the following disclaimer.
9  *     * Redistributions in binary form must reproduce the above copyright
10  *       notice, this list of conditions and the following disclaimer in the
11  *       documentation and/or other materials provided with the distribution.
12  *     * Neither the name of the author nor the
13  *       names of its contributors may be used to endorse or promote products
14  *       derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR DISTRIBUTOR BE LIABLE FOR ANY
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27
28 #include <stdint.h>
29
30 #ifndef INCL_ZONEDETECT_H_
31 #define INCL_ZONEDETECT_H_
32
33 #if !defined(ZD_EXPORT)
34 #if defined(_MSC_VER)
35 #define ZD_EXPORT __declspec(dllimport)
36 #else
37 #define ZD_EXPORT
38 #endif
39 #endif
40
41 typedef enum {
42     ZD_LOOKUP_IGNORE = -3,
43     ZD_LOOKUP_END = -2,
44     ZD_LOOKUP_PARSE_ERROR = -1,
45     ZD_LOOKUP_NOT_IN_ZONE = 0,
46     ZD_LOOKUP_IN_ZONE = 1,
47     ZD_LOOKUP_IN_EXCLUDED_ZONE = 2,
48     ZD_LOOKUP_ON_BORDER_VERTEX = 3,
49     ZD_LOOKUP_ON_BORDER_SEGMENT = 4
50 } ZDLookupResult;
51
52 typedef struct {
53     ZDLookupResult lookupResult;
54
55     uint32_t polygonId;
56     uint32_t metaId;
57     uint8_t numFields;
58     char **fieldNames;
59     char **data;
60 } ZoneDetectResult;
61
62 struct ZoneDetectOpaque;
63 typedef struct ZoneDetectOpaque ZoneDetect;
64
65 #ifdef __cplusplus
66 extern "C" {
67 #endif
68
69 ZD_EXPORT ZoneDetect *ZDOpenDatabase(const char *path);
70 ZD_EXPORT ZoneDetect *ZDOpenDatabaseFromMemory(void* buffer, size_t length);
71 ZD_EXPORT void        ZDCloseDatabase(ZoneDetect *library);
72
73 ZD_EXPORT ZoneDetectResult *ZDLookup(const ZoneDetect *library, float lat, float lon, float *safezone);
74 ZD_EXPORT void              ZDFreeResults(ZoneDetectResult *results);
75
76 ZD_EXPORT const char *ZDGetNotice(const ZoneDetect *library);
77 ZD_EXPORT uint8_t     ZDGetTableType(const ZoneDetect *library);
78 ZD_EXPORT const char *ZDLookupResultToString(ZDLookupResult result);
79
80 ZD_EXPORT int         ZDSetErrorHandler(void (*handler)(int, int));
81 ZD_EXPORT const char *ZDGetErrorString(int errZD);
82
83 ZD_EXPORT float* ZDPolygonToList(const ZoneDetect *library, uint32_t polygonId, size_t* length);
84
85 ZD_EXPORT char* ZDHelperSimpleLookupString(const ZoneDetect* library, float lat, float lon);
86
87 #ifdef __cplusplus
88 }
89 #endif
90
91 #endif // INCL_ZONEDETECT_H_