1 |
bramz |
2752 |
/* Copyright (c) 2007 by Intevation GmbH |
2 |
|
|
* Authors: |
3 |
|
|
* Bram de Greve <[email protected]> |
4 |
|
|
* |
5 |
|
|
* This program is free software under the GPL (>=v2) |
6 |
|
|
* Read the file COPYING coming with Thuban for details. |
7 |
|
|
*/ |
8 |
|
|
|
9 |
|
|
#ifndef PYSHAPELIB_H |
10 |
|
|
#define PYSHAPELIB_H |
11 |
|
|
|
12 |
|
|
#include <Python.h> |
13 |
|
|
#include <structmember.h> |
14 |
|
|
#include "shapefil.h" |
15 |
|
|
#include "pyshapelib_api.h" |
16 |
|
|
|
17 |
|
|
/* WIDE-CHARACTER FILENAME SUPPORT FOR WINDOWS |
18 |
|
|
* |
19 |
|
|
* pyshapelib can support full Unicode strings as filename on the Windows platform |
20 |
|
|
* trough the wide-character version of the Win API. At this moment, however, this |
21 |
|
|
* needs unofficial modifications to the shapelib library to be able to use this API. |
22 |
|
|
* |
23 |
|
|
* A ticket has been made in the maptools Bugzilla with patches for the 1.2.10 release |
24 |
|
|
* of shapelib: http://bugzilla.maptools.org/show_bug.cgi?id=1692 |
25 |
|
|
* |
26 |
|
|
* The version of shapelib that is contained in the thuban source tree already contains |
27 |
|
|
* these modifications. |
28 |
|
|
*/ |
29 |
bramz |
2751 |
#if defined(SHPAPI_HAS_WIDE) && defined(Py_WIN_WIDE_FILENAMES) |
30 |
|
|
/* Need GetVersion to see if on NT so safe to use _wfopen */ |
31 |
|
|
# define WIN32_LEAN_AND_MEAN |
32 |
|
|
# include <windows.h> |
33 |
|
|
#endif |
34 |
bramz |
2752 |
|
35 |
|
|
/* ---------------------------------------------------------------------------------------------- */ |
36 |
|
|
|
37 |
|
|
/* helper to export constants (macros) to Python. |
38 |
|
|
* The constant in Python will have the same name as in C |
39 |
|
|
*/ |
40 |
|
|
#define PYSHAPELIB_ADD_CONSTANT(constant) PyModule_AddIntConstant(module, #constant, constant) |
41 |
|
|
|
42 |
|
|
/* helper to define the type object. |
43 |
|
|
* |
44 |
|
|
* This assumes quite a few things about different things being available and their name. |
45 |
|
|
* For example, if prefix = foo, then there should be a deallocation function called foo_dealloc. |
46 |
|
|
* See the macro itself for other examples. |
47 |
|
|
*/ |
48 |
|
|
#define PYSHAPELIB_DEFINE_TYPE(object, prefix, name, doc) \ |
49 |
|
|
{ \ |
50 |
|
|
PyObject_HEAD_INIT(NULL) \ |
51 |
|
|
0, /*ob_size*/ \ |
52 |
|
|
name, /*tp_name*/ \ |
53 |
|
|
sizeof(object), /*tp_basicsize*/ \ |
54 |
|
|
0, /*tp_itemsize*/ \ |
55 |
|
|
(destructor) prefix ## _dealloc, /*tp_dealloc*/ \ |
56 |
|
|
0, /*tp_print*/ \ |
57 |
|
|
0, /*tp_getattr*/ \ |
58 |
|
|
0, /*tp_setattr*/ \ |
59 |
|
|
0, /*tp_compare*/ \ |
60 |
|
|
(reprfunc) prefix ## _repr, /*tp_repr*/ \ |
61 |
|
|
0, /*tp_as_number*/ \ |
62 |
|
|
0, /*tp_as_sequence*/ \ |
63 |
|
|
0, /*tp_as_mapping*/ \ |
64 |
|
|
0, /*tp_hash */ \ |
65 |
|
|
0, /*tp_call*/ \ |
66 |
|
|
0, /*tp_str*/ \ |
67 |
|
|
0, /*tp_getattro*/ \ |
68 |
|
|
0, /*tp_setattro*/ \ |
69 |
|
|
0, /*tp_as_buffer*/ \ |
70 |
|
|
Py_TPFLAGS_DEFAULT, /*tp_flags*/ \ |
71 |
|
|
doc, /* tp_doc */ \ |
72 |
|
|
0, /* tp_traverse */ \ |
73 |
|
|
0, /* tp_clear */ \ |
74 |
|
|
0, /* tp_richcompare */ \ |
75 |
|
|
0, /* tp_weaklistoffset */ \ |
76 |
|
|
0, /* tp_iter */ \ |
77 |
|
|
0, /* tp_iternext */ \ |
78 |
|
|
prefix ## _methods, /* tp_methods */ \ |
79 |
|
|
0, /* tp_members */ \ |
80 |
|
|
prefix ## _getsetters, /* tp_getset */ \ |
81 |
|
|
0, /* tp_base */ \ |
82 |
|
|
0, /* tp_dict */ \ |
83 |
|
|
0, /* tp_descr_get */ \ |
84 |
|
|
0, /* tp_descr_set */ \ |
85 |
|
|
0, /* tp_dictoffset */ \ |
86 |
|
|
(initproc) prefix ## _init, /* tp_init */ \ |
87 |
|
|
0, /* tp_alloc */ \ |
88 |
|
|
prefix ## _new, /* tp_new */ \ |
89 |
|
|
} \ |
90 |
|
|
/**/ |
91 |
|
|
|
92 |
|
|
/* helper to add type to module. |
93 |
|
|
* Does a bit of the tedious bookkeeping for us |
94 |
|
|
*/ |
95 |
|
|
#define PYSHAPELIB_ADD_TYPE(type, name) \ |
96 |
|
|
type.ob_type = &PyType_Type; \ |
97 |
|
|
if (PyType_Ready(&type) >= 0) \ |
98 |
|
|
{ \ |
99 |
|
|
Py_INCREF(&type); \ |
100 |
|
|
PyModule_AddObject(module, name, (PyObject*)&type); \ |
101 |
|
|
} |
102 |
|
|
|
103 |
|
|
#define PYSHAPELIB_NO_DATA_LIMIT 1e-38 |
104 |
|
|
#define PYSHAPELIB_NO_DATA 0 |
105 |
|
|
|
106 |
bramz |
2735 |
#endif |