Welcome to mirror list, hosted at ThFree Co, Russian Federation.

18.4.1.xml « ecma334 « docs « mcs - github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: ebf99931ca1ad7656956fac897305d8c5af2fa36 (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
<?xml version="1.0"?>
<clause number="18.4.1" title="Database integer type" informative="true">
  <paragraph>The DBInt struct below implements an integer type that can represent the complete set of values of the <keyword>int</keyword> type, plus an additional state that indicates an unknown value. A type with these characteristics is commonly used in databases. <code_example><![CDATA[
using System;  
public struct DBInt  
{  
   // The Null member represents an unknown DBInt value.  
   public static readonly DBInt Null = new DBInt();  
   // When the defined field is true, this DBInt represents a known value  
   // which is stored in the value field. When the defined field is false,  
   
   // this DBInt represents an unknown value, and the value field is 0.  
   int value;  
   bool defined;  
   // Private instance constructor. Creates a DBInt with a known value.  
   DBInt(int value) {  
      this.value = value;  
      this.defined = true;  
   }  
   // The IsNull property is true if this DBInt represents an unknown value.  
   
   public bool IsNull { get { return !defined; } }  
   // The Value property is the known value of this DBInt, or 0 if this  
   // DBInt represents an unknown value.  
   public int Value { get { return value; } }  
   // Implicit conversion from int to DBInt.  
   public static implicit operator DBInt(int x) {  
      return new DBInt(x);  
   }  
   // Explicit conversion from DBInt to int. Throws an exception if the  
   // given DBInt represents an unknown value.  
   public static explicit operator int(DBInt x) {  
      if (!x.defined) throw new InvalidOperationException();  
      return x.value;  
   }  
   public static DBInt operator +(DBInt x) {  
      return x;  
   }  
   public static DBInt operator -(DBInt x) {  
      return x.defined? -x.value: Null;  
   }  
   public static DBInt operator +(DBInt x, DBInt y) {  
      return x.defined && y.defined? x.value + y.value: Null;  
   }  
   public static DBInt operator -(DBInt x, DBInt y) {  
      return x.defined && y.defined? x.value - y.value: Null;  
   }  
   public static DBInt operator *(DBInt x, DBInt y) {  
      return x.defined && y.defined? x.value * y.value: Null;  
   }  
   public static DBInt operator /(DBInt x, DBInt y) {  
      return x.defined && y.defined? x.value / y.value: Null;  
   }  
   public static DBInt operator %(DBInt x, DBInt y) {  
      return x.defined && y.defined? x.value % y.value: Null;  
   }  
   public static DBBool operator ==(DBInt x, DBInt y) {  
      return x.defined && y.defined? x.value == y.value: DBBool.Null;  
   }  
   public static DBBool operator !=(DBInt x, DBInt y) {  
      return x.defined && y.defined? x.value != y.value: DBBool.Null;  
   }  
   public static DBBool operator >(DBInt x, DBInt y) {  
      return x.defined && y.defined? x.value > y.value: DBBool.Null;  
   }  
   public static DBBool operator <(DBInt x, DBInt y) {  
      return x.defined && y.defined? x.value < y.value: DBBool.Null;  
   }  
   public static DBBool operator >=(DBInt x, DBInt y) {  
      return x.defined && y.defined? x.value >= y.value: DBBool.Null;  
   }  
   public static DBBool operator <=(DBInt x, DBInt y) {  
      return x.defined && y.defined? x.value <= y.value: DBBool.Null;  
   }  
}  
]]></code_example></paragraph>
</clause>