// @(#):$Id$
// Author: Andrei Gheata   07/02/2012

/*************************************************************************
 * 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.             *
 *************************************************************************/

#include "TGeoStateInfo.h"
#include "TGeoNode.h"
#include "TGeoPolygon.h"
#include "TGeoManager.h"

ClassImp(TGeoStateInfo)
//_____________________________________________________________________________
TGeoStateInfo::TGeoStateInfo(Int_t maxdaughters)
              :fNode(0),
               fAsmCurrent(0),
               fAsmNext(0),
               fDivCurrent(0),
               fDivNext(0),
               fDivTrans(),
               fDivRot(),
               fDivCombi(),
               fVoxNcandidates(0),
               fVoxCurrent(0),
               fVoxCheckList(0),
               fVoxBits1(0),
               fBoolSelected(0),
               fXtruSeg(0),
               fXtruIz(0),
               fXtruXc(0),
               fXtruYc(0),
               fXtruPoly(0)
{
// Constructor
   Int_t maxDaughters = (maxdaughters>0) ? maxdaughters : TGeoManager::GetMaxDaughters();
   Int_t maxXtruVert  = TGeoManager::GetMaxXtruVert();
   fVoxCheckList = new Int_t[maxDaughters];
   fVoxBits1 = new UChar_t[2 + ((maxDaughters-1)>>3)];
   fXtruXc = new Double_t[maxXtruVert];
   fXtruYc = new Double_t[maxXtruVert];
   fVoxSlices[0] = fVoxSlices[1] = fVoxSlices[2] = -1;
   fVoxInc[0] = fVoxInc[1] = fVoxInc[2] = 0;
   fVoxInvdir[0] = fVoxInvdir[1] = fVoxInvdir[2] = 0;
   fVoxLimits[0] = fVoxLimits[1] = fVoxLimits[2] = 0;
}

//_____________________________________________________________________________
TGeoStateInfo::~TGeoStateInfo()
{
// Destructor
   delete [] fVoxCheckList;
   delete [] fVoxBits1;
   delete [] fXtruXc;
   delete [] fXtruYc;
}

//_____________________________________________________________________________
TGeoStateInfo::TGeoStateInfo(const TGeoStateInfo &other)
              :fNode(other.fNode),
               fAsmCurrent(other.fAsmCurrent),
               fAsmNext(other.fAsmNext),
               fDivCurrent(other.fDivCurrent),
               fDivNext(other.fDivNext),
               fDivTrans(other.fDivTrans),
               fDivRot(other.fDivRot),
               fDivCombi(other.fDivCombi),
               fVoxNcandidates(other.fVoxNcandidates),
               fVoxCurrent(other.fVoxCurrent),
               fVoxCheckList(0),
               fVoxBits1(0),
               fBoolSelected(other.fBoolSelected),
               fXtruSeg(other.fXtruSeg),
               fXtruIz(other.fXtruIz),
               fXtruXc(0),
               fXtruYc(0),
               fXtruPoly(other.fXtruPoly)
{
// Copy constructor.
   Int_t maxDaughters = TGeoManager::GetMaxDaughters();
   Int_t maxXtruVert  = TGeoManager::GetMaxXtruVert();
   fVoxCheckList = new Int_t[maxDaughters];
   fVoxBits1 = new UChar_t[1 + ((maxDaughters-1)>>3)];
   fXtruXc = new Double_t[maxXtruVert];
   fXtruYc = new Double_t[maxXtruVert];
   fVoxSlices[0] = fVoxSlices[1] = fVoxSlices[2] = -1;
   fVoxInc[0] = fVoxInc[1] = fVoxInc[2] = 0;
   fVoxInvdir[0] = fVoxInvdir[1] = fVoxInvdir[2] = 0;
   fVoxLimits[0] = fVoxLimits[1] = fVoxLimits[2] = 0;
}

//_____________________________________________________________________________
TGeoStateInfo &TGeoStateInfo::operator=(const TGeoStateInfo &other)
{
// Assignment
   if (this==&other) return *this;
   fNode = other.fNode;
   fAsmCurrent = other.fAsmCurrent;
   fAsmNext = other.fAsmNext;
   fDivCurrent = other.fDivCurrent;
   fDivNext = other.fDivNext;
   fDivTrans = other.fDivTrans;
   fDivRot = other.fDivRot;
   fDivCombi = other.fDivCombi;
   fVoxNcandidates = other.fVoxNcandidates;
   fVoxCurrent = other.fVoxCurrent;
   fVoxCheckList = other.fVoxCheckList;
   fVoxBits1 = other.fVoxBits1;
   fBoolSelected = other.fBoolSelected;
   fXtruSeg = other.fXtruSeg;
   fXtruIz = other.fXtruIz;
   fXtruXc = other.fXtruXc;
   fXtruYc = other.fXtruYc;
   fXtruPoly = other.fXtruPoly;
   fVoxSlices[0] = fVoxSlices[1] = fVoxSlices[2] = -1;
   fVoxInc[0] = fVoxInc[1] = fVoxInc[2] = 0;
   fVoxInvdir[0] = fVoxInvdir[1] = fVoxInvdir[2] = 0;
   fVoxLimits[0] = fVoxLimits[1] = fVoxLimits[2] = 0;
   return *this;
}
 TGeoStateInfo.cxx:1
 TGeoStateInfo.cxx:2
 TGeoStateInfo.cxx:3
 TGeoStateInfo.cxx:4
 TGeoStateInfo.cxx:5
 TGeoStateInfo.cxx:6
 TGeoStateInfo.cxx:7
 TGeoStateInfo.cxx:8
 TGeoStateInfo.cxx:9
 TGeoStateInfo.cxx:10
 TGeoStateInfo.cxx:11
 TGeoStateInfo.cxx:12
 TGeoStateInfo.cxx:13
 TGeoStateInfo.cxx:14
 TGeoStateInfo.cxx:15
 TGeoStateInfo.cxx:16
 TGeoStateInfo.cxx:17
 TGeoStateInfo.cxx:18
 TGeoStateInfo.cxx:19
 TGeoStateInfo.cxx:20
 TGeoStateInfo.cxx:21
 TGeoStateInfo.cxx:22
 TGeoStateInfo.cxx:23
 TGeoStateInfo.cxx:24
 TGeoStateInfo.cxx:25
 TGeoStateInfo.cxx:26
 TGeoStateInfo.cxx:27
 TGeoStateInfo.cxx:28
 TGeoStateInfo.cxx:29
 TGeoStateInfo.cxx:30
 TGeoStateInfo.cxx:31
 TGeoStateInfo.cxx:32
 TGeoStateInfo.cxx:33
 TGeoStateInfo.cxx:34
 TGeoStateInfo.cxx:35
 TGeoStateInfo.cxx:36
 TGeoStateInfo.cxx:37
 TGeoStateInfo.cxx:38
 TGeoStateInfo.cxx:39
 TGeoStateInfo.cxx:40
 TGeoStateInfo.cxx:41
 TGeoStateInfo.cxx:42
 TGeoStateInfo.cxx:43
 TGeoStateInfo.cxx:44
 TGeoStateInfo.cxx:45
 TGeoStateInfo.cxx:46
 TGeoStateInfo.cxx:47
 TGeoStateInfo.cxx:48
 TGeoStateInfo.cxx:49
 TGeoStateInfo.cxx:50
 TGeoStateInfo.cxx:51
 TGeoStateInfo.cxx:52
 TGeoStateInfo.cxx:53
 TGeoStateInfo.cxx:54
 TGeoStateInfo.cxx:55
 TGeoStateInfo.cxx:56
 TGeoStateInfo.cxx:57
 TGeoStateInfo.cxx:58
 TGeoStateInfo.cxx:59
 TGeoStateInfo.cxx:60
 TGeoStateInfo.cxx:61
 TGeoStateInfo.cxx:62
 TGeoStateInfo.cxx:63
 TGeoStateInfo.cxx:64
 TGeoStateInfo.cxx:65
 TGeoStateInfo.cxx:66
 TGeoStateInfo.cxx:67
 TGeoStateInfo.cxx:68
 TGeoStateInfo.cxx:69
 TGeoStateInfo.cxx:70
 TGeoStateInfo.cxx:71
 TGeoStateInfo.cxx:72
 TGeoStateInfo.cxx:73
 TGeoStateInfo.cxx:74
 TGeoStateInfo.cxx:75
 TGeoStateInfo.cxx:76
 TGeoStateInfo.cxx:77
 TGeoStateInfo.cxx:78
 TGeoStateInfo.cxx:79
 TGeoStateInfo.cxx:80
 TGeoStateInfo.cxx:81
 TGeoStateInfo.cxx:82
 TGeoStateInfo.cxx:83
 TGeoStateInfo.cxx:84
 TGeoStateInfo.cxx:85
 TGeoStateInfo.cxx:86
 TGeoStateInfo.cxx:87
 TGeoStateInfo.cxx:88
 TGeoStateInfo.cxx:89
 TGeoStateInfo.cxx:90
 TGeoStateInfo.cxx:91
 TGeoStateInfo.cxx:92
 TGeoStateInfo.cxx:93
 TGeoStateInfo.cxx:94
 TGeoStateInfo.cxx:95
 TGeoStateInfo.cxx:96
 TGeoStateInfo.cxx:97
 TGeoStateInfo.cxx:98
 TGeoStateInfo.cxx:99
 TGeoStateInfo.cxx:100
 TGeoStateInfo.cxx:101
 TGeoStateInfo.cxx:102
 TGeoStateInfo.cxx:103
 TGeoStateInfo.cxx:104
 TGeoStateInfo.cxx:105
 TGeoStateInfo.cxx:106
 TGeoStateInfo.cxx:107
 TGeoStateInfo.cxx:108
 TGeoStateInfo.cxx:109
 TGeoStateInfo.cxx:110
 TGeoStateInfo.cxx:111
 TGeoStateInfo.cxx:112
 TGeoStateInfo.cxx:113
 TGeoStateInfo.cxx:114
 TGeoStateInfo.cxx:115
 TGeoStateInfo.cxx:116
 TGeoStateInfo.cxx:117
 TGeoStateInfo.cxx:118
 TGeoStateInfo.cxx:119
 TGeoStateInfo.cxx:120
 TGeoStateInfo.cxx:121
 TGeoStateInfo.cxx:122
 TGeoStateInfo.cxx:123
 TGeoStateInfo.cxx:124