00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
#ifndef _MATRIX_barray_h_
00027
#define _MATRIX_barray_h_
00028
00029
#include "matrix_global.h"
00030
#include "specialType.h"
00031
#include "list.h"
00032
00033
00034
00035
00038
namespace PLib {
00039
template <
class T>
class BasicArray ;
00040
00041
template <
class T>
int operator!=(
const BasicArray<T>&,
const BasicArray<T>&);
00042
template <
class T>
int operator==(
const BasicArray<T>&,
const BasicArray<T>&);
00043
template <
class T> istream& operator>>(istream& is, BasicArray<T>& arry);
00044
template <
class T> ostream& operator<<(ostream& os, const BasicArray<T>& arry);
00045
00046
#include "galloc.h"
00047
00048
00058
template<
class T>
class BasicArray
00059 {
00060
public:
00061
int n() const
00062 {
return sze; }
00063
BasicArray();
00064
BasicArray(
const int ni);
00065
BasicArray(
const BasicArray<T>& f2);
00066
BasicArray(T* ap,
const int size) ;
00067
BasicArray(
BasicList<T>& list) ;
00068
virtual ~BasicArray();
00069
00070 BasicArray<T>&
operator=(
const BasicArray<T>& f2);
00071
00072
int size() const
00073 {
return sze; }
00074
void resize(
const int nsize)
00075 { resizeBasicArray(*
this,nsize) ; }
00076
void resize(
const BasicArray<T>& A)
00077 { resize(A.n()); }
00078
00079
void trim(
const int nsize);
00080
void clear();
00081
void untrim()
00082 {
sze =
rsize; }
00083
00084 T&
push_back(
const T i,
int end_buffer=10,
double end_mult=-1);
00085
00086
00087
virtual void reset(
const T val = 0.0);
00088 T
operator=(
const T val)
00089 { reset(val);
return val; }
00090
00091
#ifdef DEBUG_PLIB
00092
T&
operator[](
const int i) ;
00093 T
operator[](
const int i)
const ;
00094
#else
00095
T&
operator[](
const int i)
00096 {
return x[i]; }
00097 T
operator[](
const int i)
const
00098 {
return x[i]; }
00099
#endif
00100
T*
memory() const
00101 {
return x ; }
00102
00103
void width(
const int w)
00104 {
wdth = w; }
00105
00106
#ifdef HAVE_ISO_FRIEND_DECL
00107
friend int operator!= <>(
const BasicArray<T>&,
const BasicArray<T>&);
00108
friend int operator== <>(
const BasicArray<T>&,
const BasicArray<T>&);
00109
friend istream& operator>> <>(istream& is, BasicArray<T>& arry);
00110
friend ostream& operator<< <>(ostream& os,
const BasicArray<T>& arry);
00111
#else
00112
friend int operator!= (
const BasicArray<T>&,
const BasicArray<T>&);
00113
friend int operator== (
const BasicArray<T>&,
const BasicArray<T>&);
00114
friend istream& operator>> (istream& is, BasicArray<T>& arry);
00115
friend ostream& operator<< (ostream& os, const BasicArray<T>& arry);
00116
#endif
00117
00118 ostream&
print(ostream& os)
const ;
00119
00120 FRIEND_ARRAY_ALLOCATOR
00121
00122
00123
typedef T* iterator ;
00124
typedef const T* const_iterator ;
00125
00126 iterator begin() {
return (0<
sze) ?
x : 0 ; }
00127 const_iterator begin()
const {
return (0<
sze) ?
x : 0 ; }
00128
00129 iterator end() {
return (0<
sze) ?
x+
sze : 0; }
00130 const_iterator end()
const {
return (0<
sze) ?
x+
sze : 0; }
00131
00132
protected:
00133 int rsize;
00134
int wdth;
00135
int destruct ;
00136 int sze;
00137 T *x;
00138 };
00139
00140 }
00141
00142
typedef PLib::BasicArray<int> BasicArray_INT ;
00143
typedef PLib::BasicArray<char> BasicArray_BYTE ;
00144
typedef PLib::BasicArray<double> BasicArray_DOUBLE ;
00145
typedef PLib::BasicArray<float> BasicArray_FLOAT ;
00146
typedef PLib::BasicArray<Complex> BasicArray_COMPLEX ;
00147 typedef PLib::BasicArray<unsigned char> BasicArray_UBYTE ;
00148
typedef PLib::BasicArray<PLib::HPoint3Df> BasicArray_HPoint3D ;
00149
typedef PLib::BasicArray<PLib::Point3Df> BasicArray_Point3D ;
00150
typedef PLib::BasicArray<PLib::HPoint3Dd> BasicArray_HPoint3Dd ;
00151 typedef PLib::BasicArray<PLib::Point3Dd> BasicArray_Point3Dd ;
00152
typedef PLib::BasicArray<PLib::HPoint2Df> BasicArray_HPoint2D ;
00153
typedef PLib::BasicArray<PLib::Point2Df> BasicArray_Point2D ;
00154
typedef PLib::BasicArray<PLib::HPoint2Dd> BasicArray_HPoint2Dd ;
00155
typedef PLib::BasicArray<PLib::Point2Dd> BasicArray_Point2Dd ;
00156
typedef PLib::BasicArray<void*> BasicArray_VoidPtr ;
00157
typedef PLib::BasicArray<PLib::Coordinate> BasicArray_Coordinate ;
00158
00159
#ifdef INCLUDE_TEMPLATE_SOURCE
00160
#include "barray.cpp"
00161
#include "barray_hpoint.cpp"
00162
#endif
00163
00164
00165
00166
#endif