summaryrefslogtreecommitdiff
path: root/tests/glibmm_valuearray/main.cc
blob: 78bf33df5c5caebacfe667c68712795da07b0420 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <glibmm.h>
#include <iostream>

#define VALUES 10

int on_compare(const Glib::ValueBase& v1, const Glib::ValueBase& v2)
{
  const Glib::Value<int> intVal1 = static_cast< const Glib::Value<int>& >(v1);
  const Glib::Value<int> intVal2 = static_cast< const Glib::Value<int>& >(v2);

  int int1 = intVal1.get();
  int int2 = intVal2.get();

  if(int1 < int2)
    return -1;
  else if(int1 == int2)
    return 0;
  else
    return 1;
}

int main(int, char**)
{
  Glib::init();

  Glib::Value<int> value[VALUES];
  Glib::ValueArray array;

  for(int i = 0; i < VALUES; i++)
  {
    value[i].init(Glib::Value<int>::value_type());
    value[i].set(i + 1); //  (i + 1) ==> Set to natural counting numbers.
    array.prepend(value[i]);
  }

  std::cout << "Array members before sorting:" << std::endl;

  for(int i = 0; i < VALUES; i++)
  {
    Glib::ValueBase value;

    if(!array.get_nth(i, value))
    {
      std::cerr << "Error getting element " << i << " of value array." <<
        std::endl;
      break;
    }

    Glib::Value<int> int_val = static_cast< Glib::Value<int>& >(value);
    std::cout << int_val.get() << " ";
  }
  std::cout << std::endl; // End of line for list of array elements.

  // Sort array and remove last element:
  array.sort(sigc::ptr_fun(&on_compare)).remove(VALUES - 1);

  std::cout << "Array members after sorting without last element:" <<
    std::endl;

  for(int i = 0; i < VALUES - 1; i++)
  {
    Glib::ValueBase value;

    if(!array.get_nth(i, value))
    {
      std::cerr << "Error getting element " << i << " of value array." <<
        std::endl;
      break;
    }

    Glib::Value<int> int_val = static_cast< Glib::Value<int>& >(value);
    std::cout << int_val.get() << " ";
  }
  std::cout << std::endl; // End of line for list of array elements.

  return 0;
}