ROOT logo
//////////////////////////////////////////////////////////////////////////////
//
// $Id: $
//
//*-- Author  : Witold Przygoda (przygoda@psja1.if.uj.edu.pl)
//*-- Revised : Martin Jurkovic <martin.jurkovic@ph.tum.de> 2010
//
//_HADES_CLASS_DESCRIPTION
//////////////////////////////////////////////////////////////////////////////
//
//  HRichPadGraph
//
//  This class contains graph definition used in pad labeling.
//
//////////////////////////////////////////////////////////////////////////////


#include "hrichpadgraph.h"

#include "TBuffer.h"

#include <iomanip>
#include <iostream>

using namespace std;

ClassImp(HRichPadGraph)

//----------------------------------------------------------------------------
HRichPadGraph::HRichPadGraph()
{
   iNodeListLen = 0;
   iNodeNr = 0;
   iLinkNodeNr = 0;
   iLabel = 0;
   pNodeList = NULL;
}
//============================================================================

//----------------------------------------------------------------------------
HRichPadGraph::~HRichPadGraph()
{
   if (pNodeList) {
      delete [] pNodeList;
      pNodeList = NULL;
   }
}
//============================================================================

//----------------------------------------------------------------------------
HRichPadGraph::HRichPadGraph(const HRichPadGraph& source):TObject(source)
{
   iNodeListLen = source.iNodeListLen;
   iNodeNr = source.iNodeNr;
   iLinkNodeNr = source.iLinkNodeNr;
   iLabel = source.iLabel;
   if (pNodeList) delete [] pNodeList;
   if (source.pNodeList) {
      pNodeList = new HRichPadGraph*[iNodeListLen];
      for (Int_t i = 0; i < iNodeListLen; i++) pNodeList[i] = source.pNodeList[i];
   } else pNodeList = NULL;
}
//============================================================================

//----------------------------------------------------------------------------
HRichPadGraph& HRichPadGraph::operator=(const HRichPadGraph& source)
{
   if (this != &source) {
      iNodeNr = source.iNodeNr;
      iLinkNodeNr = source.iLinkNodeNr;
      iLabel = source.iLabel;
      if (source.pNodeList == NULL) {
         if (pNodeList) delete [] pNodeList;
         pNodeList = NULL;
      } else if (iNodeListLen == source.iNodeListLen) {
         for (Int_t i = 0; i < iNodeListLen; i++) pNodeList[i] = source.pNodeList[i];
      } else if (iNodeListLen == 0) {
         pNodeList = new HRichPadGraph*[source.iNodeListLen];
         for (Int_t i = 0; i < source.iNodeListLen; i++) pNodeList[i] = source.pNodeList[i];
      } else {
         delete [] pNodeList;
         pNodeList = new HRichPadGraph*[source.iNodeListLen];
         for (Int_t i = 0; i < source.iNodeListLen; i++) pNodeList[i] = source.pNodeList[i];
      }
      iNodeListLen = source.iNodeListLen;
   }

   return *this;
}
//============================================================================

//----------------------------------------------------------------------------
void HRichPadGraph::Streamer(TBuffer &R__b)
{
// Stream an object of class HRichPadGraph.

   if (R__b.IsReading()) {
      Version_t R__v = R__b.ReadVersion();
      if (R__v) { }
      TObject::Streamer(R__b);
      R__b >> iNodeListLen;
      R__b >> iNodeNr;
      R__b >> iLinkNodeNr;
      R__b >> iLabel;
      pNodeList = new HRichPadGraph*[iNodeListLen];
      R__b.ReadFastArray((Long_t *)pNodeList, iNodeListLen);
      //R__b.ReadArray(pNodeList);
   } else {
      R__b.WriteVersion(HRichPadGraph::IsA());
      TObject::Streamer(R__b);
      R__b << iNodeListLen;
      R__b << iNodeNr;
      R__b << iLinkNodeNr;
      R__b << iLabel;
      R__b.WriteFastArray((const Long_t *)pNodeList, iNodeListLen);
      //R__b.WriteArray(pNodeList, __COUNTER__);
   }
}
//============================================================================

//----------------------------------------------------------------------------
void HRichPadGraph::InitGraph(Int_t nodenr, Int_t listlen)
{
   iNodeNr = nodenr;
   iNodeListLen = listlen;
   iLinkNodeNr = 0;
   iLabel = 0;
   if (iNodeListLen > 0) pNodeList = new HRichPadGraph*[iNodeListLen];
}
//============================================================================

//----------------------------------------------------------------------------
void HRichPadGraph::AddNode(HRichPadGraph* nodeptr)
{
// warning: there is no control of array range
   pNodeList[iLinkNodeNr++] = nodeptr;
}
//============================================================================

//----------------------------------------------------------------------------
Int_t HRichPadGraph::MarkNodes(Int_t labelnr)
{
   if (iLabel) return 0;
   iLabel = labelnr + 1;
   for (Int_t i = 0; i < iLinkNodeNr; i++) pNodeList[i]->MarkNodes(labelnr);

   return 1;
}
//============================================================================


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