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$
// $MpId: AliMpSectorPadIterator.cxx,v 1.6 2006/05/24 13:58:46 ivana Exp $
// Category: sector

//-----------------------------------------------------------------------------
// Class AliMpSectorPadIterator
// ----------------------------
// Class, which defines an iterator over the pads of a sector
// Included in AliRoot: 2003/05/02
// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
//-----------------------------------------------------------------------------


#include "AliMpSectorPadIterator.h"
#include "AliMpSector.h"
#include "AliMpMotifType.h"

#include "AliMpRow.h"
#include "AliMpVRowSegment.h"
#include "AliMpMotifMap.h"
#include "AliMpMotifPosition.h"

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

//______________________________________________________________________________
AliMpSectorPadIterator::AliMpSectorPadIterator()
  : AliMpVPadIterator(),
    fkSector(0),
    fCurrentIndex(0),
    fMotifPos(0),
    fIterator()
{
/// Default constructor, set the current position to "invalid"
}

//______________________________________________________________________________
AliMpSectorPadIterator::AliMpSectorPadIterator(const AliMpSector* sector)
  : AliMpVPadIterator(),
    fkSector(sector),
    fCurrentIndex(0),
    fMotifPos(0),
    fIterator()
{
/// Standard constructor, set *this to invalid position  
}

//______________________________________________________________________________
AliMpSectorPadIterator::AliMpSectorPadIterator(const AliMpSectorPadIterator& right)
  : AliMpVPadIterator(right),
    fkSector(0),
    fCurrentIndex(0),
    fMotifPos(0),
    fIterator()
{
/// Copy constructor
 
  *this = right;
}

//______________________________________________________________________________
AliMpSectorPadIterator::~AliMpSectorPadIterator()
{
/// Destructor
}

//
// operators
//

//______________________________________________________________________________
AliMpSectorPadIterator& 
AliMpSectorPadIterator::operator = (const AliMpSectorPadIterator& right)
{
/// Assignment operator

  // check assignment to self
  if (this == &right) return *this;

  // base class assignment
  AliMpVPadIterator::operator=(right);

  fkSector      = right.fkSector;
  fCurrentIndex = right.fCurrentIndex,
  fMotifPos     = right.fMotifPos;
  fIterator     = right.fIterator;

  return *this;
} 

//private methods

//______________________________________________________________________________
AliMpMotifPosition* AliMpSectorPadIterator::ResetToCurrentMotifPosition()
{
/// Find the AliMpMotifType object associated with the triplet
/// (fCurrentRow, fCurrentSeg, fCurrentMotif),
/// place it in the private fMotifType member and return it.

  if ( fCurrentIndex == fkSector->GetMotifMap()->GetNofMotifPositions() ) {
    Invalidate();
    return 0;
  }  
    
  fMotifPos = fkSector->GetMotifMap()->GetMotifPosition(fCurrentIndex);
  fIterator = AliMpMotifPositionPadIterator(fMotifPos);
  fIterator.First();

  return fMotifPos;
}

//______________________________________________________________________________
Bool_t AliMpSectorPadIterator::IsValid() const
{
/// Is the iterator in a valid position?

    return (fkSector!=0) && (fMotifPos!=0);
} 

//
//public methods
//

//______________________________________________________________________________
void AliMpSectorPadIterator::First()
{
/// Reset the iterator, so that it points to the first available
/// pad in the sector

    if (!fkSector) {
        Invalidate();
        return;
    }
    fCurrentIndex =0;
    ResetToCurrentMotifPosition();

    return;
}

//______________________________________________________________________________
void AliMpSectorPadIterator::Next()
{
/// Move the iterator to the next valid pad.

  if (!IsValid()) return;

  fIterator.Next();
  
  if (!fIterator.IsDone()) return;
  

  // Go to the next motif, in the current segment
  ++fCurrentIndex;
  if (ResetToCurrentMotifPosition()) return;

  Invalidate();
  return;

}

//______________________________________________________________________________
Bool_t AliMpSectorPadIterator::IsDone() const
{
/// Is the iterator in the end? 

  return ! IsValid();
}

//______________________________________________________________________________
AliMpPad AliMpSectorPadIterator::CurrentItem () const 
{
/// Return current pad.

  if (!IsValid())
    return AliMpPad::Invalid();
      

  // no more verification, since IsValid() is TRUE here.
  return fIterator.CurrentItem();
}

//______________________________________________________________________________
void AliMpSectorPadIterator::Invalidate()
{
/// Let the iterator point to the invalid position
    fMotifPos = 0;
    fIterator.Invalidate();
} 

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