Mercurial > hg > octave-lyh
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); } |