Qore Programming Language  0.8.8
 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 
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
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
bool(* q_delete_blocker_t)(QoreObject *self, AbstractPrivateData *private_data)
the typed used for QoreClass deleteBlocker signatures
Definition: common.h:418
the base class for all data to be used as private data of Qore objects
Definition: AbstractPrivateData.h:36
non-thread-safe vector for storing &quot;char *&quot; that you want to delete
Definition: common.h:191
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:47
code to be used under the LGPL license
Definition: common.h:75
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
size_t qore_size_t
used for sizes (same range as a pointer)
Definition: common.h:61
for char less-than comparisons
Definition: common.h:183
for simple c-string less-than comparisons
Definition: common.h:145
long qore_offset_t
used for offsets that could be negative
Definition: common.h:64
std::vector< AbstractQoreNode * > arg_vec_t
vector of value information for default argument lists
Definition: common.h:202
for simple c-string case-insensitive less-than comparisons
Definition: common.h:153
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
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
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
signed short qore_type_t
used to identify unique Qore data and parse types (descendents of AbstractQoreNode) ...
Definition: common.h:58
code to be used under the MIT license
Definition: common.h:76
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreListNode.h:44
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
void(* q_destructor_t)(QoreObject *self, AbstractPrivateData *private_data, ExceptionSink *xsink)
the type used for builtin QoreClass destructor signatures
Definition: common.h:361
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
defines a Qore-language class
Definition: QoreClass.h:199
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
functor template for deleting elements
Definition: common.h:128
void(* q_constructor_t)(QoreObject *self, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin QoreClass constructor method signatures
Definition: common.h:315
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
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 library and module license type identifiers
Definition: common.h:73
the implementation of Qore&#39;s object data type, reference counted, dynamically-allocated only ...
Definition: QoreObject.h:56
unsigned qore_classid_t
used for the unique class ID for QoreClass objects
Definition: common.h:67
for std::string case-insensitive less-than comparisons
Definition: common.h:161
container for holding Qore-language exception information and also for registering a &quot;thread_exit&quot; ca...
Definition: ExceptionSink.h:35
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
std::vector< std::string > name_vec_t
vector of parameter names for parameter lists
Definition: common.h:205
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
code to be used under the GPL license
Definition: common.h:74
std::set< int > int_set_t
set of integers
Definition: common.h:70
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
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
a method in a QoreClass
Definition: QoreClass.h:83
std::vector< const QoreTypeInfo * > type_vec_t
vector of type information for parameter lists
Definition: common.h:199
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
functor template for dereferencing elements
Definition: common.h:135
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
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
functor template for calling free() on pointers
Definition: common.h:121