/vqdr/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/vqdr/trunk

« back to all changes in this revision

Viewing changes to src/libvqdr/variable.vala

  • Committer: Gustav Hartvigsson
  • Date: 2021-11-15 16:29:17 UTC
  • Revision ID: gustav.hartvigsson@gmail.com-20211115162917-yqz4q9epewtpe4p5
Sort of fixed object_to_string ()...
still needs figue out how to do the recurtion propperly.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
using Utils;
1
2
namespace VQDR.Expression {
2
 
  
3
 
  
4
3
  /**
5
4
   * Represents a variable.
6
5
   */
7
6
  public struct Variable {
8
 
    public int min_val;
9
 
    public int max_val;
10
 
    public int current_val;
 
7
    public FastNumber min_val;
 
8
    public FastNumber max_val;
 
9
    public FastNumber current_val;
11
10
    
12
11
    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;
 
12
      this.max_val.number = max;
 
13
      this.min_val.number = min;
 
14
      this.current_val.number = current;
16
15
    }
17
16
    
18
17
    [CCode (cname = "vqdr_expression_variable_copy")]
19
18
    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;
 
19
      this.max_val.copy (other.max_val);
 
20
      this.min_val.copy (other.min_val);
 
21
      this.current_val.copy (other.current_val);
23
22
    }
24
23
    
25
 
    public int compare (Variable other) {
 
24
    public long compare (Variable other) {
 
25
      if (! this.current_val.equals (other.current_val)) {
 
26
        return this.current_val.compare (other.current_val);
 
27
      } else if (! this.max_val.equals (other.max_val)) {
 
28
        return this.max_val.compare (other.max_val);
 
29
      } else if (! this.min_val.equals (other.min_val)) {
 
30
        return this.min_val.compare (other.min_val);
 
31
      }
 
32
      return 0;
26
33
      
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
34
    }
46
35
    
47
36
    /**
56
45
     * Is this instance equal to the other?
57
46
     */
58
47
    public bool equals (Variable other) {
59
 
      return equals_values (other.min_val, other.max_val, other.current_val);
 
48
      return !(bool) this.compare (other);
60
49
    }
61
50
    
62
51
    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);
 
52
      return (this.current_val.number == current) &&
 
53
             (this.max_val.number == max) &&
 
54
             (this.min_val.number == min);
66
55
    }
67
56
    
68
57
    
70
59
    public string to_string () {
71
60
      StringBuilder s = new StringBuilder ();
72
61
      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);
 
62
      s.append_printf ("(max_val: %s, ", max_val.to_string (true));
 
63
      s.append_printf ("min_val: %s, ", max_val.to_string (true));
 
64
      s.append_printf ("current_val: %s)", current_val.to_string (true));
76
65
      s.append(")");
77
66
      return s.str;
78
67
    }