-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpy_studxml.h
More file actions
104 lines (89 loc) · 3.05 KB
/
py_studxml.h
File metadata and controls
104 lines (89 loc) · 3.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*
* Copyright (c) 2017, Dan Eicher
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* (1) Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* (2) Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef PYTHON_STUDXML_H
#define PYTHON_STUDXML_H
#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include <stddef.h>
#include <string>
#include <iostream>
#include "libstudxml/parser.hxx"
#include "libstudxml/serializer.hxx"
#include "py_streambuf.h"
#ifndef PyVarObject_HEAD_INIT
#define PyVarObject_HEAD_INIT(type, size) \
PyObject_HEAD_INIT(type) size,
#endif
#if PY_MAJOR_VERSION >= 3
#if PY_VERSION_HEX >= 0x03050000
typedef PyAsyncMethods* cmpfunc;
#else
typedef void* cmpfunc;
#endif /* PY_VERSION_HEX >= 0x03050000 */
#define PyString_Check(a) PyUnicode_Check(a)
#define PyString_AsString(a) PyUnicode_AsUTF8(a)
#define PyString_FromString(a) PyUnicode_FromString(a)
#endif /* PY_MAJOR_VERSION >= 3 */
#if __GNUC__ > 2
# define UNUSED(param) param __attribute__((__unused__))
#elif __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
# define UNUSED(param) __attribute__((__unused__)) param
#else
# define UNUSED(param) param
#endif /* !__GNUC__ */
namespace xml
{
class parser;
class serializer;
class qname;
}
typedef struct {
PyObject_HEAD
xml::parser *obj;
std::istream *ifs;
Py_buffer buffer;
} PyXmlParser;
typedef struct {
PyObject_HEAD
xml::serializer *obj;
std::ostream *ofs;
} PyXmlSerializer;
typedef struct {
PyObject_HEAD
xml::qname *obj;
} PyXmlQname;
typedef struct {
PyObject_HEAD
PyXmlParser *container;
} PyXmlParserIter;
extern PyTypeObject PyXmlParser_Type;
extern PyTypeObject PyXmlParserMeta_Type;
extern PyTypeObject PyXmlSerializer_Type;
extern PyTypeObject PyXmlQname_Type;
extern PyTypeObject PyXmlParserIter_Type;
extern PyTypeObject *PyXmlParsingError_Type;
extern PyTypeObject *PyXmlSerializationError_Type;
#endif /* PYTHON_STUDXML_H */