3636static inline int val__str_to_str (ti_val_t * * UNUSED (v ), ex_t * UNUSED (e ));
3737static inline int val__no_to_str (ti_val_t * * val , ex_t * e );
3838
39+ static inline _Bool val__as_bool_false (ti_val_t * UNUSED (val ))
40+ {
41+ return false;
42+ }
43+ static inline _Bool val__as_bool_true (ti_val_t * UNUSED (val ))
44+ {
45+ return true;
46+ }
47+ static inline _Bool val__as_bool_int (ti_val_t * val )
48+ {
49+ return !!VINT (val );;
50+ }
51+ static inline _Bool val__as_bool_float (ti_val_t * val )
52+ {
53+ return !!VFLOAT (val );
54+ }
55+ static inline _Bool val__as_bool_bool (ti_val_t * val )
56+ {
57+ return VBOOL (val );
58+ }
59+ static inline _Bool val__as_bool_raw (ti_val_t * val )
60+ {
61+ return !!((ti_raw_t * ) val )-> n ;
62+ }
63+ static inline _Bool val__as_bool_arr (ti_val_t * val )
64+ {
65+ return !!VARR (val )-> n ;
66+ }
67+ static inline _Bool val__as_bool_set (ti_val_t * val )
68+ {
69+ return !!VSET (val )-> n ;
70+ }
71+ static inline _Bool val__as_bool_thing (ti_val_t * val )
72+ {
73+ return !!ti_thing_n ((ti_thing_t * ) val );
74+ }
75+ static inline _Bool val__as_bool_wrap (ti_val_t * val )
76+ {
77+ return !!ti_thing_n (((ti_wrap_t * ) val )-> thing );
78+ }
79+ static inline _Bool val__as_bool_room (ti_val_t * val )
80+ {
81+ return !!((ti_room_t * ) val )-> id ;
82+ }
83+ static inline _Bool val__as_bool_task (ti_val_t * val )
84+ {
85+ return !!((ti_vtask_t * ) val )-> run_at ;
86+ }
87+ static inline _Bool val__as_bool_member (ti_val_t * val ); /* defined later */
88+
89+
3990static inline const char * val__nil_type_str (ti_val_t * UNUSED (val ))
4091{
4192 return TI_VAL_NIL_S ;
@@ -247,6 +298,7 @@ typedef int (*ti_val_to_arr_cb) (ti_val_t ** v, ti_varr_t * varr, ex_t * e);
247298typedef int (* ti_val_to_client_pk_cb ) (ti_val_t * , ti_vp_t * , int , int );
248299typedef int (* ti_val_to_store_pk_cb ) (ti_val_t * , msgpack_packer * pk );
249300typedef const char * (* ti_val_type_str_cb ) (ti_val_t * );
301+ typedef _Bool (* ti_val_as_bool_cb ) (ti_val_t * );
250302
251303typedef struct
252304{
@@ -256,6 +308,7 @@ typedef struct
256308 ti_val_to_client_pk_cb to_client_pk ;
257309 ti_val_to_store_pk_cb to_store_pk ;
258310 ti_val_type_str_cb get_type_str ;
311+ ti_val_as_bool_cb as_bool ;
259312 _Bool allowed_as_vtask_arg ; /* allowed in the @thingsdb scope */
260313} ti_val_type_t ;
261314
@@ -269,6 +322,7 @@ static ti_val_type_t ti_val_type_props[22] = {
269322 .to_client_pk = val__nil_to_client_pk ,
270323 .to_store_pk = val__nil_to_store_pk ,
271324 .get_type_str = val__nil_type_str ,
325+ .as_bool = val__as_bool_false ,
272326 .allowed_as_vtask_arg = true,
273327 },
274328 /* TI_VAL_INT */
@@ -279,6 +333,7 @@ static ti_val_type_t ti_val_type_props[22] = {
279333 .to_client_pk = val__int_to_client_pk ,
280334 .to_store_pk = val__int_to_store_pk ,
281335 .get_type_str = val__int_type_str ,
336+ .as_bool = val__as_bool_int ,
282337 .allowed_as_vtask_arg = true,
283338 },
284339 /* TI_VAL_FLOAT */
@@ -289,6 +344,7 @@ static ti_val_type_t ti_val_type_props[22] = {
289344 .to_client_pk = val__float_to_client_pk ,
290345 .to_store_pk = val__float_to_store_pk ,
291346 .get_type_str = val__float_type_str ,
347+ .as_bool = val__as_bool_float ,
292348 .allowed_as_vtask_arg = true,
293349 },
294350 /* TI_VAL_BOOL */
@@ -299,6 +355,7 @@ static ti_val_type_t ti_val_type_props[22] = {
299355 .to_client_pk = val__bool_to_client_pk ,
300356 .to_store_pk = (ti_val_to_store_pk_cb ) ti_vbool_to_pk ,
301357 .get_type_str = val__bool_type_str ,
358+ .as_bool = val__as_bool_bool ,
302359 .allowed_as_vtask_arg = true,
303360 },
304361 /* TI_VAL_DATETIME */
@@ -309,6 +366,7 @@ static ti_val_type_t ti_val_type_props[22] = {
309366 .to_client_pk = val__datetime_to_client_pk ,
310367 .to_store_pk = (ti_val_to_store_pk_cb ) ti_datetime_to_store_pk ,
311368 .get_type_str = val__datetime_type_str ,
369+ .as_bool = val__as_bool_true ,
312370 .allowed_as_vtask_arg = true,
313371 },
314372 /* TI_VAL_NAME */
@@ -319,6 +377,7 @@ static ti_val_type_t ti_val_type_props[22] = {
319377 .to_client_pk = val__str_to_client_pk ,
320378 .to_store_pk = (ti_val_to_store_pk_cb ) ti_name_to_pk ,
321379 .get_type_str = val__str_type_str ,
380+ .as_bool = val__as_bool_raw ,
322381 .allowed_as_vtask_arg = true,
323382 },
324383 /* TI_VAL_STR */
@@ -329,6 +388,7 @@ static ti_val_type_t ti_val_type_props[22] = {
329388 .to_client_pk = val__str_to_client_pk ,
330389 .to_store_pk = (ti_val_to_store_pk_cb ) ti_raw_str_to_pk ,
331390 .get_type_str = val__str_type_str ,
391+ .as_bool = val__as_bool_raw ,
332392 .allowed_as_vtask_arg = true,
333393 },
334394 /* TI_VAL_BYTES */
@@ -339,6 +399,7 @@ static ti_val_type_t ti_val_type_props[22] = {
339399 .to_client_pk = val__bytes_to_client_pk ,
340400 .to_store_pk = (ti_val_to_store_pk_cb ) ti_raw_bytes_to_pk ,
341401 .get_type_str = val__bytes_type_str ,
402+ .as_bool = val__as_bool_raw ,
342403 .allowed_as_vtask_arg = true,
343404 },
344405 /* TI_VAL_REGEX */
@@ -349,6 +410,7 @@ static ti_val_type_t ti_val_type_props[22] = {
349410 .to_client_pk = val__regex_to_client_pk ,
350411 .to_store_pk = (ti_val_to_store_pk_cb ) ti_regex_to_store_pk ,
351412 .get_type_str = val__regex_type_str ,
413+ .as_bool = val__as_bool_true ,
352414 .allowed_as_vtask_arg = true,
353415 },
354416 /* TI_VAL_THING */
@@ -359,6 +421,7 @@ static ti_val_type_t ti_val_type_props[22] = {
359421 .to_client_pk = (ti_val_to_client_pk_cb ) ti_thing_to_client_pk ,
360422 .to_store_pk = (ti_val_to_store_pk_cb ) ti_thing_to_store_pk ,
361423 .get_type_str = val__thing_type_str ,
424+ .as_bool = val__as_bool_thing ,
362425 .allowed_as_vtask_arg = false,
363426 },
364427 /* TI_VAL_WRAP */
@@ -369,6 +432,7 @@ static ti_val_type_t ti_val_type_props[22] = {
369432 .to_client_pk = (ti_val_to_client_pk_cb ) ti_wrap_to_client_pk ,
370433 .to_store_pk = (ti_val_to_store_pk_cb ) ti_wrap_to_store_pk ,
371434 .get_type_str = val__wrap_type_str ,
435+ .as_bool = val__as_bool_wrap ,
372436 .allowed_as_vtask_arg = false,
373437 },
374438 /* TI_VAL_ROOM */
@@ -379,6 +443,7 @@ static ti_val_type_t ti_val_type_props[22] = {
379443 .to_client_pk = val__room_to_client_pk ,
380444 .to_store_pk = (ti_val_to_store_pk_cb ) ti_room_to_store_pk ,
381445 .get_type_str = val__room_type_str ,
446+ .as_bool = val__as_bool_room ,
382447 .allowed_as_vtask_arg = false,
383448 },
384449 /* TI_VAL_TASK */
@@ -389,6 +454,7 @@ static ti_val_type_t ti_val_type_props[22] = {
389454 .to_client_pk = val__task_to_client_pk ,
390455 .to_store_pk = (ti_val_to_store_pk_cb ) ti_vtask_to_store_pk ,
391456 .get_type_str = val__task_type_str ,
457+ .as_bool = val__as_bool_task ,
392458 .allowed_as_vtask_arg = false,
393459 },
394460 /* TI_VAL_ARR */
@@ -399,6 +465,7 @@ static ti_val_type_t ti_val_type_props[22] = {
399465 .to_client_pk = (ti_val_to_client_pk_cb ) val__varr_to_client_pk ,
400466 .to_store_pk = (ti_val_to_store_pk_cb ) val__varr_to_store_pk ,
401467 .get_type_str = val__arr_type_str ,
468+ .as_bool = val__as_bool_arr ,
402469 .allowed_as_vtask_arg = false,
403470 },
404471 /* TI_VAL_SET */
@@ -409,6 +476,7 @@ static ti_val_type_t ti_val_type_props[22] = {
409476 .to_client_pk = (ti_val_to_client_pk_cb ) ti_vset_to_client_pk ,
410477 .to_store_pk = (ti_val_to_store_pk_cb ) ti_vset_to_store_pk ,
411478 .get_type_str = val__set_type_str ,
479+ .as_bool = val__as_bool_set ,
412480 .allowed_as_vtask_arg = false,
413481 },
414482 /* TI_VAL_ERROR */
@@ -419,6 +487,7 @@ static ti_val_type_t ti_val_type_props[22] = {
419487 .to_client_pk = val__error_to_client_pk ,
420488 .to_store_pk = (ti_val_to_store_pk_cb ) ti_verror_to_store_pk ,
421489 .get_type_str = val__error_type_str ,
490+ .as_bool = val__as_bool_false ,
422491 .allowed_as_vtask_arg = false,
423492 },
424493 /* TI_VAL_MEMBER */
@@ -429,6 +498,7 @@ static ti_val_type_t ti_val_type_props[22] = {
429498 .to_client_pk = (ti_val_to_client_pk_cb ) val__member_to_client_pk ,
430499 .to_store_pk = (ti_val_to_store_pk_cb ) val__member_to_store_pk ,
431500 .get_type_str = val__member_type_str ,
501+ .as_bool = val__as_bool_member ,
432502 .allowed_as_vtask_arg = false,
433503 },
434504 /* TI_VAL_MPDATA */
@@ -439,6 +509,7 @@ static ti_val_type_t ti_val_type_props[22] = {
439509 .to_client_pk = val__mpdata_to_client_pk ,
440510 .to_store_pk = (ti_val_to_store_pk_cb ) ti_raw_mpdata_to_store_pk ,
441511 .get_type_str = val__mpdata_type_str ,
512+ .as_bool = val__as_bool_raw ,
442513 .allowed_as_vtask_arg = false,
443514 },
444515 /* TI_VAL_CLOSURE */
@@ -449,6 +520,7 @@ static ti_val_type_t ti_val_type_props[22] = {
449520 .to_client_pk = val__closure_to_client_pk ,
450521 .to_store_pk = (ti_val_to_store_pk_cb ) ti_closure_to_store_pk ,
451522 .get_type_str = val__closure_type_str ,
523+ .as_bool = val__as_bool_true ,
452524 .allowed_as_vtask_arg = false,
453525 },
454526 /* TI_VAL_FUTURE */
@@ -458,6 +530,7 @@ static ti_val_type_t ti_val_type_props[22] = {
458530 .to_arr_cb = val__future_to_arr ,
459531 .to_client_pk = (ti_val_to_client_pk_cb ) val__future_to_client_pk ,
460532 .get_type_str = val__future_type_str ,
533+ .as_bool = val__as_bool_true ,
461534 .allowed_as_vtask_arg = false,
462535 },
463536 /* TI_VAL_MODULE */
@@ -467,6 +540,7 @@ static ti_val_type_t ti_val_type_props[22] = {
467540 .to_arr_cb = val__module_to_arr ,
468541 .to_client_pk = (ti_val_to_client_pk_cb ) val__module_to_client_pk ,
469542 .get_type_str = val__module_type_str ,
543+ .as_bool = val__as_bool_true ,
470544 .allowed_as_vtask_arg = false,
471545 },
472546 /* TI_VAL_TEMPLATE */
@@ -478,6 +552,16 @@ static ti_val_type_t ti_val_type_props[22] = {
478552
479553#define ti_val (__val ) (&ti_val_type_props[(__val)->tp])
480554
555+ static inline _Bool val__as_bool_member (ti_val_t * val )
556+ {
557+ return ti_val (VMEMBER (val ))-> as_bool (VMEMBER (val ));
558+ }
559+
560+ static inline _Bool ti_val_as_bool (ti_val_t * val )
561+ {
562+ return ti_val (val )-> as_bool (val );
563+ }
564+
481565static inline const char * ti_val_str (ti_val_t * val )
482566{
483567 return ti_val (val )-> get_type_str (val );
0 commit comments