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: AliMpIntPair.cxx,v 1.7 2006/05/24 13:58:29 ivana Exp $
// Category: basic

//-----------------------------------------------------------------------------
// Class AliMpIntPair
// --------------
// Class that defines the pair of integers.
// The pair created by the default constructor is in invalide state,
// setting one of values changes the state to valid.
//
// Included in AliRoot: 2003/05/02
// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
//-----------------------------------------------------------------------------

#include "AliMpIntPair.h"

#include "AliLog.h"

#include <Riostream.h>

using std::endl;
/// \cond CLASSIMP
ClassImp(AliMpIntPair)
/// \endcond


///////////////////////////////////////////////////
//
// This class is a replacement for the standard STL
// pair<int,int> class, which can not be handed
// by the normal ROOT automatic streamer
// (at least in the ROOT version 3.03/03)
//
///////////////////////////////////////////////////


//_____________________________________________________________________________
AliMpIntPair::AliMpIntPair(Int_t ix,Int_t iy)
  : TObject(),
    fFirst(ix),
    fSecond(iy),
    fValidity(true) 
{
/// Standard constructor
}

//_____________________________________________________________________________
AliMpIntPair::AliMpIntPair(Int_t ix,Int_t iy, Bool_t validity)
  : TObject(),
    fFirst(ix),
    fSecond(iy),
    fValidity(validity) 
{
/// Standard constructor with validity argument
}

//_____________________________________________________________________________
AliMpIntPair::AliMpIntPair()
  : TObject(),
    //fFirst(9999),
    //fSecond(9999),
    fFirst(0),
    fSecond(0),
    fValidity(false) 
{
/// Default constructor
}

//_____________________________________________________________________________
AliMpIntPair::AliMpIntPair(const AliMpIntPair& src):
  TObject(src),
  fFirst(src.fFirst),
  fSecond(src.fSecond),
  fValidity(src.fValidity)
{
/// Copy constructor
}

//_____________________________________________________________________________
AliMpIntPair::~AliMpIntPair() 
{
/// Destructor
}

//_____________________________________________________________________________
Bool_t AliMpIntPair::operator< (const AliMpIntPair& pos2) const
{
/// Less operator

  // fFirst prior to fSecond
  if (fFirst<pos2.fFirst) return kTRUE;
  if (fFirst>pos2.fFirst) return kFALSE;
  if (fSecond<pos2.fSecond) return kTRUE;
  return kFALSE;
}

//_____________________________________________________________________________
Bool_t AliMpIntPair::operator== (const AliMpIntPair& pos2) const
{
/// Equality operator

  // are this and pos2 equals?
  
  // one valid, one invalid
  if (fValidity != pos2.fValidity) return false;
  
  // both invalid
  if (!fValidity) return true;
  
  // both valid
  return (fFirst==pos2.fFirst) && (fSecond==pos2.fSecond);
}

//_____________________________________________________________________________
Bool_t AliMpIntPair::operator!= (const AliMpIntPair& pos2) const
{
/// Non-equality operator

  // are this and pos2 equals?
  return !(*this == pos2);
}

//_____________________________________________________________________________
AliMpIntPair& AliMpIntPair::operator=(const AliMpIntPair& src) 
{
/// Assignment operator

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

  // base class assignment
  TObject::operator=(src);

  // assignment operator
  fFirst = src.fFirst;
  fSecond = src.fSecond;
  fValidity = src.fValidity;
  
  return *this;
}
//_____________________________________________________________________________
Int_t AliMpIntPair::Compare(const TObject* obj) const
{
/// Compare using operator <

  const AliMpIntPair* pair = dynamic_cast<const AliMpIntPair*>(obj);
  if ( !pair ) {
    AliErrorStream() << "Wrong object type." << endl;
    return -1;
  }  

  return ( *this < *pair ) ? -1 : 1;
}
//_____________________________________________________________________________
void AliMpIntPair::operator += (const AliMpIntPair& op)
{
/// Incrementation operator

  fFirst += op.fFirst;
  fSecond += op.fSecond;
  
  // operation only on valid pairs
  fValidity = fValidity && op.fValidity;
}
//_____________________________________________________________________________
void AliMpIntPair::operator -= (const AliMpIntPair& op)
{
/// Decrementation operator

  fFirst -= op.fFirst;
  fSecond -= op.fSecond;

  // operation only on valid pairs
  fValidity = fValidity && op.fValidity;
}

//_____________________________________________________________________________
AliMpIntPair operator-(const AliMpIntPair& op1,const AliMpIntPair& op2)
{
/// Substraction operator

  return AliMpIntPair(op1.GetFirst()-op2.GetFirst(),
                  op1.GetSecond()-op2.GetSecond(),
		  op1.IsValid() && op2.IsValid());
}
//_____________________________________________________________________________
AliMpIntPair operator+(const AliMpIntPair& op1,const AliMpIntPair& op2)
{
/// Addition operator

  return AliMpIntPair(op1.GetFirst()+op2.GetFirst(),
                  op1.GetSecond()+op2.GetSecond(),
		  op1.IsValid() && op2.IsValid());
}
//_____________________________________________________________________________
AliMpIntPair operator*(const AliMpIntPair& op1,const AliMpIntPair& op2)
{
/// Multiplication operator

  return AliMpIntPair(op1.GetFirst()*op2.GetFirst(),
                  op1.GetSecond()*op2.GetSecond(),
		  op1.IsValid() && op2.IsValid());
}
//_____________________________________________________________________________
ostream& operator<< (ostream &stream,const AliMpIntPair& op)
{
/// Output streaming

  if (op.IsValid()) {
    stream << '(';
    stream << op.GetFirst()<<','<<op.GetSecond()<<')';
    return stream;
  }  
  else { 
    stream << "AliMpIntPair::Invalid";
    return stream;
  }  
}

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