/* $Id: equality.c,v 1.1 2003/03/30 12:08:03 wafer Exp $ */ #include "act.h" #include void equal (value_t *ret, value_t **argv, int argc) { switch (argv[0]->val_type) { case val_int: switch (argv[1]->val_type) { case val_int: ret->value.v_int = argv[0]->value.v_int == argv[1]->value.v_int; break; case val_float: ret->value.v_int = argv[0]->value.v_int == argv[1]->value.v_float; break; case val_period: ret->value.v_int = argv[0]->value.v_int == argv[1]->value.v_period; break; case val_time: ret->value.v_int = argv[0]->value.v_int == argv[1]->value.v_time; break; case val_string: return; } break; case val_float: switch (argv[1]->val_type) { case val_int: ret->value.v_int = argv[0]->value.v_float == argv[1]->value.v_int; break; case val_float: ret->value.v_int = argv[0]->value.v_float == argv[1]->value.v_float; break; case val_period: ret->value.v_int = argv[0]->value.v_float == argv[1]->value.v_period; break; case val_time: ret->value.v_int = argv[0]->value.v_float == argv[1]->value.v_time; break; case val_string: return; } break; case val_time: switch (argv[1]->val_type) { case val_int: ret->value.v_int = argv[0]->value.v_time == argv[1]->value.v_int; break; case val_float: ret->value.v_int = argv[0]->value.v_time == argv[1]->value.v_float; break; case val_period: ret->value.v_int = argv[0]->value.v_time == argv[1]->value.v_period; break; case val_time: ret->value.v_int = argv[0]->value.v_time == argv[1]->value.v_time; break; case val_string: return; } break; case val_period: switch (argv[1]->val_type) { case val_int: ret->value.v_int = argv[0]->value.v_period == argv[1]->value.v_int; break; case val_float: ret->value.v_int = argv[0]->value.v_period == argv[1]->value.v_float; break; case val_period: ret->value.v_int = argv[0]->value.v_period == argv[1]->value.v_period; break; case val_time: ret->value.v_int = argv[0]->value.v_period == argv[1]->value.v_time; break; case val_string: return; } break; case val_string: if (argv[1]->val_type != val_string) return; ret->value.v_int = strncmp(argv[0]->value.v_string, argv[1]->value.v_string, STRING_LIT_LEN) == 0; break; } } void not_equal (value_t *ret, value_t **argv, int argc) { switch (argv[0]->val_type) { case val_int: switch (argv[1]->val_type) { case val_int: ret->value.v_int = argv[0]->value.v_int != argv[1]->value.v_int; break; case val_float: ret->value.v_int = argv[0]->value.v_int != argv[1]->value.v_float; break; case val_period: ret->value.v_int = argv[0]->value.v_int != argv[1]->value.v_period; break; case val_time: ret->value.v_int = argv[0]->value.v_int != argv[1]->value.v_time; break; case val_string: return; } break; case val_float: switch (argv[1]->val_type) { case val_int: ret->value.v_int = argv[0]->value.v_float != argv[1]->value.v_int; break; case val_float: ret->value.v_int = argv[0]->value.v_float != argv[1]->value.v_float; break; case val_period: ret->value.v_int = argv[0]->value.v_float != argv[1]->value.v_period; break; case val_time: ret->value.v_int = argv[0]->value.v_float != argv[1]->value.v_time; break; case val_string: return; } break; case val_time: switch (argv[1]->val_type) { case val_int: ret->value.v_int = argv[0]->value.v_time != argv[1]->value.v_int; break; case val_float: ret->value.v_int = argv[0]->value.v_time != argv[1]->value.v_float; break; case val_period: ret->value.v_int = argv[0]->value.v_time != argv[1]->value.v_period; break; case val_time: ret->value.v_int = argv[0]->value.v_time != argv[1]->value.v_time; break; case val_string: return; } break; case val_period: switch (argv[1]->val_type) { case val_int: ret->value.v_int = argv[0]->value.v_period != argv[1]->value.v_int; break; case val_float: ret->value.v_int = argv[0]->value.v_period != argv[1]->value.v_float; break; case val_period: ret->value.v_int = argv[0]->value.v_period != argv[1]->value.v_period; break; case val_time: ret->value.v_int = argv[0]->value.v_period != argv[1]->value.v_time; break; case val_string: return; } break; case val_string: if (argv[1]->val_type != val_string) return; ret->value.v_int = strncmp(argv[0]->value.v_string, argv[1]->value.v_string, STRING_LIT_LEN) != 0; break; } } /* relation typechecks */ int typecheck_equal (value_t *ret, value_t **argv, int argc) { switch (argv[0]->val_type) { case val_int: case val_float: case val_time: case val_period: if (argv[1]->val_type == val_string) return 1; break; case val_string: if (argv[1]->val_type != val_string) return 1; break; } ret->val_type = val_int; return 0; } int typecheck_not_equal (value_t *ret, value_t **argv, int argc) { switch (argv[0]->val_type) { case val_int: case val_float: case val_time: case val_period: if (argv[1]->val_type == val_string) return 1; break; case val_string: if (argv[1]->val_type != val_string) return 1; break; } ret->val_type = val_int; return 0; }