theLink 10.0
Loading...
Searching...
No Matches
mk_misc_ObjAs_lng.h
Go to the documentation of this file.
1
10/* LABEL-NO */
11
12#ifdef HEADER
13
14#define OT_CHECK_BIN(val,len) OT_CHECK_BNP(val,len)
15#define OT_CHECK_BOL(val) OT_CHECK_NB1(val)
16#define OT_CHECK_I8(val) OT_CHECK_NI1(val)
17#define OT_CHECK_I16(val) OT_CHECK_NI2(val)
18#define OT_CHECK_I32(val) OT_CHECK_NI4(val)
19#define OT_CHECK_I64(val) OT_CHECK_NI8(val)
20#define OT_CHECK_FLT(val) OT_CHECK_NF4(val)
21#define OT_CHECK_DBL(val) OT_CHECK_NF8(val)
22//#define OT_CHECK_BUF(val) OT_CHECK_BUF(val)
23#define OT_CHECK_L(val) OT_CHECK_BFL(val)
24#define OT_CHECK_STR(val) OT_CHECK_STRN(val)
25#define OT_CHECK_HDL(val) MK_HDL_REF_S3(OT_CHECK_) (val)
26#define OT_CHECK_NIH(val) MK_HDL_REF_S3(OT_CHECK_) (val)
27
28// --------------------------------------------------------------------------
29
31
32#define WrongNumArgs(...) MK(WrongNumArgs)(MK_RT_CALL __VA_ARGS__)
33
34#define OT_ERROR_STACK MkErrorStack_4M(hdl,__func__,__FILE__,__LINE__)
35
37#define LngObj_AsF MK(LngObj_AsFLT)
39#define LngObj_AsD MK(LngObj_AsDBL)
41#define LngObj_AsO MK(LngObj_AsBOL)
44#define LngObj_AsY MK(LngObj_AsI8)
46#define LngObj_AsS MK(LngObj_AsI16)
47//MK_EXTERN enum MkErrorE MK_DECL MK(LngObj_AsU16) (OT_Prefix_ARGS MK_MNG,OT_OBJ_T,MK_U16*);
49#define LngObj_AsI MK(LngObj_AsI32)
50//MK_EXTERN enum MkErrorE MK_DECL MK(LngObj_AsU32) (OT_Prefix_ARGS MK_MNG,OT_OBJ_T,MK_U32*);
52#define LngObj_AsW MK(LngObj_AsI64)
53/*
54MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK(LngObj_AsLLG) (OT_Prefix_ARGS MK_MNG,OT_OBJ_T,MK_LLG*);
55#define LngObj_AsX MK(LngObj_AsLLG)
56*/
58//MK_EXTERN enum MkErrorE MK_DECL MK(LngObj_AsCSTNull) (OT_Prefix_ARGS MK_MNG,OT_OBJ_T,MK_STRN*);
60
61#ifndef SKIP_TYPE_S
68//MK_EXTERN enum MkErrorE MK_DECL MK(Obj_AsU16) (OT_Check_ARGS,MK_U16*);
70//MK_EXTERN enum MkErrorE MK_DECL MK(Obj_AsU32) (OT_Check_ARGS,MK_U32*);
72//MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK(Obj_AsLLG) (OT_Check_ARGS,MK_LLG*);
74//MK_EXTERN enum MkErrorE MK_DECL MK(Obj_AsCSTNull) (OT_Check_ARGS,MK_STRN*);
76#endif
77
78#else // !HEADER
79
80/*****************************************************************************/
81
82#ifndef SKIP_TYPE_S
83
86 MK_MNG hdl,
87 MK_SIZE skip,
88 MK_SIZE objc,
89 MK_SIZE min,
90 MK_SIZE max,
91 MK_STRN arg
92) {
93 MkBufferCreateTLS_T(MkBuffer1024C,buf,100);
94
95//printV("skip=%zi, objc=%zi, min=%zi, max=%zi, arg=%s\n", skip,objc,min,max,arg);
96
97 if (arg && *arg != '\0') {
98 MkBufferSetV(buf, "missing '%s'", arg);
99 } else if ((objc-skip) < min) {
100 MkBufferSetV(buf, "expect min '%li' argument(s)", min);
101 } else if ((objc-skip) > max) {
102 MkBufferSetV(buf, "expect max '%li' argument(s)", max);
103 } else if (skip > objc) {
104 MkBufferSetV(buf, "got '%li' additional argument(s)", skip-objc);
105 } else if (skip <= objc) {
106 MkBufferSetV(buf, "internal error → "
107 "skip=%li, objc=%li, min=%li, max=%li, arg=%s", skip, objc, min, max, arg);
108 }
109 return MkErrorVD("WrongNumerOfArgsError", "%s", buf->storage.first.C);
110}
111
112#endif
113
114/*****************************************************************************/
115
116/* example from TCL
117
118WHAT = BOOL,LONG,DOUBLE,WIDE
119TYP = BOL,I8,I16,I32,I64,FLT,DBL extra BOOL,LONG
120
121#define LNG_BOOL int
122#define LNG_LONG long
123#define LNG_DOUBLE double
124#define LNG_WIDE Tcl_WideInt
125
126#define FUNC_LONG(o) Tcl_GetLongFromObj(interp,o, &tmp)
127#define FUNC_DOUBLE(o) Tcl_GetDoubleFromObj(interp,o, &tmp)
128#define FUNC_BOOL(o) Tcl_GetBooleanFromObj(interp,o, &tmp)
129#define FUNC_WIDE(o) Tcl_GetWideIntFromObj(interp,o, &tmp)
130
131#define CHECK_LONG(o) (o->typePtr && o->typePtr==tcl_LONG)
132#define CHECK_DOUBLE(o) (o->typePtr && o->typePtr==tcl_DOUBLE)
133#define CHECK_BOOL(o) (o->typePtr && o->typePtr==tcl_BOOLEAN)
134#define CHECK_WIDE(o) (o->typePtr && o->typePtr==tcl_WIDE)
135#define CHECK_STRING(o) (o->bytes)
136
137#define OVERFLOW_I8 Overflow_Error(MkType_I8,MkMin_I8,MkMax_I8)
138#define OVERFLOW_I16 Overflow_Error(MkType_I16,MkMin_I16,MkMax_I16)
139#define OVERFLOW_I32 Overflow_Error(MkType_I32,MkMin_I32,MkMax_I32)
140#define OVERFLOW_I64
141#define OVERFLOW_FLT
142#define OVERFLOW_DBL
143#define OVERFLOW_BOL
144#define OVERFLOW_BOOL
145#define OVERFLOW_LONG
146
147#include "tmpl/misc_ObjAs_lng.h"
148
149*/
150
151#ifndef OT_LNG_STRING_INIT
152 #define OT_LNG_STRING_INIT(o)
153#endif
154
155#define Overflow_Error(type,min,max) Overflow_Error_Full(hdl,tmp,OT_LNG_STRING(obj),type,min,max)
156
157#define Type_Error(type) \
158 MkErrorVD("TypeError", \
159 "expect '%s' argument but got '%s' of type '%s'", \
160 type, OT_LNG_STRING(obj), OT_OBJ_TYPE_STRING(obj) \
161 ); \
162 goto error;
163
164#define ARG3(WHAT,TYP) \
165 if (CHECK_##WHAT(obj)) { \
166 LNG_##WHAT tmp; \
167 check_LNG(FUNC_##WHAT(obj)) return MK_ERROR; \
168 OVERFLOW_##TYP; \
169 *retP = (MK_##TYP) tmp; \
170 } else if (CHECK_STRING(obj)) { \
171 OT_LNG_STRING_INIT(obj); \
172 MkErrorCheck(MkString2##TYP##_RT(MK_RT_CALL OT_LNG_STRING_BYTES(obj),OT_LNG_STRING_LENGTH(obj),retP)); \
173 } else { \
174 Type_Error(MkType_##TYP); \
175 } \
176 return MK_OK; \
177error: \
178 return OT_ERROR_STACK;
179
181 ARG3(LONG,I8)
182}
183
185 ARG3(LONG,I16)
186}
187
188/*
189enum MkErrorE MK(LngObj_AsU16) (OT_Prefix_ARGS MK_MNG hdl, OT_OBJ_T obj, MK_U16 *retP) {
190 ARG3(LONG,U16)
191}
192#define LngObj_AsUS MK(LngObj_AsU16)
193*/
194
196 ARG3(LONG,I32)
197}
198
199/*
200enum MkErrorE MK(LngObj_AsU32) (OT_Prefix_ARGS MK_MNG hdl, OT_OBJ_T obj, MK_U32 *retP) {
201 ARG3(LONG,U32)
202}
203#define LngObj_AsUI MK(LngObj_AsU32)
204*/
206 ARG3(LONG,LONG)
207}
208
210 ARG3(WIDE,I64)
211}
212
213/*
214enum MkErrorE MK(LngObj_AsLLG) (OT_Prefix_ARGS MK_MNG hdl, OT_OBJ_T obj, MK_LLG *retP) {
215 ARG3(WIDE,LLG)
216}
217*/
218
220 ARG3(DOUBLE,FLT)
221}
222
224 ARG3(DOUBLE,DBL)
225}
226
228 ARG3(BOOL,BOL)
229}
230
232 ARG3(BOOL,BOOL)
233}
234
235/*****************************************************************************/
236
237#ifndef SKIP_TYPE_S
238
239#define ARG2(WHAT,TYP) \
240 if ((*skipP) >= objc) { \
241 return WrongNumArgs(hdl, (*skipP), objc, -999, +999, arg); \
242 } \
243 OT_OBJ_T obj = OT_LNG_OBJV((*skipP)++); \
244 return MK(LngObj_As##TYP)(OT_Prefix_CALL hdl,obj,retP); \
245
246enum MkErrorE MK(Obj_AsI8) (OT_Check_ARGS, MK_I8 *retP) {
247 ARG2(LONG,I8)
248}
250 ARG2(LONG,I16)
251}
252/*
253enum MkErrorE MK(Obj_AsU16) (OT_Check_ARGS, MK_U16 *retP) {
254 ARG2(LONG,U16)
255}
256*/
258 ARG2(LONG,I32)
259}
260/*
261enum MkErrorE MK(Obj_AsU32) (OT_Check_ARGS, MK_U32 *retP) {
262 ARG2(LONG,U32)
263}
264*/
266 ARG2(LONG,LONG)
267}
269 ARG2(WIDE,I64)
270}
271/*
272enum MkErrorE MK(Obj_AsLLG) (OT_Check_ARGS, MK_LLG *retP) {
273 ARG2(WIDE,LLG)
274}
275*/
277 ARG2(DOUBLE,FLT)
278}
280 ARG2(DOUBLE,DBL)
281}
283 ARG2(BOOL,BOL)
284}
286 ARG2(BOOL,BOOL)
287}
288
289#endif
290
291/*****************************************************************************/
292
293#endif // HEADER
#define MK(n)
#define OT_Check_ARGS
PyObject * OT_OBJ_T
#define OT_Prefix_ARGS
#define MkBufferSetV(...)
#define MkBufferCreateTLS_T(cls, name, size)
#define MK_DECL
#define MK_EXTERN
#define MK_ATTR_HOT
MkErrorE
float MK_FLT
const MK_STRB * MK_STRN
MK_PTRB * MK_MNG
signed char MK_I8
signed long long MK_I64
bool MK_BOOL
unsigned char MK_BOL
long MK_SIZE
long MK_LONG
signed short int MK_I16
double MK_DBL
signed int MK_I32
#define MK_RT_ARGS
MK_OBJ const obj
Definition high_lng.h:136
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsI32(OT_Check_ARGS, MK_I32 *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsI8(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, MK_I8 *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsBOL(OT_Check_ARGS, MK_BOL *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsFLT(OT_Check_ARGS, MK_FLT *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsFLT(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, MK_FLT *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsI64(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, MK_I64 *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsBOOL(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, bool *)
#define WrongNumArgs(...)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsLONG(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, long *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsI16(OT_Check_ARGS, MK_I16 *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsDBL(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, MK_DBL *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsSTRN(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, MK_STRN *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsI64(OT_Check_ARGS, MK_I64 *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsBOL(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, MK_BOL *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsDBL(OT_Check_ARGS, MK_DBL *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsBOOL(OT_Check_ARGS, bool *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsI16(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, MK_I16 *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsI8(OT_Check_ARGS, MK_I8 *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsLONG(OT_Check_ARGS, long *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsSTRN(OT_Check_ARGS, MK_STRN *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsI32(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, MK_I32 *)
#define MkErrorVD(errcls, format,...)