/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-10 20:42:21 UTC
  • Revision ID: gustav.hartvigsson@gmail.com-20211110204221-15t3jiam2oh4cc36
Changed over the Variabel class to use FastNumers

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
using VQDR.Common;
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.
 
34
      // // this should be correct.
 
35
      // return (current_val.compare (other.current_val)) +
 
36
      //        (max_val.compare (other.max_val)) +
 
37
      //        (min_val.compare (other.min_val));
 
38
      // ------------------------------------------
 
39
      // if (this.current_val > other.current_val) {
 
40
      //   return -1;
 
41
      // } else if (this.current_val < other.current_val) {
 
42
      //   return 1;
 
43
      // } else {
 
44
      //   if (this.max_val > other.max_val) {
 
45
      //     return -1;
 
46
      //   } else if (this.max_val < other.max_val) {
 
47
      //     return 1;
 
48
      //   } else {
 
49
      //     if (this.min_val > other.min_val) {
 
50
      //       return -1;
 
51
      //     } else if (this.min_val < other.min_val) {
 
52
      //       return 1;
 
53
      //     } // End min_val comp.
 
54
      //   } // End max_val comp
 
55
      // } // End current_val Comp
 
56
      // return 0; // They are exacly the same.
45
57
    }
46
58
    
47
59
    /**
56
68
     * Is this instance equal to the other?
57
69
     */
58
70
    public bool equals (Variable other) {
59
 
      return equals_values (other.min_val, other.max_val, other.current_val);
 
71
      return !(bool) this.compare (other);
60
72
    }
61
73
    
62
74
    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);
 
75
      return (this.current_val.number == current) &&
 
76
             (this.max_val.number == max) &&
 
77
             (this.min_val.number == min);
66
78
    }
67
79
    
68
80
    
70
82
    public string to_string () {
71
83
      StringBuilder s = new StringBuilder ();
72
84
      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);
 
85
      s.append_printf ("(max_val: %s, ", max_val.to_string (true));
 
86
      s.append_printf ("min_val: %s, ", max_val.to_string (true));
 
87
      s.append_printf ("current_val: %s)", current_val.to_string (true));
76
88
      s.append(")");
77
89
      return s.str;
78
90
    }