comparison liboctave/Array3.h @ 4323:0990c9b77109

[project @ 2003-02-14 07:36:26 by jwe]
author jwe
date Fri, 14 Feb 2003 07:36:27 +0000
parents 5719210fff4c
children af308ca1a354
comparison
equal deleted inserted replaced
4322:0b24abe1ba0b 4323:0990c9b77109
46 46
47 int d3; 47 int d3;
48 48
49 Array3 (T *d, int n, int m, int k) : Array2<T> (d, n, get_size (m, k)) 49 Array3 (T *d, int n, int m, int k) : Array2<T> (d, n, get_size (m, k))
50 { 50 {
51 d2 = m; 51 Array2<T>::d2 = m;
52 d3 = k; 52 d3 = k;
53 set_max_indices (3); 53 set_max_indices (3);
54 } 54 }
55 55
56 public: 56 public:
57 57
58 Array3 (void) : Array2<T> () 58 Array3 (void) : Array2<T> ()
59 { 59 {
60 d2 = 0; 60 Array2<T>::d2 = 0;
61 d3 = 0; 61 d3 = 0;
62 set_max_indices (3); 62 set_max_indices (3);
63 } 63 }
64 64
65 Array3 (int n, int m, int k) : Array2<T> (n, get_size (m, k)) 65 Array3 (int n, int m, int k) : Array2<T> (n, get_size (m, k))
66 { 66 {
67 d2 = m; 67 Array2<T>::d2 = m;
68 d3 = k; 68 d3 = k;
69 set_max_indices (3); 69 set_max_indices (3);
70 } 70 }
71 71
72 Array3 (int n, int m, int k, const T& val) : Array2<T> (n, m*k, val) 72 Array3 (int n, int m, int k, const T& val) : Array2<T> (n, m*k, val)
73 { 73 {
74 d2 = m; 74 Array2<T>::d2 = m;
75 d3 = k; 75 d3 = k;
76 set_max_indices (3); 76 set_max_indices (3);
77 } 77 }
78 78
79 Array3 (const Array3<T>& a) : Array2<T> (a) 79 Array3 (const Array3<T>& a) : Array2<T> (a)
80 { 80 {
81 d2 = a.d2; 81 Array2<T>::d2 = a.d2;
82 d3 = a.d3; 82 d3 = a.d3;
83 set_max_indices (3); 83 set_max_indices (3);
84 } 84 }
85 85
86 ~Array3 (void) { } 86 ~Array3 (void) { }
87 87
88 Array3<T>& operator = (const Array3<T>& a) 88 Array3<T>& operator = (const Array3<T>& a)
89 { 89 {
90 if (this != &a && rep != a.rep) 90 if (this != &a && Array<T>::rep != a.rep)
91 { 91 {
92 Array<T>::operator = (a); 92 Array<T>::operator = (a);
93 d1 = a.d1; 93 Array2<T>::d1 = a.d1;
94 d2 = a.d2; 94 Array2<T>::d2 = a.d2;
95 d3 = a.d3; 95 d3 = a.d3;
96 } 96 }
97 97
98 return *this; 98 return *this;
99 } 99 }
100 100
101 int dim3 (void) const { return d3; } 101 int dim3 (void) const { return d3; }
102 102
103 // No checking of any kind, ever. 103 // No checking of any kind, ever.
104 104
105 T& xelem (int i, int j, int k) { return Array2<T>::xelem (i, d2*k+j); } 105 T& xelem (int i, int j, int k) { return Array2<T>::xelem (i, Array2<T>::d2*k+j); }
106 T xelem (int i, int j, int k) const { return Array2<T>::xelem (i, d2*k+j); } 106 T xelem (int i, int j, int k) const { return Array2<T>::xelem (i, Array2<T>::d2*k+j); }
107 107
108 // Note that the following element selection methods don't use 108 // Note that the following element selection methods don't use
109 // xelem() because they need to make use of the code in 109 // xelem() because they need to make use of the code in
110 // Array<T>::elem() that checks the reference count. 110 // Array<T>::elem() that checks the reference count.
111 111
112 T& checkelem (int i, int j, int k) 112 T& checkelem (int i, int j, int k)
113 { 113 {
114 if (i < 0 || j < 0 || k < 0 || i >= d1 || j >= d2 || k >= d3) 114 if (i < 0 || j < 0 || k < 0 || i >= Array2<T>::d1 || j >= Array2<T>::d2 || k >= d3)
115 { 115 {
116 (*current_liboctave_error_handler) ("range error in Array3"); 116 (*current_liboctave_error_handler) ("range error in Array3");
117 static T foo; 117 static T foo;
118 return foo; 118 return foo;
119 } 119 }
120 return Array2<T>::elem (i, d2*k+j); 120 return Array2<T>::elem (i, Array2<T>::d2*k+j);
121 } 121 }
122 122
123 T& elem (int i, int j, int k) { return Array2<T>::elem (i, d2*k+j); } 123 T& elem (int i, int j, int k) { return Array2<T>::elem (i, Array2<T>::d2*k+j); }
124 124
125 #if defined (BOUNDS_CHECKING) 125 #if defined (BOUNDS_CHECKING)
126 T& operator () (int i, int j, int k) { return checkelem (i, j, k); } 126 T& operator () (int i, int j, int k) { return checkelem (i, j, k); }
127 #else 127 #else
128 T& operator () (int i, int j, int k) { return elem (i, j, k); } 128 T& operator () (int i, int j, int k) { return elem (i, j, k); }
129 #endif 129 #endif
130 130
131 T checkelem (int i, int j, int k) const 131 T checkelem (int i, int j, int k) const
132 { 132 {
133 if (i < 0 || j < 0 || k < 0 || i >= d1 || j >= d2 || k >= d3) 133 if (i < 0 || j < 0 || k < 0 || i >= Array2<T>::d1 || j >= Array2<T>::d2 || k >= d3)
134 { 134 {
135 (*current_liboctave_error_handler) ("range error in Array3"); 135 (*current_liboctave_error_handler) ("range error in Array3");
136 return T (); 136 return T ();
137 } 137 }
138 return Array2<T>::elem (i, d1*k+j); 138 return Array2<T>::elem (i, Array2<T>::d1*k+j);
139 } 139 }
140 140
141 T elem (int i, int j, int k) const { return Array2<T>::elem (i, d2*k+j); } 141 T elem (int i, int j, int k) const { return Array2<T>::elem (i, Array2<T>::d2*k+j); }
142 142
143 #if defined (BOUNDS_CHECKING) 143 #if defined (BOUNDS_CHECKING)
144 T operator () (int i, int j, int k) const { return checkelem (i, j, k); } 144 T operator () (int i, int j, int k) const { return checkelem (i, j, k); }
145 #else 145 #else
146 T operator () (int i, int j, int k) const { return elem (i, j, k); } 146 T operator () (int i, int j, int k) const { return elem (i, j, k); }