~bregma/geis/lp-785321

« back to all changes in this revision

Viewing changes to libutouch-geis/geis_attr.c

  • Committer: Stephen M. Webb
  • Date: 2011-10-18 20:30:02 UTC
  • mfrom: (158.1.42 client-arch)
  • Revision ID: stephen.webb@canonical.com-20111018203002-ne8h3n25fbey3fqr
Merged client-arch branch.

Provided a new DBus-client back end and a dbus-server facility.  Included a test driver for the server.  Made the DBus client the default back-end with an automatic fall back to the XCB back end for seamless support of existing client software.

Show diffs side-by-side

added added

removed removed

Lines of Context:
255
255
}
256
256
 
257
257
 
 
258
void *
 
259
geis_attr_value(GeisAttr attr)
 
260
{
 
261
  if (attr->attr_type == GEIS_ATTR_TYPE_POINTER
 
262
   || attr->attr_type == GEIS_ATTR_TYPE_STRING)
 
263
    return attr->attr_value.p;
 
264
  else
 
265
    return &attr->attr_value;
 
266
}
 
267
 
 
268
 
258
269
GeisBoolean
259
270
geis_attr_value_to_boolean(GeisAttr attr)
260
271
{
400
411
}
401
412
 
402
413
 
 
414
GeisBoolean
 
415
geis_attr_compare(GeisAttr lhs, GeisAttr rhs, GeisFilterOperation op)
 
416
{
 
417
  GeisBoolean result = GEIS_FALSE;
 
418
 
 
419
  if (lhs->attr_type != rhs->attr_type)
 
420
    return result;
 
421
 
 
422
  switch (lhs->attr_type)
 
423
  {
 
424
    case GEIS_ATTR_TYPE_BOOLEAN:
 
425
      switch (op)
 
426
      {
 
427
        case GEIS_FILTER_OP_EQ:
 
428
          result = lhs->attr_value.b == rhs->attr_value.b;
 
429
          break;
 
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;
 
434
          break;
 
435
        case GEIS_FILTER_OP_GE:
 
436
        case GEIS_FILTER_OP_LE:
 
437
          result = GEIS_TRUE;
 
438
          break;
 
439
      }
 
440
      break;
 
441
 
 
442
    case GEIS_ATTR_TYPE_FLOAT:
 
443
      switch (op)
 
444
      {
 
445
        case GEIS_FILTER_OP_EQ:
 
446
          result = lhs->attr_value.f == rhs->attr_value.f;
 
447
          break;
 
448
        case GEIS_FILTER_OP_NE:
 
449
          result = lhs->attr_value.f != rhs->attr_value.f;
 
450
          break;
 
451
        case GEIS_FILTER_OP_GT:
 
452
          result = lhs->attr_value.f > rhs->attr_value.f;
 
453
          break;
 
454
        case GEIS_FILTER_OP_GE:
 
455
          result = lhs->attr_value.f >= rhs->attr_value.f;
 
456
          break;
 
457
        case GEIS_FILTER_OP_LT:
 
458
          result = lhs->attr_value.f < rhs->attr_value.f;
 
459
          break;
 
460
        case GEIS_FILTER_OP_LE:
 
461
          result = lhs->attr_value.f <= rhs->attr_value.f;
 
462
          break;
 
463
      }
 
464
      break;
 
465
 
 
466
    case GEIS_ATTR_TYPE_INTEGER:
 
467
      switch (op)
 
468
      {
 
469
        case GEIS_FILTER_OP_EQ:
 
470
          result = lhs->attr_value.i == rhs->attr_value.i;
 
471
          break;
 
472
        case GEIS_FILTER_OP_NE:
 
473
          result = lhs->attr_value.i != rhs->attr_value.i;
 
474
          break;
 
475
        case GEIS_FILTER_OP_GT:
 
476
          result = lhs->attr_value.i > rhs->attr_value.i;
 
477
          break;
 
478
        case GEIS_FILTER_OP_GE:
 
479
          result = lhs->attr_value.i >= rhs->attr_value.i;
 
480
          break;
 
481
        case GEIS_FILTER_OP_LT:
 
482
          result = lhs->attr_value.i < rhs->attr_value.i;
 
483
          break;
 
484
        case GEIS_FILTER_OP_LE:
 
485
          result = lhs->attr_value.i <= rhs->attr_value.i;
 
486
          break;
 
487
      }
 
488
      break;
 
489
 
 
490
    case GEIS_ATTR_TYPE_POINTER:
 
491
      switch (op)
 
492
      {
 
493
        case GEIS_FILTER_OP_EQ:
 
494
          result = lhs->attr_value.p == rhs->attr_value.p;
 
495
          break;
 
496
        case GEIS_FILTER_OP_NE:
 
497
          result = lhs->attr_value.p != rhs->attr_value.p;
 
498
          break;
 
499
        case GEIS_FILTER_OP_GT:
 
500
          result = lhs->attr_value.p > rhs->attr_value.p;
 
501
          break;
 
502
        case GEIS_FILTER_OP_GE:
 
503
          result = lhs->attr_value.p >= rhs->attr_value.p;
 
504
          break;
 
505
        case GEIS_FILTER_OP_LT:
 
506
          result = lhs->attr_value.p < rhs->attr_value.p;
 
507
          break;
 
508
        case GEIS_FILTER_OP_LE:
 
509
          result = lhs->attr_value.p <= rhs->attr_value.p;
 
510
          break;
 
511
      }
 
512
      break;
 
513
 
 
514
    case GEIS_ATTR_TYPE_STRING:
 
515
      switch (op)
 
516
      {
 
517
        case GEIS_FILTER_OP_EQ:
 
518
          result = strcmp(lhs->attr_value.s, rhs->attr_value.s) == 0;
 
519
          break;
 
520
        case GEIS_FILTER_OP_NE:
 
521
          result = strcmp(lhs->attr_value.s, rhs->attr_value.s) != 0;
 
522
          break;
 
523
        case GEIS_FILTER_OP_GT:
 
524
          result = strcmp(lhs->attr_value.s, rhs->attr_value.s) > 0;
 
525
          break;
 
526
        case GEIS_FILTER_OP_GE:
 
527
          result = strcmp(lhs->attr_value.s, rhs->attr_value.s) >= 0;
 
528
          break;
 
529
        case GEIS_FILTER_OP_LT:
 
530
          result = strcmp(lhs->attr_value.s, rhs->attr_value.s) < 0;
 
531
          break;
 
532
        case GEIS_FILTER_OP_LE:
 
533
          result = strcmp(lhs->attr_value.s, rhs->attr_value.s) <= 0;
 
534
          break;
 
535
      }
 
536
      break;
 
537
 
 
538
    default:
 
539
      /* no comparisons are supported on indeterminate types */
 
540
      break;
 
541
  }
 
542
 
 
543
  return result;
 
544
}
 
545