ROOT logo
/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
*                                                                        *
* Author: The ALICE Off-line Project.                                    *
* Contributors are mentioned in the code where appropriate.              *
*                                                                        *
* Permission to use, copy, modify and distribute this software and its   *
* documentation strictly for non-commercial purposes is hereby granted   *
* without fee, provided that the above copyright notice appears in all   *
* copies and that both the copyright notice and this permission notice   *
* appear in the supporting documentation. The authors make no claims     *
* about the suitability of this software for any purpose. It is          *
* provided "as is" without express or implied warranty.                  *
**************************************************************************/

// $Id$

#include "AliMUON1DArray.h"

#include "AliLog.h"
#include <TClass.h>
#include <TObjArray.h>
#include <Riostream.h>

//-----------------------------------------------------------------------------
/// \class AliMUON1DArray
/// This class is simply a wrapper to a TObjArray, offering in addition a
/// control over the replacement policy when you add
/// something to it.
///
/// \author Laurent Aphecetche
//-----------------------------------------------------------------------------

/// \cond CLASSIMP
ClassImp(AliMUON1DArray)
/// \endcond

//_____________________________________________________________________________
AliMUON1DArray::AliMUON1DArray(Int_t theSize)
: AliMUONVStore(),
  fArray(0x0)
{
    /// Default ctor

  if (theSize<=0) theSize=16;
        
  fArray = new TObjArray(theSize);
  fArray->SetOwner(kTRUE);
}

//_____________________________________________________________________________
AliMUON1DArray::AliMUON1DArray(const AliMUON1DArray& other)
: AliMUONVStore(),
  fArray(0x0)
{
/// Copy constructor

    AliDebug(1,Form("this=%p copy ctor",this));
  other.CopyTo(*this);
}

//_____________________________________________________________________________
AliMUON1DArray&
AliMUON1DArray::operator=(const AliMUON1DArray& other)
{
/// Assignment operator

  other.CopyTo(*this);
  return *this;
}

//_____________________________________________________________________________
AliMUON1DArray::~AliMUON1DArray()
{
  /// dtor, we're the owner of our internal array.

  AliDebug(1,Form("this=%p",this));
  delete fArray;
}

//_____________________________________________________________________________
Bool_t
AliMUON1DArray::Add(TObject* object)
{
  /// Add an object to this, if its uniqueID is below maxsize
  if (!object) return kFALSE;
  
  Int_t i = (Int_t)object->GetUniqueID();
  if ( i >= fArray->GetSize() ) 
  {
    AliError(Form("Index out of bounds %u (max is %u)",i,fArray->GetSize()));
    return kFALSE;
  }

  Set(object->GetUniqueID(),object,kFALSE);
  return kTRUE;
}

//_____________________________________________________________________________
void
AliMUON1DArray::Clear(Option_t* opt)
{
  /// Reset
  fArray->Clear(opt);
}

//_____________________________________________________________________________
void
AliMUON1DArray::CopyTo(AliMUON1DArray& dest) const
{
/// Make a deep copy

  delete dest.fArray;
  dest.fArray = 0;
  dest.fArray = new TObjArray(fArray->GetSize());
  dest.fArray->SetOwner(kTRUE);
  for ( Int_t i = 0; i < fArray->GetLast(); ++i )
  {
    dest.fArray->AddAt(fArray->At(i)->Clone(),i);
  }
}

//_____________________________________________________________________________
AliMUON1DArray* 
AliMUON1DArray::Create() const 
{
  /// Create an empty clone of this
  return new AliMUON1DArray(fArray->GetSize());
}

//_____________________________________________________________________________
TObject* 
AliMUON1DArray::FindObject(UInt_t i) const
{
  /// Get the object located at index i, if it exists, and if i is correct.

  if ( (Int_t)(i) < fArray->GetSize() )
  {
    return fArray->At(i);
  }
  AliError(Form("Index %d out of bounds (max %d)",i,fArray->GetSize()));
  return 0x0;
}

//_____________________________________________________________________________
TIterator* 
AliMUON1DArray::CreateIterator() const
{
  /// Return an iterator on this
  return fArray->MakeIterator();
}

//_____________________________________________________________________________
Bool_t 
AliMUON1DArray::Set(Int_t i, TObject* object, Bool_t replace)
{
/// Set the object located at i
/// If replace=kFALSE and there's already an object at location i,
/// this method fails and returns kFALSE, otherwise it returns kTRUE

  if ( i >= 0 && i < fArray->GetSize() )
  {
    if (((Int_t)(object->GetUniqueID()))!=i)
    {
      AliError(Form("object's UniqueID is %d, which is different from the expected %d",
                    object->GetUniqueID(),i));
      return kFALSE;
    }
    
    TObject* o = FindObject(i);
    if ( o && !replace )
    {
      AliError(Form("Object %p is already there for i=%d",o,i));
      return kFALSE;
    }
    if ( o && replace ) 
    {
      delete o;
    }
    fArray->AddAt(object,i);
    return kTRUE;
  }
  AliError(Form("Index %d out of bounds (max %d)",i,fArray->GetSize()));
  return kFALSE;
}

//_____________________________________________________________________________
Int_t 
AliMUON1DArray::GetSize() const
{
  /// Return the number of object we hold
  return fArray->GetEntries();
}
 AliMUON1DArray.cxx:1
 AliMUON1DArray.cxx:2
 AliMUON1DArray.cxx:3
 AliMUON1DArray.cxx:4
 AliMUON1DArray.cxx:5
 AliMUON1DArray.cxx:6
 AliMUON1DArray.cxx:7
 AliMUON1DArray.cxx:8
 AliMUON1DArray.cxx:9
 AliMUON1DArray.cxx:10
 AliMUON1DArray.cxx:11
 AliMUON1DArray.cxx:12
 AliMUON1DArray.cxx:13
 AliMUON1DArray.cxx:14
 AliMUON1DArray.cxx:15
 AliMUON1DArray.cxx:16
 AliMUON1DArray.cxx:17
 AliMUON1DArray.cxx:18
 AliMUON1DArray.cxx:19
 AliMUON1DArray.cxx:20
 AliMUON1DArray.cxx:21
 AliMUON1DArray.cxx:22
 AliMUON1DArray.cxx:23
 AliMUON1DArray.cxx:24
 AliMUON1DArray.cxx:25
 AliMUON1DArray.cxx:26
 AliMUON1DArray.cxx:27
 AliMUON1DArray.cxx:28
 AliMUON1DArray.cxx:29
 AliMUON1DArray.cxx:30
 AliMUON1DArray.cxx:31
 AliMUON1DArray.cxx:32
 AliMUON1DArray.cxx:33
 AliMUON1DArray.cxx:34
 AliMUON1DArray.cxx:35
 AliMUON1DArray.cxx:36
 AliMUON1DArray.cxx:37
 AliMUON1DArray.cxx:38
 AliMUON1DArray.cxx:39
 AliMUON1DArray.cxx:40
 AliMUON1DArray.cxx:41
 AliMUON1DArray.cxx:42
 AliMUON1DArray.cxx:43
 AliMUON1DArray.cxx:44
 AliMUON1DArray.cxx:45
 AliMUON1DArray.cxx:46
 AliMUON1DArray.cxx:47
 AliMUON1DArray.cxx:48
 AliMUON1DArray.cxx:49
 AliMUON1DArray.cxx:50
 AliMUON1DArray.cxx:51
 AliMUON1DArray.cxx:52
 AliMUON1DArray.cxx:53
 AliMUON1DArray.cxx:54
 AliMUON1DArray.cxx:55
 AliMUON1DArray.cxx:56
 AliMUON1DArray.cxx:57
 AliMUON1DArray.cxx:58
 AliMUON1DArray.cxx:59
 AliMUON1DArray.cxx:60
 AliMUON1DArray.cxx:61
 AliMUON1DArray.cxx:62
 AliMUON1DArray.cxx:63
 AliMUON1DArray.cxx:64
 AliMUON1DArray.cxx:65
 AliMUON1DArray.cxx:66
 AliMUON1DArray.cxx:67
 AliMUON1DArray.cxx:68
 AliMUON1DArray.cxx:69
 AliMUON1DArray.cxx:70
 AliMUON1DArray.cxx:71
 AliMUON1DArray.cxx:72
 AliMUON1DArray.cxx:73
 AliMUON1DArray.cxx:74
 AliMUON1DArray.cxx:75
 AliMUON1DArray.cxx:76
 AliMUON1DArray.cxx:77
 AliMUON1DArray.cxx:78
 AliMUON1DArray.cxx:79
 AliMUON1DArray.cxx:80
 AliMUON1DArray.cxx:81
 AliMUON1DArray.cxx:82
 AliMUON1DArray.cxx:83
 AliMUON1DArray.cxx:84
 AliMUON1DArray.cxx:85
 AliMUON1DArray.cxx:86
 AliMUON1DArray.cxx:87
 AliMUON1DArray.cxx:88
 AliMUON1DArray.cxx:89
 AliMUON1DArray.cxx:90
 AliMUON1DArray.cxx:91
 AliMUON1DArray.cxx:92
 AliMUON1DArray.cxx:93
 AliMUON1DArray.cxx:94
 AliMUON1DArray.cxx:95
 AliMUON1DArray.cxx:96
 AliMUON1DArray.cxx:97
 AliMUON1DArray.cxx:98
 AliMUON1DArray.cxx:99
 AliMUON1DArray.cxx:100
 AliMUON1DArray.cxx:101
 AliMUON1DArray.cxx:102
 AliMUON1DArray.cxx:103
 AliMUON1DArray.cxx:104
 AliMUON1DArray.cxx:105
 AliMUON1DArray.cxx:106
 AliMUON1DArray.cxx:107
 AliMUON1DArray.cxx:108
 AliMUON1DArray.cxx:109
 AliMUON1DArray.cxx:110
 AliMUON1DArray.cxx:111
 AliMUON1DArray.cxx:112
 AliMUON1DArray.cxx:113
 AliMUON1DArray.cxx:114
 AliMUON1DArray.cxx:115
 AliMUON1DArray.cxx:116
 AliMUON1DArray.cxx:117
 AliMUON1DArray.cxx:118
 AliMUON1DArray.cxx:119
 AliMUON1DArray.cxx:120
 AliMUON1DArray.cxx:121
 AliMUON1DArray.cxx:122
 AliMUON1DArray.cxx:123
 AliMUON1DArray.cxx:124
 AliMUON1DArray.cxx:125
 AliMUON1DArray.cxx:126
 AliMUON1DArray.cxx:127
 AliMUON1DArray.cxx:128
 AliMUON1DArray.cxx:129
 AliMUON1DArray.cxx:130
 AliMUON1DArray.cxx:131
 AliMUON1DArray.cxx:132
 AliMUON1DArray.cxx:133
 AliMUON1DArray.cxx:134
 AliMUON1DArray.cxx:135
 AliMUON1DArray.cxx:136
 AliMUON1DArray.cxx:137
 AliMUON1DArray.cxx:138
 AliMUON1DArray.cxx:139
 AliMUON1DArray.cxx:140
 AliMUON1DArray.cxx:141
 AliMUON1DArray.cxx:142
 AliMUON1DArray.cxx:143
 AliMUON1DArray.cxx:144
 AliMUON1DArray.cxx:145
 AliMUON1DArray.cxx:146
 AliMUON1DArray.cxx:147
 AliMUON1DArray.cxx:148
 AliMUON1DArray.cxx:149
 AliMUON1DArray.cxx:150
 AliMUON1DArray.cxx:151
 AliMUON1DArray.cxx:152
 AliMUON1DArray.cxx:153
 AliMUON1DArray.cxx:154
 AliMUON1DArray.cxx:155
 AliMUON1DArray.cxx:156
 AliMUON1DArray.cxx:157
 AliMUON1DArray.cxx:158
 AliMUON1DArray.cxx:159
 AliMUON1DArray.cxx:160
 AliMUON1DArray.cxx:161
 AliMUON1DArray.cxx:162
 AliMUON1DArray.cxx:163
 AliMUON1DArray.cxx:164
 AliMUON1DArray.cxx:165
 AliMUON1DArray.cxx:166
 AliMUON1DArray.cxx:167
 AliMUON1DArray.cxx:168
 AliMUON1DArray.cxx:169
 AliMUON1DArray.cxx:170
 AliMUON1DArray.cxx:171
 AliMUON1DArray.cxx:172
 AliMUON1DArray.cxx:173
 AliMUON1DArray.cxx:174
 AliMUON1DArray.cxx:175
 AliMUON1DArray.cxx:176
 AliMUON1DArray.cxx:177
 AliMUON1DArray.cxx:178
 AliMUON1DArray.cxx:179
 AliMUON1DArray.cxx:180
 AliMUON1DArray.cxx:181
 AliMUON1DArray.cxx:182
 AliMUON1DArray.cxx:183
 AliMUON1DArray.cxx:184
 AliMUON1DArray.cxx:185
 AliMUON1DArray.cxx:186
 AliMUON1DArray.cxx:187
 AliMUON1DArray.cxx:188
 AliMUON1DArray.cxx:189
 AliMUON1DArray.cxx:190
 AliMUON1DArray.cxx:191
 AliMUON1DArray.cxx:192
 AliMUON1DArray.cxx:193