nodejs-db-informix  master
nodejs bindings for Informix
 All Classes Functions Pages
node_defs.h
1 #ifndef __NODE_DEFS_H_INCLUDED__
2 #define __NODE_DEFS_H_INCLUDED__
3 
4 /**
5  * Obvious definitions
6  */
7 
8 #include <node.h>
9 
10 #define NODE_CONSTANT(constant) v8::Integer::New(constant)
11 #define NODE_PERSISTENT_SYMBOL(s) v8::Persistent<v8::String>::New(v8::String::NewSymbol(s))
12 
13 #define NODE_ADD_PROTOTYPE_METHOD(templ, name, callback) \
14 do { \
15  v8::Local<v8::Signature> __callback##_SIG = v8::Signature::New(templ); \
16  v8::Local<v8::FunctionTemplate> __callback##_TEM = \
17  v8::FunctionTemplate::New(callback, v8::Handle<v8::Value>(), \
18  __callback##_SIG); \
19  templ->PrototypeTemplate()->Set(v8::String::NewSymbol(name), \
20  __callback##_TEM); \
21 } while (0)
22 
23 #define NODE_ADD_CONSTANT(target, name, constant) \
24  (target)->Set(v8::String::NewSymbol(#name), \
25  v8::Integer::New(constant), \
26  static_cast<v8::PropertyAttribute>(v8::ReadOnly|v8::DontDelete))
27 
28 #define THROW_EXCEPTION(message) \
29  return v8::ThrowException(v8::Exception::Error(v8::String::New(message)));
30 
31 #define ARG_CHECK_OPTIONAL_STRING(I, VAR) \
32  if (args.Length() > I && !args[I]->IsString()) { \
33  THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid string") \
34  }
35 
36 #define ARG_CHECK_STRING(I, VAR) \
37  if (args.Length() <= I) { \
38  THROW_EXCEPTION("Argument \"" #VAR "\" is mandatory") \
39  } else if (!args[I]->IsString()) { \
40  THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid string") \
41  }
42 
43 #define ARG_CHECK_OPTIONAL_BOOL(I, VAR) \
44  if (args.Length() > I && !args[I]->IsBoolean()) { \
45  THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid boolean") \
46  }
47 
48 #define ARG_CHECK_BOOL(I, VAR) \
49  if (args.Length() <= I) { \
50  THROW_EXCEPTION("Argument \"" #VAR "\" is mandatory") \
51  } else if (!args[I]->IsBoolean()) { \
52  THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid boolean") \
53  }
54 
55 #define ARG_CHECK_OPTIONAL_UINT32(I, VAR) \
56  if (args.Length() > I && !args[I]->IsUint32()) { \
57  THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid UINT32") \
58  }
59 
60 #define ARG_CHECK_UINT32(I, VAR) \
61  if (args.Length() <= I) { \
62  THROW_EXCEPTION("Argument \"" #VAR "\" is mandatory") \
63  } else if (!args[I]->IsUint32()) { \
64  THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid UINT32") \
65  }
66 
67 #define ARG_CHECK_OPTIONAL_OBJECT(I, VAR) \
68  if (args.Length() > I && (!args[I]->IsObject() || args[I]->IsFunction() || args[I]->IsUndefined())) { \
69  THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid object") \
70  }
71 
72 #define ARG_CHECK_OBJECT(I, VAR) \
73  if (args.Length() <= I) { \
74  THROW_EXCEPTION("Argument \"" #VAR "\" is mandatory") \
75  } else if (!args[I]->IsObject() || args[I]->IsFunction() || args[I]->IsArray() || args[I]->IsDate() || args[I]->IsUndefined()) { \
76  THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid object") \
77  }
78 
79 #define ARG_CHECK_OPTIONAL_FUNCTION(I, VAR) \
80  if (args.Length() > I && !args[I]->IsFunction()) { \
81  THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid function") \
82  }
83 
84 #define ARG_CHECK_FUNCTION(I, VAR) \
85  if (args.Length() <= I) { \
86  THROW_EXCEPTION("Argument \"" #VAR "\" is mandatory") \
87  } else if (!args[I]->IsFunction()) { \
88  THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid function") \
89  }
90 
91 #define ARG_CHECK_OPTIONAL_ARRAY(I, VAR) \
92  if (args.Length() > I && !args[I]->IsArray()) { \
93  THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid array") \
94  }
95 
96 #define ARG_CHECK_ARRAY(I, VAR) \
97  if (args.Length() <= I) { \
98  THROW_EXCEPTION("Argument \"" #VAR "\" is mandatory") \
99  } else if (!args[I]->IsArray()) { \
100  THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid array") \
101  }
102 
103 #define ARG_CHECK_OBJECT_ATTR_STRING(VAR, KEY) \
104  v8::Local<v8::String> KEY##_##key = v8::String::New("" #KEY ""); \
105  if (!VAR->Has(KEY##_##key)) { \
106  THROW_EXCEPTION("Option \"" #KEY "\" is mandatory") \
107  } else if (!VAR->Get(KEY##_##key)->IsString()) { \
108  THROW_EXCEPTION("Option \"" #KEY "\" must be a valid string") \
109  }
110 
111 #define ARG_CHECK_OBJECT_ATTR_OPTIONAL_STRING(VAR, KEY) \
112  v8::Local<v8::String> KEY##_##key = v8::String::New("" #KEY ""); \
113  if (VAR->Has(KEY##_##key) && !VAR->Get(KEY##_##key)->IsString()) { \
114  THROW_EXCEPTION("Option \"" #KEY "\" must be a valid string") \
115  }
116 
117 #define ARG_CHECK_OBJECT_ATTR_UINT32(VAR, KEY) \
118  v8::Local<v8::String> KEY##_##key = v8::String::New("" #KEY ""); \
119  if (!VAR->Has(KEY##_##key)) { \
120  THROW_EXCEPTION("Option \"" #KEY "\" is mandatory") \
121  } else if (!VAR->Get(KEY##_##key)->IsUint32()) { \
122  THROW_EXCEPTION("Option \"" #KEY "\" must be a valid UINT32") \
123  }
124 
125 #define ARG_CHECK_OBJECT_ATTR_OPTIONAL_UINT32(VAR, KEY) \
126  v8::Local<v8::String> KEY##_##key = v8::String::New("" #KEY ""); \
127  if (VAR->Has(KEY##_##key) && !VAR->Get(KEY##_##key)->IsUint32()) { \
128  THROW_EXCEPTION("Option \"" #KEY "\" must be a valid UINT32") \
129  }
130 
131 #define ARG_CHECK_OBJECT_ATTR_BOOL(VAR, KEY) \
132  v8::Local<v8::String> KEY##_##key = v8::String::New("" #KEY ""); \
133  if (!VAR->Has(KEY##_##key)) { \
134  THROW_EXCEPTION("Option \"" #KEY "\" is mandatory") \
135  } else if (!VAR->Get(KEY##_##key)->IsBoolean()) { \
136  THROW_EXCEPTION("Option \"" #KEY "\" must be a valid boolean") \
137  }
138 
139 #define ARG_CHECK_OBJECT_ATTR_OPTIONAL_BOOL(VAR, KEY) \
140  v8::Local<v8::String> KEY##_##key = v8::String::New("" #KEY ""); \
141  if (VAR->Has(KEY##_##key) && !VAR->Get(KEY##_##key)->IsBoolean()) { \
142  THROW_EXCEPTION("Option \"" #KEY "\" must be a valid boolean") \
143  }
144 
145 #define ARG_CHECK_OBJECT_ATTR_FUNCTION(VAR, KEY) \
146  v8::Local<v8::String> KEY##_##key = v8::String::New("" #KEY ""); \
147  if (!VAR->Has(KEY##_##key)) { \
148  THROW_EXCEPTION("Option \"" #KEY "\" is mandatory") \
149  } else if (!VAR->Get(KEY##_##key)->IsFunction()) { \
150  THROW_EXCEPTION("Option \"" #KEY "\" must be a valid function") \
151  }
152 
153 #define ARG_CHECK_OBJECT_ATTR_OPTIONAL_FUNCTION(VAR, KEY) \
154  v8::Local<v8::String> KEY##_##key = v8::String::New("" #KEY ""); \
155  if (VAR->Has(KEY##_##key) && !VAR->Get(KEY##_##key)->IsFunction()) { \
156  THROW_EXCEPTION("Option \"" #KEY "\" must be a valid function") \
157  }
158 
159 #ifdef DEBUG
160 #define DEBUG_LOG_FUNC \
161  std::cout \
162  << "Function : " << __func__ \
163  << ", File : " << __FILE__ \
164  << ", Line : " << __LINE__ \
165  << std::endl
166 #else
167 #define DEBUG_LOG_FUNC
168 #endif
169 
170 #endif // __NODE_DEFS_H_INCLUDED__