diff options
-rw-r--r-- | src/jtutil/array.cc | 53 | ||||
-rw-r--r-- | src/jtutil/array.hh | 16 | ||||
-rw-r--r-- | src/jtutil/test_array.cc | 27 |
3 files changed, 44 insertions, 52 deletions
diff --git a/src/jtutil/array.cc b/src/jtutil/array.cc index dc4b2ae..ded2033 100644 --- a/src/jtutil/array.cc +++ b/src/jtutil/array.cc @@ -17,8 +17,9 @@ // #include <assert.h> -#include <jt/stdc.h> -#include <jt/array.hh> +#include "jt/stdc.h" +#include "jt/util++.hh" +#include "jt/array.hh" //***************************************************************************** // array1d - 1D array template @@ -27,16 +28,16 @@ // // This function constructs an array1d object. // -template <class fp> -array1d<fp>::array1d(int min_i_in, int max_i_in) +template <class fpt> +array1d<fpt>::array1d(int min_i_in, int max_i_in) : min_i_(min_i_in), max_i_(max_i_in) { -array_ = new fp[N_i()]; +array_ = new fpt[N_i()]; // need to explicitly initialize -- new[] *doesn't* do this automagically for (int i = 0 ; i < N_array() ; ++i) { - array_[i] = fp(0); + array_[i] = fpt(0); } } @@ -45,8 +46,8 @@ array_ = new fp[N_i()]; // // This function destroys an array1d object. // -template <class fp> -array1d<fp>::~array1d() +template <class fpt> +array1d<fpt>::~array1d() { delete[] array_; } @@ -58,20 +59,20 @@ delete[] array_; // // This function constructs an array2d object. // -template <class fp> -array2d<fp>::array2d(int min_i_in, int max_i_in, +template <class fpt> +array2d<fpt>::array2d(int min_i_in, int max_i_in, int min_j_in, int max_j_in) : min_i_(min_i_in), max_i_(max_i_in), min_j_(min_j_in), max_j_(max_j_in) { stride_i_ = N_j(); N_array_ = N_i() * stride_i_; -array_ = new fp[N_array_]; +array_ = new fpt[N_array_]; // need to explicitly initialize -- new[] *doesn't* do this automagically for (int i = 0 ; i < N_array() ; ++i) { - array_[i] = fp(0); + array_[i] = fpt(0); } offset_ = 0; // temp value, needed for following subscript() call @@ -84,8 +85,8 @@ offset_ = - subscript_unchecked(min_i_, min_j_); // // This function destroys an array2d object. // -template <class fp> -array2d<fp>::~array2d() +template <class fpt> +array2d<fpt>::~array2d() { delete[] array_; } @@ -97,8 +98,8 @@ delete[] array_; // // This function constructs an array3d object. // -template <class fp> -array3d<fp>::array3d(int min_i_in, int max_i_in, +template <class fpt> +array3d<fpt>::array3d(int min_i_in, int max_i_in, int min_j_in, int max_j_in, int min_k_in, int max_k_in) : min_i_(min_i_in), max_i_(max_i_in), @@ -108,12 +109,12 @@ array3d<fp>::array3d(int min_i_in, int max_i_in, stride_j_ = N_k(); stride_i_ = N_j() * stride_j_; N_array_ = N_i() * stride_i_; -array_ = new fp[N_array_]; +array_ = new fpt[N_array_]; // need to explicitly initialize -- new[] *doesn't* do this automagically for (int i = 0 ; i < N_array() ; ++i) { - array_[i] = fp(0); + array_[i] = fpt(0); } offset_ = 0; // temp value, needed for following subscript() call @@ -126,8 +127,8 @@ offset_ = - subscript_unchecked(min_i_, min_j_, min_k_); // // This function destroys an array3d object. // -template <class fp> -array3d<fp>::~array3d() +template <class fpt> +array3d<fpt>::~array3d() { delete[] array_; } @@ -139,8 +140,8 @@ delete[] array_; // // This function constructs an array4d object. // -template <class fp> -array4d<fp>::array4d(int min_i_in, int max_i_in, +template <class fpt> +array4d<fpt>::array4d(int min_i_in, int max_i_in, int min_j_in, int max_j_in, int min_k_in, int max_k_in, int min_l_in, int max_l_in) @@ -153,12 +154,12 @@ stride_k_ = N_l(); stride_j_ = N_k() * stride_k_; stride_i_ = N_j() * stride_j_; N_array_ = N_i() * stride_i_; -array_ = new fp[N_array_]; +array_ = new fpt[N_array_]; // need to explicitly initialize -- new[] *doesn't* do this automagically for (int i = 0 ; i < N_array() ; ++i) { - array_[i] = fp(0); + array_[i] = fpt(0); } offset_ = 0; // temp value, needed for following subscript() call @@ -171,8 +172,8 @@ offset_ = - subscript_unchecked(min_i_, min_j_, min_k_, min_l_); // // This function destroys an array4d object. // -template <class fp> -array4d<fp>::~array4d() +template <class fpt> +array4d<fpt>::~array4d() { delete[] array_; } diff --git a/src/jtutil/array.hh b/src/jtutil/array.hh index cc3349d..f7e584d 100644 --- a/src/jtutil/array.hh +++ b/src/jtutil/array.hh @@ -21,6 +21,10 @@ // arrays cannot be copied or passed to functions by value; use pass // by reference instead. // +// FIXME: Maybe these should be in namespace jtutil::? +// + +// // Stroustrup ("The C++ Programming Language", 3rd edition, appendix C.7) // suggests the use of STL vectors of STL vectors to provide multidimensional // arrays. However, those "arrays" aren't contiguous in memory, so the @@ -43,8 +47,6 @@ //****************************************************************************** -namespace jtutil - { template <class fpt> class array1d { @@ -96,12 +98,9 @@ private: // min/max array bounds const int min_i_, max_i_; }; - }; // close namespace jtutil:: //****************************************************************************** -namespace jtutil - { template <class fpt> class array2d { @@ -175,12 +174,9 @@ private: const int min_i_, max_i_; const int min_j_, max_j_; }; - }; // close namespace jtutil:: //****************************************************************************** -namespace jtutil - { template <class fpt> class array3d { @@ -260,12 +256,9 @@ private: const int min_j_, max_j_; const int min_k_, max_k_; }; - }; // close namespace jtutil:: //****************************************************************************** -namespace jtutil - { template <class fpt> class array4d { @@ -357,4 +350,3 @@ private: const int min_k_, max_k_; const int min_l_, max_l_; }; - }; // close namespace jtutil:: diff --git a/src/jtutil/test_array.cc b/src/jtutil/test_array.cc index 5f46df6..d9dfcce 100644 --- a/src/jtutil/test_array.cc +++ b/src/jtutil/test_array.cc @@ -4,10 +4,9 @@ #include <assert.h> #include <stdio.h> #include <math.h> -#include <jt/stdc.h> -#include <jt/util.h> -#include <jt/util++.hh> -#include <jt/array.hh> +#include "jt/stdc.h" +#include "jt/util++.hh" +#include "jt/array.hh" // // prototypes for non-class functions defined in this file @@ -50,7 +49,7 @@ printf("\ntesting array1d<double>...\n"); printf("constructing...\n"); array1d<double> A(min_i, max_i); assert(A.min_i() == min_i); assert(A.max_i() == max_i); -assert(A.N_i() == HOW_MANY_IN_RANGE(min_i,max_i)); +assert(A.N_i() == jtutil::how_many_in_range(min_i,max_i)); printf("assigning values...\n"); #define VALUE_1D(ix) \ @@ -118,8 +117,8 @@ printf("constructing...\n"); array2d<float> A(min_i,max_i, min_j,max_j); assert(A.min_i() == min_i); assert(A.max_i() == max_i); assert(A.min_j() == min_j); assert(A.max_j() == max_j); -assert(A.N_i() == HOW_MANY_IN_RANGE(min_i,max_i)); -assert(A.N_j() == HOW_MANY_IN_RANGE(min_j,max_j)); +assert(A.N_i() == jtutil::how_many_in_range(min_i,max_i)); +assert(A.N_j() == jtutil::how_many_in_range(min_j,max_j)); printf("assigning values...\n"); #define VALUE_2D(ix,jx) \ @@ -202,9 +201,9 @@ array3d<double> A(min_i,max_i, min_j,max_j, min_k,max_k); assert(A.min_i() == min_i); assert(A.max_i() == max_i); assert(A.min_j() == min_j); assert(A.max_j() == max_j); assert(A.min_k() == min_k); assert(A.max_k() == max_k); -assert(A.N_i() == HOW_MANY_IN_RANGE(min_i,max_i)); -assert(A.N_j() == HOW_MANY_IN_RANGE(min_j,max_j)); -assert(A.N_k() == HOW_MANY_IN_RANGE(min_k,max_k)); +assert(A.N_i() == jtutil::how_many_in_range(min_i,max_i)); +assert(A.N_j() == jtutil::how_many_in_range(min_j,max_j)); +assert(A.N_k() == jtutil::how_many_in_range(min_k,max_k)); printf("assigning values...\n"); #define VALUE_3D(ix,jx,kx) \ @@ -301,10 +300,10 @@ assert(A.min_i() == min_i); assert(A.max_i() == max_i); assert(A.min_j() == min_j); assert(A.max_j() == max_j); assert(A.min_k() == min_k); assert(A.max_k() == max_k); assert(A.min_l() == min_l); assert(A.max_l() == max_l); -assert(A.N_i() == HOW_MANY_IN_RANGE(min_i,max_i)); -assert(A.N_j() == HOW_MANY_IN_RANGE(min_j,max_j)); -assert(A.N_k() == HOW_MANY_IN_RANGE(min_k,max_k)); -assert(A.N_l() == HOW_MANY_IN_RANGE(min_l,max_l)); +assert(A.N_i() == jtutil::how_many_in_range(min_i,max_i)); +assert(A.N_j() == jtutil::how_many_in_range(min_j,max_j)); +assert(A.N_k() == jtutil::how_many_in_range(min_k,max_k)); +assert(A.N_l() == jtutil::how_many_in_range(min_l,max_l)); printf("assigning values...\n"); #define VALUE_4D(ix,jx,kx,lx) \ |