ROOT logo
// @(#)root/cont:$Id$
// Author: Rene Brun   06/03/95

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TArrayC                                                              //
//                                                                      //
// Array of chars or bytes (8 bits per element).                        //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TArrayC.h"
#include "TBuffer.h"


ClassImp(TArrayC)

//______________________________________________________________________________
TArrayC::TArrayC()
{
   // Default TArrayC ctor.

   fArray = 0;
}

//______________________________________________________________________________
TArrayC::TArrayC(Int_t n)
{
   // Create TArrayC object and set array size to n chars.

   fArray = 0;
   if (n > 0) Set(n);
}

//______________________________________________________________________________
TArrayC::TArrayC(Int_t n, const Char_t *array)
{
   // Create TArrayC object and initialize it with values of array.

   fArray = 0;
   Set(n, array);
}

//______________________________________________________________________________
TArrayC::TArrayC(const TArrayC &array) : TArray(array)
{
   // Copy constructor.

   fArray = 0;
   Set(array.fN, array.fArray);
}

//______________________________________________________________________________
TArrayC &TArrayC::operator=(const TArrayC &rhs)
{
   // TArrayC assignment operator.

   if (this != &rhs)
      Set(rhs.fN, rhs.fArray);
   return *this;
}

//______________________________________________________________________________
TArrayC::~TArrayC()
{
   // Delete TArrayC object.

   delete [] fArray;
   fArray = 0;
}

//______________________________________________________________________________
void TArrayC::Adopt(Int_t n, Char_t *arr)
{
   // Adopt array arr into TArrayC, i.e. don't copy arr but use it directly
   // in TArrayC. User may not delete arr, TArrayC dtor will do it.

   if (fArray)
      delete [] fArray;

   fN     = n;
   fArray = arr;
}

//______________________________________________________________________________
void TArrayC::AddAt(Char_t c, Int_t i)
{
   // Add char c at position i. Check for out of bounds.

   if (!BoundsOk("TArrayC::AddAt", i)) return;
   fArray[i] = c;
}

//______________________________________________________________________________
void TArrayC::Set(Int_t n)
{
   // Set size of this array to n chars.
   // A new array is created, the old contents copied to the new array,
   // then the old array is deleted.
   // This function should not be called if the array was declared via Adopt.

   if (n < 0) return;
   if (n != fN) {
      Char_t *temp = fArray;
      if (n != 0) {
         fArray = new Char_t[n];
         if (n < fN) memcpy(fArray,temp, n*sizeof(Char_t));
         else {
            memcpy(fArray,temp,fN*sizeof(Char_t));
            memset(&fArray[fN],0,(n-fN)*sizeof(Char_t));
         }
      } else {
         fArray = 0;
      }
      if (fN) delete [] temp;
      fN = n;
   }
}

//______________________________________________________________________________
void TArrayC::Set(Int_t n, const Char_t *array)
{
   // Set size of this array to n chars and set the contents.
   // This function should not be called if the array was declared via Adopt.

   if (fArray && fN != n) {
      delete [] fArray;
      fArray = 0;
   }
   fN = n;
   if (fN == 0) return;
   if (array == 0) return;
   if (!fArray) fArray = new Char_t[fN];
   memmove(fArray, array, n*sizeof(Char_t));
}

//_______________________________________________________________________
void TArrayC::Streamer(TBuffer &b)
{
   // Stream a TArrayC object.

   if (b.IsReading()) {
      Int_t n;
      b >> n;
      Set(n);
      b.ReadFastArray(fArray,n);
   } else {
      b << fN;
      b.WriteFastArray(fArray, fN);
   }
}

 TArrayC.cxx:1
 TArrayC.cxx:2
 TArrayC.cxx:3
 TArrayC.cxx:4
 TArrayC.cxx:5
 TArrayC.cxx:6
 TArrayC.cxx:7
 TArrayC.cxx:8
 TArrayC.cxx:9
 TArrayC.cxx:10
 TArrayC.cxx:11
 TArrayC.cxx:12
 TArrayC.cxx:13
 TArrayC.cxx:14
 TArrayC.cxx:15
 TArrayC.cxx:16
 TArrayC.cxx:17
 TArrayC.cxx:18
 TArrayC.cxx:19
 TArrayC.cxx:20
 TArrayC.cxx:21
 TArrayC.cxx:22
 TArrayC.cxx:23
 TArrayC.cxx:24
 TArrayC.cxx:25
 TArrayC.cxx:26
 TArrayC.cxx:27
 TArrayC.cxx:28
 TArrayC.cxx:29
 TArrayC.cxx:30
 TArrayC.cxx:31
 TArrayC.cxx:32
 TArrayC.cxx:33
 TArrayC.cxx:34
 TArrayC.cxx:35
 TArrayC.cxx:36
 TArrayC.cxx:37
 TArrayC.cxx:38
 TArrayC.cxx:39
 TArrayC.cxx:40
 TArrayC.cxx:41
 TArrayC.cxx:42
 TArrayC.cxx:43
 TArrayC.cxx:44
 TArrayC.cxx:45
 TArrayC.cxx:46
 TArrayC.cxx:47
 TArrayC.cxx:48
 TArrayC.cxx:49
 TArrayC.cxx:50
 TArrayC.cxx:51
 TArrayC.cxx:52
 TArrayC.cxx:53
 TArrayC.cxx:54
 TArrayC.cxx:55
 TArrayC.cxx:56
 TArrayC.cxx:57
 TArrayC.cxx:58
 TArrayC.cxx:59
 TArrayC.cxx:60
 TArrayC.cxx:61
 TArrayC.cxx:62
 TArrayC.cxx:63
 TArrayC.cxx:64
 TArrayC.cxx:65
 TArrayC.cxx:66
 TArrayC.cxx:67
 TArrayC.cxx:68
 TArrayC.cxx:69
 TArrayC.cxx:70
 TArrayC.cxx:71
 TArrayC.cxx:72
 TArrayC.cxx:73
 TArrayC.cxx:74
 TArrayC.cxx:75
 TArrayC.cxx:76
 TArrayC.cxx:77
 TArrayC.cxx:78
 TArrayC.cxx:79
 TArrayC.cxx:80
 TArrayC.cxx:81
 TArrayC.cxx:82
 TArrayC.cxx:83
 TArrayC.cxx:84
 TArrayC.cxx:85
 TArrayC.cxx:86
 TArrayC.cxx:87
 TArrayC.cxx:88
 TArrayC.cxx:89
 TArrayC.cxx:90
 TArrayC.cxx:91
 TArrayC.cxx:92
 TArrayC.cxx:93
 TArrayC.cxx:94
 TArrayC.cxx:95
 TArrayC.cxx:96
 TArrayC.cxx:97
 TArrayC.cxx:98
 TArrayC.cxx:99
 TArrayC.cxx:100
 TArrayC.cxx:101
 TArrayC.cxx:102
 TArrayC.cxx:103
 TArrayC.cxx:104
 TArrayC.cxx:105
 TArrayC.cxx:106
 TArrayC.cxx:107
 TArrayC.cxx:108
 TArrayC.cxx:109
 TArrayC.cxx:110
 TArrayC.cxx:111
 TArrayC.cxx:112
 TArrayC.cxx:113
 TArrayC.cxx:114
 TArrayC.cxx:115
 TArrayC.cxx:116
 TArrayC.cxx:117
 TArrayC.cxx:118
 TArrayC.cxx:119
 TArrayC.cxx:120
 TArrayC.cxx:121
 TArrayC.cxx:122
 TArrayC.cxx:123
 TArrayC.cxx:124
 TArrayC.cxx:125
 TArrayC.cxx:126
 TArrayC.cxx:127
 TArrayC.cxx:128
 TArrayC.cxx:129
 TArrayC.cxx:130
 TArrayC.cxx:131
 TArrayC.cxx:132
 TArrayC.cxx:133
 TArrayC.cxx:134
 TArrayC.cxx:135
 TArrayC.cxx:136
 TArrayC.cxx:137
 TArrayC.cxx:138
 TArrayC.cxx:139
 TArrayC.cxx:140
 TArrayC.cxx:141
 TArrayC.cxx:142
 TArrayC.cxx:143
 TArrayC.cxx:144
 TArrayC.cxx:145
 TArrayC.cxx:146
 TArrayC.cxx:147
 TArrayC.cxx:148
 TArrayC.cxx:149
 TArrayC.cxx:150
 TArrayC.cxx:151
 TArrayC.cxx:152
 TArrayC.cxx:153
 TArrayC.cxx:154
 TArrayC.cxx:155
 TArrayC.cxx:156
 TArrayC.cxx:157
 TArrayC.cxx:158
 TArrayC.cxx:159
 TArrayC.cxx:160