Qore Programming Language - C/C++ Library  0.8.12.2
 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 (C) 2003 - 2016 David Nichols
8 
9  Permission is hereby granted, free of charge, to any person obtaining a
10  copy of this software and associated documentation files (the "Software"),
11  to deal in the Software without restriction, including without limitation
12  the rights to use, copy, modify, merge, publish, distribute, sublicense,
13  and/or sell copies of the Software, and to permit persons to whom the
14  Software is furnished to do so, subject to the following conditions:
15 
16  The above copyright notice and this permission notice shall be included in
17  all copies or substantial portions of the Software.
18 
19  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25  DEALINGS IN THE SOFTWARE.
26 
27  Note that the Qore library is released under a choice of three open-source
28  licenses: MIT (as above), LGPL 2+, or GPL 2+; see README-LICENSE for more
29  information.
30 */
31 
32 #ifndef _QORE_COMMON_H
33 
34 #define _QORE_COMMON_H
35 
40 #include <string.h>
41 #include <strings.h>
42 #include <stdarg.h>
43 #include <stddef.h>
44 #include <stdlib.h>
45 #include <inttypes.h>
46 
47 #include <string>
48 #include <functional>
49 #include <list>
50 #include <set>
51 #include <vector>
52 #include <algorithm>
53 #include <set>
54 
56 #define Q_AF_UNSPEC -1
57 
59 #define Q_AF_INET -2
60 
62 #define Q_AF_INET6 -3
63 
65 #define Q_SOCK_STREAM -1
66 
68 typedef int16_t qore_type_t;
69 
71 typedef size_t qore_size_t;
72 
74 typedef intptr_t qore_offset_t;
75 
77 typedef unsigned qore_classid_t;
78 
80 typedef std::set<int> int_set_t;
81 
84  QL_GPL = 0,
85  QL_LGPL = 1,
86  QL_MIT = 2
87 };
88 
89 #if defined _MSC_VER || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
90 #define _Q_WINDOWS 1
91 #ifdef _WIN64
92 #define _Q_WINDOWS 1
93 #define _Q_WINDOWS64 1
94 #endif
95 #endif
96 
97 #ifdef _Q_WINDOWS
98  #ifdef BUILDING_DLL
99  #define DLLEXPORT __declspec(dllexport)
100  #else
101  #define DLLEXPORT __declspec(dllimport)
102  #endif
103  #define DLLLOCAL
104 
105  #define QLLD "%I64d"
106  #define QLLX "%I64x"
107  #define QLLDx(a) "%" #a "I64d"
108  #define QORE_DIR_SEP '\\'
109  #define QORE_DIR_SEP_STR "\\"
110 #else
111  #ifdef HAVE_GCC_VISIBILITY
112  #define DLLEXPORT __attribute__ ((visibility("default")))
113  #define DLLLOCAL __attribute__ ((visibility("hidden")))
114  #else
115  #define DLLEXPORT
116  #define DLLLOCAL
117  #endif
118  #define QLLD "%lld"
119  #define QLLX "%llx"
120  #define QLLDx(a) "%" #a "lld"
121  #define QORE_DIR_SEP '/'
122  #define QORE_DIR_SEP_STR "/"
123 #endif
124 
125 #define _Q_MAKE_STRING(x) #x
126 #define MAKE_STRING_FROM_SYMBOL(x) _Q_MAKE_STRING(x)
127 
128 class AbstractQoreNode;
129 class QoreListNode;
130 class ExceptionSink;
131 class QoreObject;
132 class AbstractPrivateData;
133 class QoreMethod;
134 class QoreBuiltinMethod;
135 class QoreClass;
136 class QoreTypeInfo;
137 struct QoreValue;
138 class QoreValueList;
139 
141 template <typename T> struct free_ptr : std::unary_function <T*, void> {
142  DLLLOCAL void operator()(T* ptr) {
143  free(ptr);
144  }
145 };
146 
148 template <typename T> struct simple_delete {
149  DLLLOCAL void operator()(T* ptr) {
150  delete ptr;
151  }
152 };
153 
155 template <typename T> struct simple_deref {
156  DLLLOCAL void operator()(T* ptr) {
157  ptr->deref();
158  }
159  DLLLOCAL void operator()(T* ptr, ExceptionSink* xsink) {
160  ptr->deref(xsink);
161  }
162 };
163 
165 class ltstr {
166 public:
167  DLLLOCAL bool operator()(const char* s1, const char* s2) const {
168  return strcmp(s1, s2) < 0;
169  }
170 };
171 
173 class ltcstrcase {
174 public:
175  DLLLOCAL bool operator()(const char* s1, const char* s2) const {
176  return strcasecmp(s1, s2) < 0;
177  }
178 };
179 
181 class ltstrcase {
182 public:
183  DLLLOCAL bool operator()(std::string s1, std::string s2) const {
184  return strcasecmp(s1.c_str(), s2.c_str()) < 0;
185  }
186 };
187 
188 class eqstr {
189 public:
190  DLLLOCAL bool operator()(const char* s1, const char* s2) const {
191  return !strcmp(s1, s2);
192  }
193 };
194 
195 class eqstrcase {
196 public:
197  DLLLOCAL bool operator()(const char* s1, const char* s2) const {
198  return !strcasecmp(s1, s2);
199  }
200 };
201 
203 class ltchar {
204 public:
205  DLLLOCAL bool operator()(const char s1, const char s2) const {
206  return s1 < s2;
207  }
208 };
209 
211 class cstr_vector_t : public std::vector<char*> {
212 public:
213  DLLLOCAL ~cstr_vector_t() {
214  std::for_each(begin(), end(), free_ptr<char>());
215  }
216 };
217 
219 typedef std::vector<const QoreTypeInfo*> type_vec_t;
220 
222 typedef std::vector<AbstractQoreNode*> arg_vec_t;
223 
225 typedef std::vector<std::string> name_vec_t;
226 
228 typedef long long int64;
229 
231 typedef uint64_t q_rt_flags_t;
232 
234 
239 typedef QoreValue (*q_func_n_t)(const QoreValueList* args, q_rt_flags_t flags, ExceptionSink* xsink);
240 
242 
247 typedef AbstractQoreNode* (*q_func_t)(const QoreListNode* args, ExceptionSink* xsink);
248 
250 typedef int64 (*q_func_int64_t)(const QoreListNode* args, ExceptionSink* xsink);
251 
253 typedef bool (*q_func_bool_t)(const QoreListNode* args, ExceptionSink* xsink);
254 
256 typedef double (*q_func_double_t)(const QoreListNode* args, ExceptionSink* xsink);
257 
259 
266 typedef QoreValue (*q_method_n_t)(QoreObject* self, AbstractPrivateData* private_data, const QoreValueList* args, q_rt_flags_t flags, ExceptionSink* xsink);
267 
269 
276 typedef AbstractQoreNode* (*q_method_t)(QoreObject* self, AbstractPrivateData* private_data, const QoreListNode* args, ExceptionSink* xsink);
277 
279 
286 typedef int64 (*q_method_int64_t)(QoreObject* self, AbstractPrivateData* private_data, const QoreListNode* args, ExceptionSink* xsink);
287 
289 
296 typedef int (*q_method_int_t)(QoreObject* self, AbstractPrivateData* private_data, const QoreListNode* args, ExceptionSink* xsink);
297 
299 
306 typedef bool (*q_method_bool_t)(QoreObject* self, AbstractPrivateData* private_data, const QoreListNode* args, ExceptionSink* xsink);
307 
309 
316 typedef double (*q_method_double_t)(QoreObject* self, AbstractPrivateData* private_data, const QoreListNode* args, ExceptionSink* xsink);
317 
319 
327 typedef AbstractQoreNode* (*q_method2_t)(const QoreMethod& method, QoreObject* self, AbstractPrivateData* private_data, const QoreListNode* args, ExceptionSink* xsink);
328 
330 
340 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);
341 
343 
349 typedef AbstractQoreNode* (*q_static_method2_t)(const QoreMethod& method, const QoreListNode* args, ExceptionSink* xsink);
350 
352 
360 typedef AbstractQoreNode* (*q_static_method3_t)(const QoreMethod& method, const type_vec_t& typeList, const void* ptr, const QoreListNode* args, ExceptionSink* xsink);
361 
363 
367 typedef void (*q_constructor_n_t)(QoreObject* self, const QoreValueList* args, q_rt_flags_t rtflags, ExceptionSink* xsink);
368 
370 
374 typedef void (*q_constructor_t)(QoreObject* self, const QoreListNode* args, ExceptionSink* xsink);
375 
377 
382 typedef void (*q_constructor2_t)(const QoreClass& thisclass, QoreObject* self, const QoreListNode* args, ExceptionSink* xsink);
383 
385 
392 typedef void (*q_constructor3_t)(const QoreClass& thisclass, const type_vec_t& typeList, const void* ptr, QoreObject* self, const QoreListNode* args, ExceptionSink* xsink);
393 
395 
402 typedef void (*q_system_constructor_t)(QoreObject* self, int code, va_list args);
403 
405 
412 typedef void (*q_system_constructor2_t)(const QoreClass& thisclass, QoreObject* self, int code, va_list args);
413 
415 
420 typedef void (*q_destructor_t)(QoreObject* self, AbstractPrivateData* private_data, ExceptionSink* xsink);
421 
423 
429 typedef void (*q_destructor2_t)(const QoreClass& thisclass, QoreObject* self, AbstractPrivateData* private_data, ExceptionSink* xsink);
430 
432 
439 typedef void (*q_destructor3_t)(const QoreClass& thisclass, const void* ptr, QoreObject* self, AbstractPrivateData* private_data, ExceptionSink* xsink);
440 
442 
448 typedef void (*q_copy_t)(QoreObject* self, QoreObject* old, AbstractPrivateData* private_data, ExceptionSink* xsink);
449 
451 
458 typedef void (*q_copy2_t)(const QoreClass& thisclass, QoreObject* self, QoreObject* old, AbstractPrivateData* private_data, ExceptionSink* xsink);
459 
461 
469 typedef void (*q_copy3_t)(const QoreClass& thisclass, const void* ptr, QoreObject* self, QoreObject* old, AbstractPrivateData* private_data, ExceptionSink* xsink);
470 
472 
477 typedef bool (*q_delete_blocker_t)(QoreObject* self, AbstractPrivateData* private_data);
478 
480 
482 typedef unsigned q_trid_t;
483 
484 DLLEXPORT long long q_atoll(const char* str);
485 
486 #endif // _QORE_COMMON_H
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:469
bool(* q_delete_blocker_t)(QoreObject *self, AbstractPrivateData *private_data)
the typed used for QoreClass deleteBlocker signatures
Definition: common.h:477
the base class for all data to be used as private data of Qore objects
Definition: AbstractPrivateData.h:44
non-thread-safe vector for storing &quot;char*&quot; that you want to delete
Definition: common.h:211
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreValueList.h:45
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:55
code to be used under the LGPL license
Definition: common.h:85
int64(* q_func_int64_t)(const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin function signatures returning an integer value
Definition: common.h:250
size_t qore_size_t
used for sizes (same range as a pointer)
Definition: common.h:71
for char less-than comparisons
Definition: common.h:203
for simple c-string less-than comparisons
Definition: common.h:165
uint64_t q_rt_flags_t
runtime code execution flags
Definition: common.h:231
for simple c-string case-insensitive less-than comparisons
Definition: common.h:173
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:412
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:286
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:316
code to be used under the MIT license
Definition: common.h:86
std::vector< AbstractQoreNode * > arg_vec_t
vector of value information for default argument lists
Definition: common.h:222
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreListNode.h:52
void(* q_copy_t)(QoreObject *self, QoreObject *old, AbstractPrivateData *private_data, ExceptionSink *xsink)
the type used for builtin QoreClass copy signatures
Definition: common.h:448
void(* q_destructor_t)(QoreObject *self, AbstractPrivateData *private_data, ExceptionSink *xsink)
the type used for builtin QoreClass destructor signatures
Definition: common.h:420
double(* q_func_double_t)(const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin function signatures returning an double value
Definition: common.h:256
defines a Qore-language class
Definition: QoreClass.h:195
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:429
functor template for deleting elements
Definition: common.h:148
void(* q_constructor_t)(QoreObject *self, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin QoreClass constructor method signatures
Definition: common.h:374
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:402
unsigned q_trid_t
type for thread resource IDs (unique within a single running qore library process) ...
Definition: common.h:482
void(* q_constructor_n_t)(QoreObject *self, const QoreValueList *args, q_rt_flags_t rtflags, ExceptionSink *xsink)
the type used for builtin QoreClass constructor method signatures
Definition: common.h:367
qore_license_t
qore library and module license type identifiers
Definition: common.h:83
the implementation of Qore&#39;s object data type, reference counted, dynamically-allocated only ...
Definition: QoreObject.h:64
unsigned qore_classid_t
used for the unique class ID for QoreClass objects
Definition: common.h:77
for std::string case-insensitive less-than comparisons
Definition: common.h:181
container for holding Qore-language exception information and also for registering a &quot;thread_exit&quot; ca...
Definition: ExceptionSink.h:43
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:382
std::vector< std::string > name_vec_t
vector of parameter names for parameter lists
Definition: common.h:225
long long int64
64bit integer type, cannot use int64_t here since it breaks the API on some 64-bit systems due to equ...
Definition: common.h:228
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:306
intptr_t qore_offset_t
used for offsets that could be negative
Definition: common.h:74
code to be used under the GPL license
Definition: common.h:84
QoreValue(* q_method_n_t)(QoreObject *self, AbstractPrivateData *private_data, const QoreValueList *args, q_rt_flags_t flags, ExceptionSink *xsink)
the new type used for builtin QoreClass method signatures
Definition: common.h:266
int16_t qore_type_t
used to identify unique Qore data and parse types (descendents of AbstractQoreNode) ...
Definition: common.h:68
QoreValue(* q_func_n_t)(const QoreValueList *args, q_rt_flags_t flags, ExceptionSink *xsink)
the type used for builtin function signatures
Definition: common.h:239
std::set< int > int_set_t
set of integers
Definition: common.h:80
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:392
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:296
std::vector< const QoreTypeInfo * > type_vec_t
vector of type information for parameter lists
Definition: common.h:219
a method in a QoreClass
Definition: QoreClass.h:91
bool(* q_func_bool_t)(const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin function signatures returning a boolean value
Definition: common.h:253
functor template for dereferencing elements
Definition: common.h:155
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:458
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:439
functor template for calling free() on pointers
Definition: common.h:141