00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "TArrayC.h"
00021 #include "TBuffer.h"
00022
00023
00024 ClassImp(TArrayC)
00025
00026
00027 TArrayC::TArrayC()
00028 {
00029
00030
00031 fArray = 0;
00032 }
00033
00034
00035 TArrayC::TArrayC(Int_t n)
00036 {
00037
00038
00039 fArray = 0;
00040 if (n > 0) Set(n);
00041 }
00042
00043
00044 TArrayC::TArrayC(Int_t n, const Char_t *array)
00045 {
00046
00047
00048 fArray = 0;
00049 Set(n, array);
00050 }
00051
00052
00053 TArrayC::TArrayC(const TArrayC &array) : TArray(array)
00054 {
00055
00056
00057 fArray = 0;
00058 Set(array.fN, array.fArray);
00059 }
00060
00061
00062 TArrayC &TArrayC::operator=(const TArrayC &rhs)
00063 {
00064
00065
00066 if (this != &rhs)
00067 Set(rhs.fN, rhs.fArray);
00068 return *this;
00069 }
00070
00071
00072 TArrayC::~TArrayC()
00073 {
00074
00075
00076 delete [] fArray;
00077 fArray = 0;
00078 }
00079
00080
00081 void TArrayC::Adopt(Int_t n, Char_t *arr)
00082 {
00083
00084
00085
00086 if (fArray)
00087 delete [] fArray;
00088
00089 fN = n;
00090 fArray = arr;
00091 }
00092
00093
00094 void TArrayC::AddAt(Char_t c, Int_t i)
00095 {
00096
00097
00098 if (!BoundsOk("TArrayC::AddAt", i)) return;
00099 fArray[i] = c;
00100 }
00101
00102
00103 void TArrayC::Set(Int_t n)
00104 {
00105
00106
00107
00108
00109
00110 if (n < 0) return;
00111 if (n != fN) {
00112 Char_t *temp = fArray;
00113 if (n != 0) {
00114 fArray = new Char_t[n];
00115 if (n < fN) memcpy(fArray,temp, n*sizeof(Char_t));
00116 else {
00117 memcpy(fArray,temp,fN*sizeof(Char_t));
00118 memset(&fArray[fN],0,(n-fN)*sizeof(Char_t));
00119 }
00120 } else {
00121 fArray = 0;
00122 }
00123 if (fN) delete [] temp;
00124 fN = n;
00125 }
00126 }
00127
00128
00129 void TArrayC::Set(Int_t n, const Char_t *array)
00130 {
00131
00132
00133
00134 if (fArray && fN != n) {
00135 delete [] fArray;
00136 fArray = 0;
00137 }
00138 fN = n;
00139 if (fN == 0) return;
00140 if (array == 0) return;
00141 if (!fArray) fArray = new Char_t[fN];
00142 memcpy(fArray,array, n*sizeof(Char_t));
00143 }
00144
00145
00146 void TArrayC::Streamer(TBuffer &b)
00147 {
00148
00149
00150 if (b.IsReading()) {
00151 Int_t n;
00152 b >> n;
00153 Set(n);
00154 b.ReadFastArray(fArray,n);
00155 } else {
00156 b << fN;
00157 b.WriteFastArray(fArray, fN);
00158 }
00159 }
00160