259
geis_attr_value(GeisAttr attr)
261
if (attr->attr_type == GEIS_ATTR_TYPE_POINTER
262
|| attr->attr_type == GEIS_ATTR_TYPE_STRING)
263
return attr->attr_value.p;
265
return &attr->attr_value;
259
270
geis_attr_value_to_boolean(GeisAttr attr)
415
geis_attr_compare(GeisAttr lhs, GeisAttr rhs, GeisFilterOperation op)
417
GeisBoolean result = GEIS_FALSE;
419
if (lhs->attr_type != rhs->attr_type)
422
switch (lhs->attr_type)
424
case GEIS_ATTR_TYPE_BOOLEAN:
427
case GEIS_FILTER_OP_EQ:
428
result = lhs->attr_value.b == rhs->attr_value.b;
430
case GEIS_FILTER_OP_NE:
431
case GEIS_FILTER_OP_GT:
432
case GEIS_FILTER_OP_LT:
433
result = lhs->attr_value.b != rhs->attr_value.b;
435
case GEIS_FILTER_OP_GE:
436
case GEIS_FILTER_OP_LE:
442
case GEIS_ATTR_TYPE_FLOAT:
445
case GEIS_FILTER_OP_EQ:
446
result = lhs->attr_value.f == rhs->attr_value.f;
448
case GEIS_FILTER_OP_NE:
449
result = lhs->attr_value.f != rhs->attr_value.f;
451
case GEIS_FILTER_OP_GT:
452
result = lhs->attr_value.f > rhs->attr_value.f;
454
case GEIS_FILTER_OP_GE:
455
result = lhs->attr_value.f >= rhs->attr_value.f;
457
case GEIS_FILTER_OP_LT:
458
result = lhs->attr_value.f < rhs->attr_value.f;
460
case GEIS_FILTER_OP_LE:
461
result = lhs->attr_value.f <= rhs->attr_value.f;
466
case GEIS_ATTR_TYPE_INTEGER:
469
case GEIS_FILTER_OP_EQ:
470
result = lhs->attr_value.i == rhs->attr_value.i;
472
case GEIS_FILTER_OP_NE:
473
result = lhs->attr_value.i != rhs->attr_value.i;
475
case GEIS_FILTER_OP_GT:
476
result = lhs->attr_value.i > rhs->attr_value.i;
478
case GEIS_FILTER_OP_GE:
479
result = lhs->attr_value.i >= rhs->attr_value.i;
481
case GEIS_FILTER_OP_LT:
482
result = lhs->attr_value.i < rhs->attr_value.i;
484
case GEIS_FILTER_OP_LE:
485
result = lhs->attr_value.i <= rhs->attr_value.i;
490
case GEIS_ATTR_TYPE_POINTER:
493
case GEIS_FILTER_OP_EQ:
494
result = lhs->attr_value.p == rhs->attr_value.p;
496
case GEIS_FILTER_OP_NE:
497
result = lhs->attr_value.p != rhs->attr_value.p;
499
case GEIS_FILTER_OP_GT:
500
result = lhs->attr_value.p > rhs->attr_value.p;
502
case GEIS_FILTER_OP_GE:
503
result = lhs->attr_value.p >= rhs->attr_value.p;
505
case GEIS_FILTER_OP_LT:
506
result = lhs->attr_value.p < rhs->attr_value.p;
508
case GEIS_FILTER_OP_LE:
509
result = lhs->attr_value.p <= rhs->attr_value.p;
514
case GEIS_ATTR_TYPE_STRING:
517
case GEIS_FILTER_OP_EQ:
518
result = strcmp(lhs->attr_value.s, rhs->attr_value.s) == 0;
520
case GEIS_FILTER_OP_NE:
521
result = strcmp(lhs->attr_value.s, rhs->attr_value.s) != 0;
523
case GEIS_FILTER_OP_GT:
524
result = strcmp(lhs->attr_value.s, rhs->attr_value.s) > 0;
526
case GEIS_FILTER_OP_GE:
527
result = strcmp(lhs->attr_value.s, rhs->attr_value.s) >= 0;
529
case GEIS_FILTER_OP_LT:
530
result = strcmp(lhs->attr_value.s, rhs->attr_value.s) < 0;
532
case GEIS_FILTER_OP_LE:
533
result = strcmp(lhs->attr_value.s, rhs->attr_value.s) <= 0;
539
/* no comparisons are supported on indeterminate types */