/vqdr/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/vqdr/trunk
1 by Gustav Hartvigsson
* Initial code - far from done
1
namespace VQDR.Expression {
2
  
3
  
4
  /**
5
   * Represents a variable.
6
   */
7
  public struct Variable {
8
    public int min_val;
9
    public int max_val;
10
    public int current_val;
11
    
12
    public Variable (int min = 0, int max = 0, int current = 0) {
13
      this.max_val = max;
14
      this.min_val = min;
15
      this.current_val = current;
16
    }
17
    
18
    [CCode (cname = "vqdr_expression_variable_copy")]
19
    public Variable.copy (Variable other) {
20
      this.max_val = other.max_val;
21
      this.min_val = other.min_val;
22
      this.current_val = other.current_val;
23
    }
24
    
25
    public int compare (Variable other) {
26
      
27
      if (this.current_val > other.current_val) {
28
        return -1;
29
      } else if (this.current_val < other.current_val) {
30
        return 1;
31
      } else {
32
        if (this.max_val > other.max_val) {
33
          return -1;
34
        } else if (this.max_val < other.max_val) {
35
          return 1;
36
        } else {
37
          if (this.min_val > other.min_val) {
38
            return -1;
39
          } else if (this.min_val < other.min_val) {
40
            return 1;
41
          } // End min_val comp.
42
        } // End max_val comp
43
      } // End current_val Comp
44
      return 0; // They are exacly the same.
45
    }
46
    
47
    /**
48
     * Compares two Variables.
49
     * 
50
     * This is the same as @c compare. It is an alias to the same C function.
51
     */
52
    [CCode (cname = "vqdr_expression_variable_equals")]
53
    public static extern int static_compare (Variable a, Variable b);
54
    
55
    /**
56
     * Is this instance equal to the other?
57
     */
58
    public bool equals (Variable other) {
59
      return equals_values (other.min_val, other.max_val, other.current_val);
60
    }
61
    
62
    public bool equals_values (int min, int max, int current) {
63
      return (max == this.max_val) &&
64
             (min == this.min_val) &&
65
             (current == this.current_val);
66
    }
67
    
68
    
69
    
70
    public string to_string () {
71
      StringBuilder s = new StringBuilder ();
72
      s.append("(Variable: ");
73
      s.append_printf ("(max_val: %i, ", max_val);
74
      s.append_printf ("min_val: %i, ", max_val);
75
      s.append_printf ("current_val: %i)", current_val);
76
      s.append(")");
77
      return s.str;
78
    }
79
  }
80
}