Qore Programming Language 0.8.8

- Main Page
- Related Pages
- Modules
- Classes
- Files

- File List
- File Members

All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
common.h
Go to the documentation of this file.
1 /* -*- mode: c++; indent-tabs-mode: nil -*- */
2 /*
3 common.h
4
5 Qore Programming Language
6
7 Copyright 2003 - 2013 David Nichols
8
9 This library is free software; you can redistribute it and/or
10 modify it under the terms of the GNU Lesser General Public
11 License as published by the Free Software Foundation; either
12 version 2.1 of the License, or (at your option) any later version.
13
14 This library is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 Lesser General Public License for more details.
18
19 You should have received a copy of the GNU Lesser General Public
20 License along with this library; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 */
23
24 #ifndef _QORE_COMMON_H
25
26 #define _QORE_COMMON_H
27
32 #include <string.h>
33 #include <strings.h>
34 #include <stdarg.h>
35 #include <stddef.h>
36
37 #include <string>
38 #include <functional>
39 #include <list>
40 #include <set>
41 #include <vector>
42 #include <algorithm>
43 #include <set>
44
46 #define Q_AF_UNSPEC -1
47
49 #define Q_AF_INET -2
50
52 #define Q_AF_INET6 -3
53
55 #define Q_SOCK_STREAM -1
56
58 typedef signed short qore_type_t;
59
61 typedef size_t qore_size_t;
62
64 typedef long qore_offset_t;
65
67 typedef unsigned qore_classid_t;
68
70 typedef std::set<int> int_set_t;
71
73 enum qore_license_t {
74 QL_GPL = 0,
75 QL_LGPL = 1,
76 QL_MIT = 2
77 };
78
79 #if defined _MSC_VER || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
80 #ifdef BUILDING_DLL
81 #define DLLEXPORT __declspec(dllexport)
82 #else
83 #define DLLEXPORT __declspec(dllimport)
84 #endif
85 #define DLLLOCAL
86
87 #define QLLD "%I64d"
88 #define QLLX "%I64x"
89 #define QLLDx(a) "%" #a "I64d"
90 #define QORE_DIR_SEP '\\'
91 #define QORE_DIR_SEP_STR "\\"
92 #else
93 #ifdef HAVE_GCC_VISIBILITY
94 #define DLLEXPORT __attribute__ ((visibility("default")))
95 #define DLLLOCAL __attribute__ ((visibility("hidden")))
96 #else
97 #define DLLEXPORT
98 #define DLLLOCAL
99 #endif
100 #define QLLD "%lld"
101 #define QLLX "%llx"
102 #define QLLDx(a) "%" #a "lld"
103 #define QORE_DIR_SEP '/'
104 #define QORE_DIR_SEP_STR "/"
105 #endif
106
107 #define _Q_MAKE_STRING(x) #x
108 #define MAKE_STRING_FROM_SYMBOL(x) _Q_MAKE_STRING(x)
109
110 class AbstractQoreNode;
111 class QoreListNode;
112 class ExceptionSink;
113 class QoreObject;
114 class AbstractPrivateData;
115 class QoreMethod;
116 class QoreBuiltinMethod;
117 class QoreClass;
118 class QoreTypeInfo;
119
121 template <typename T> struct free_ptr : std::unary_function <T*, void> {
122 DLLLOCAL void operator()(T *ptr) {
123 free(ptr);
124 }
125 };
126
128 template <typename T> struct simple_delete {
129 DLLLOCAL void operator()(T *ptr) {
130 delete ptr;
131 }
132 };
133
135 template <typename T> struct simple_deref {
136 DLLLOCAL void operator()(T *ptr) {
137 ptr->deref();
138 }
139 DLLLOCAL void operator()(T *ptr, ExceptionSink *xsink) {
140 ptr->deref(xsink);
141 }
142 };
143
145 class ltstr {
146 public:
147 DLLLOCAL bool operator()(const char* s1, const char* s2) const {
148 return strcmp(s1, s2) < 0;
149 }
150 };
151
153 class ltcstrcase {
154 public:
155 DLLLOCAL bool operator()(const char* s1, const char* s2) const {
156 return strcasecmp(s1, s2) < 0;
157 }
158 };
159
161 class ltstrcase {
162 public:
163 DLLLOCAL bool operator()(std::string s1, std::string s2) const {
164 return strcasecmp(s1.c_str(), s2.c_str()) < 0;
165 }
166 };
167
168 class eqstr {
169 public:
170 DLLLOCAL bool operator()(const char* s1, const char* s2) const {
171 return !strcmp(s1, s2);
172 }
173 };
174
175 class eqstrcase {
176 public:
177 DLLLOCAL bool operator()(const char* s1, const char* s2) const {
178 return !strcasecmp(s1, s2);
179 }
180 };
181
183 class ltchar {
184 public:
185 DLLLOCAL bool operator()(const char s1, const char s2) const {
186 return s1 < s2;
187 }
188 };
189
191 class cstr_vector_t : public std::vector<char *> {
192 public:
193 DLLLOCAL ~cstr_vector_t() {
194 std::for_each(begin(), end(), free_ptr<char>());
195 }
196 };
197
199 typedef std::vector<const QoreTypeInfo *> type_vec_t;
200
202 typedef std::vector<AbstractQoreNode *> arg_vec_t;
203
205 typedef std::vector<std::string> name_vec_t;
206
207 typedef long long int64;
208
210
214 typedef AbstractQoreNode *(*q_func_t)(const QoreListNode *args, ExceptionSink *xsink);
215
217 typedef int64 (*q_func_int64_t)(const QoreListNode* args, ExceptionSink* xsink);
218
220 typedef bool (*q_func_bool_t)(const QoreListNode* args, ExceptionSink* xsink);
221
223 typedef double (*q_func_double_t)(const QoreListNode* args, ExceptionSink* xsink);
224
226
232 typedef AbstractQoreNode *(*q_method_t)(QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, ExceptionSink *xsink);
233
235
241 typedef int64 (*q_method_int64_t)(QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, ExceptionSink *xsink);
242
244
250 typedef int (*q_method_int_t)(QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, ExceptionSink *xsink);
251
253
259 typedef bool (*q_method_bool_t)(QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, ExceptionSink *xsink);
260
262
268 typedef double (*q_method_double_t)(QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, ExceptionSink *xsink);
269
271
278 typedef AbstractQoreNode *(*q_method2_t)(const QoreMethod &method, QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, ExceptionSink *xsink);
279
281
290 typedef AbstractQoreNode *(*q_method3_t)(const QoreMethod &method, const type_vec_t &typeList, const void *ptr, QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, ExceptionSink *xsink);
291
293
298 typedef AbstractQoreNode *(*q_static_method2_t)(const QoreMethod &method, const QoreListNode *args, ExceptionSink *xsink);
299
301
308 typedef AbstractQoreNode *(*q_static_method3_t)(const QoreMethod &method, const type_vec_t &typeList, const void *ptr, const QoreListNode *args, ExceptionSink *xsink);
309
311
315 typedef void (*q_constructor_t)(QoreObject *self, const QoreListNode *args, ExceptionSink *xsink);
316
318
323 typedef void (*q_constructor2_t)(const QoreClass &thisclass, QoreObject *self, const QoreListNode *args, ExceptionSink *xsink);
324
326
333 typedef void (*q_constructor3_t)(const QoreClass &thisclass, const type_vec_t &typeList, const void *ptr, QoreObject *self, const QoreListNode *args, ExceptionSink *xsink);
334
336
343 typedef void (*q_system_constructor_t)(QoreObject *self, int code, va_list args);
344
346
353 typedef void (*q_system_constructor2_t)(const QoreClass &thisclass, QoreObject *self, int code, va_list args);
354
356
361 typedef void (*q_destructor_t)(QoreObject *self, AbstractPrivateData *private_data, ExceptionSink *xsink);
362
364
370 typedef void (*q_destructor2_t)(const QoreClass &thisclass, QoreObject *self, AbstractPrivateData *private_data, ExceptionSink *xsink);
371
373
380 typedef void (*q_destructor3_t)(const QoreClass &thisclass, const void *ptr, QoreObject *self, AbstractPrivateData *private_data, ExceptionSink *xsink);
381
383
389 typedef void (*q_copy_t)(QoreObject *self, QoreObject *old, AbstractPrivateData *private_data, ExceptionSink *xsink);
390
392
399 typedef void (*q_copy2_t)(const QoreClass &thisclass, QoreObject *self, QoreObject *old, AbstractPrivateData *private_data, ExceptionSink *xsink);
400
402
410 typedef void (*q_copy3_t)(const QoreClass &thisclass, const void *ptr, QoreObject *self, QoreObject *old, AbstractPrivateData *private_data, ExceptionSink *xsink);
411
413
418 typedef bool (*q_delete_blocker_t)(QoreObject *self, AbstractPrivateData *private_data);
419
421
423 typedef unsigned q_trid_t;
424
425 DLLEXPORT long long q_atoll(const char *str);
426
427 #endif // _QORE_COMMON_H
q_copy3_t
void(* q_copy3_t)(const QoreClass &thisclass, const void *ptr, QoreObject *self, QoreObject *old, AbstractPrivateData *private_data, ExceptionSink *xsink)
the type used for builtin QoreClass copy signatures with the new generic calling convention ...
Definition: common.h:410
q_delete_blocker_t
bool(* q_delete_blocker_t)(QoreObject *self, AbstractPrivateData *private_data)
the typed used for QoreClass deleteBlocker signatures
Definition: common.h:418
AbstractPrivateData
the base class for all data to be used as private data of Qore objects
Definition: AbstractPrivateData.h:36
cstr_vector_t
non-thread-safe vector for storing &quot;char *&quot; that you want to delete
Definition: common.h:191
AbstractQoreNode
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:47
QL_LGPL
code to be used under the LGPL license
Definition: common.h:75
q_func_int64_t
int64(* q_func_int64_t)(const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin function signatures returning an integer value
Definition: common.h:217
qore_size_t
size_t qore_size_t
used for sizes (same range as a pointer)
Definition: common.h:61
ltchar
for char less-than comparisons
Definition: common.h:183
ltstr
for simple c-string less-than comparisons
Definition: common.h:145
qore_offset_t
long qore_offset_t
used for offsets that could be negative
Definition: common.h:64
arg_vec_t
std::vector< AbstractQoreNode * > arg_vec_t
vector of value information for default argument lists
Definition: common.h:202
ltcstrcase
for simple c-string case-insensitive less-than comparisons
Definition: common.h:153
q_system_constructor2_t
void(* q_system_constructor2_t)(const QoreClass &thisclass, QoreObject *self, int code, va_list args)
the type used for builtin QoreClass system constructor method signatures using the new generic callin...
Definition: common.h:353
q_method_int64_t
int64(* q_method_int64_t)(QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin QoreClass method signatures, returns int64
Definition: common.h:241
q_method_double_t
double(* q_method_double_t)(QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin QoreClass method signatures when called with the even newer generic calling...
Definition: common.h:268
qore_type_t
signed short qore_type_t
used to identify unique Qore data and parse types (descendents of AbstractQoreNode) ...
Definition: common.h:58
QL_MIT
code to be used under the MIT license
Definition: common.h:76
QoreListNode
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreListNode.h:44
q_copy_t
void(* q_copy_t)(QoreObject *self, QoreObject *old, AbstractPrivateData *private_data, ExceptionSink *xsink)
the type used for builtin QoreClass copy signatures
Definition: common.h:389
q_destructor_t
void(* q_destructor_t)(QoreObject *self, AbstractPrivateData *private_data, ExceptionSink *xsink)
the type used for builtin QoreClass destructor signatures
Definition: common.h:361
q_func_double_t
double(* q_func_double_t)(const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin function signatures returning an double value
Definition: common.h:223
QoreClass
defines a Qore-language class
Definition: QoreClass.h:199
q_destructor2_t
void(* q_destructor2_t)(const QoreClass &thisclass, QoreObject *self, AbstractPrivateData *private_data, ExceptionSink *xsink)
the type used for builtin QoreClass destructor signatures with the new generic calling convention ...
Definition: common.h:370
simple_delete
functor template for deleting elements
Definition: common.h:128
q_constructor_t
void(* q_constructor_t)(QoreObject *self, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin QoreClass constructor method signatures
Definition: common.h:315
q_system_constructor_t
void(* q_system_constructor_t)(QoreObject *self, int code, va_list args)
the type used for builtin QoreClass system constructor method signatures
Definition: common.h:343
q_trid_t
unsigned q_trid_t
type for thread resource IDs (unique within a single running qore library process) ...
Definition: common.h:423
qore_license_t
qore_license_t
qore library and module license type identifiers
Definition: common.h:73
QoreObject
the implementation of Qore&#39;s object data type, reference counted, dynamically-allocated only ...
Definition: QoreObject.h:56
qore_classid_t
unsigned qore_classid_t
used for the unique class ID for QoreClass objects
Definition: common.h:67
ltstrcase
for std::string case-insensitive less-than comparisons
Definition: common.h:161
ExceptionSink
container for holding Qore-language exception information and also for registering a &quot;thread_exit&quot; ca...
Definition: ExceptionSink.h:35
q_constructor2_t
void(* q_constructor2_t)(const QoreClass &thisclass, QoreObject *self, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin QoreClass constructor method signatures using the new generic calling conve...
Definition: common.h:323
name_vec_t
std::vector< std::string > name_vec_t
vector of parameter names for parameter lists
Definition: common.h:205
q_method_bool_t
bool(* q_method_bool_t)(QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin QoreClass method signatures when called with the even newer generic calling...
Definition: common.h:259
QL_GPL
code to be used under the GPL license
Definition: common.h:74
int_set_t
std::set< int > int_set_t
set of integers
Definition: common.h:70
q_constructor3_t
void(* q_constructor3_t)(const QoreClass &thisclass, const type_vec_t &typeList, const void *ptr, QoreObject *self, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin QoreClass constructor method signatures using the even newer generic callin...
Definition: common.h:333
q_method_int_t
int(* q_method_int_t)(QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin QoreClass method signatures when called with the even newer generic calling...
Definition: common.h:250
QoreMethod
a method in a QoreClass
Definition: QoreClass.h:83
type_vec_t
std::vector< const QoreTypeInfo * > type_vec_t
vector of type information for parameter lists
Definition: common.h:199
q_func_bool_t
bool(* q_func_bool_t)(const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin function signatures returning a boolean value
Definition: common.h:220
simple_deref
functor template for dereferencing elements
Definition: common.h:135
q_copy2_t
void(* q_copy2_t)(const QoreClass &thisclass, QoreObject *self, QoreObject *old, AbstractPrivateData *private_data, ExceptionSink *xsink)
the type used for builtin QoreClass copy signatures with the new generic calling convention ...
Definition: common.h:399
q_destructor3_t
void(* q_destructor3_t)(const QoreClass &thisclass, const void *ptr, QoreObject *self, AbstractPrivateData *private_data, ExceptionSink *xsink)
the type used for builtin QoreClass destructor signatures with the new generic calling convention and...
Definition: common.h:380
free_ptr
functor template for calling free() on pointers
Definition: common.h:121