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


//-----------------------------------------------------------------------------
/// \class AliMpSlatMotifMap
//
/// Basically this class provide a garbage collection of AliMpMotif and
/// AliMpMotifType objects.
///
///
/// \author Laurent Aphecetche
//-----------------------------------------------------------------------------


// $Id$

#include "AliMpSlatMotifMap.h"

#include "AliMpVMotif.h"
#include "AliMpMotifType.h"
#include "AliLog.h"
#include "TList.h"
#include "TObjString.h"
#include "TString.h"
#include "Riostream.h"

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

//_____________________________________________________________________________
AliMpSlatMotifMap::AliMpSlatMotifMap()
: TObject(),
fMotifs(),
fMotifTypes()
{
  /// ctor
  fMotifs.SetOwner(kTRUE);
  fMotifTypes.SetOwner(kTRUE);
}

//_____________________________________________________________________________
AliMpSlatMotifMap::~AliMpSlatMotifMap()
{
  /// dtor
  Reset();
}

//_____________________________________________________________________________
void
AliMpSlatMotifMap::Reset()
{
  /// Clear
  fMotifs.DeleteAll();
  fMotifTypes.DeleteAll();
}

//_____________________________________________________________________________
Bool_t 
AliMpSlatMotifMap::AddMotif(AliMpVMotif* motif, Bool_t warn)
{
  /// Add a motif to the map
  AliDebug(1,Form("Adding motif %s",motif->GetID().Data()));
  
  AliMpVMotif* found = FindMotif(motif->GetID());
  if (found) {    
    if (warn && found == motif) 
    {
      AliWarning(Form("The motif %s is already in map",motif->GetID().Data()));
    }
    if (warn && found != motif) 
    {
      AliError(Form("Another motif with the same ID=%s is already in map",
                    motif->GetID().Data()));
    }	     
    return false;
  }  
  
  fMotifs.Add(new TObjString(motif->GetID()),motif);
  return true;
}

//_____________________________________________________________________________
Bool_t 
AliMpSlatMotifMap::AddMotifType(AliMpMotifType* motifType, Bool_t warn)
{
  /// Add a motif to the map

  AliDebug(1,Form("Adding motifType %s",motifType->GetID().Data()));

  AliMpMotifType* found = FindMotifType(motifType->GetID());
  if (found) {    
    if (warn && found == motifType) 
    {
      AliWarning(Form("The motifType %s is already in map",
                      motifType->GetID().Data()));
    }
    if (warn && found != motifType)   
    {
      AliError(Form("Another motifType with the same ID=%s is already in map",
                    motifType->GetID().Data()));
    }	     
    return false;
  }  
  
  fMotifTypes.Add(new TObjString(motifType->GetID()),motifType);
  return true;
  
}

//_____________________________________________________________________________
AliMpVMotif* 
AliMpSlatMotifMap::FindMotif(const TString& id) const
{
  /// Search a given motif in the map and returns it if it's there.
  
  AliDebug(1,Form("Looking for motif %s",id.Data()));
  
  TObject* object = fMotifs.GetValue(id.Data());
  
  if (object)
  {
    AliMpVMotif* motif = static_cast<AliMpVMotif*>(object);
    AliDebug(1,Form("Found : %p id=%s",motif,motif->GetID().Data()));
    return motif;
  }
  AliDebug(1,"Not found");
  return 0x0;
}

//_____________________________________________________________________________
AliMpMotifType* 
AliMpSlatMotifMap::FindMotifType(const TString& id) const
{
  /// Search a given motifType in the map and returns it if it's there.
  AliDebug(1,Form("Looking for motifType %s",id.Data()));
  
  TObject* object = fMotifTypes.GetValue(id.Data());
  
  if (object)
  {
    AliMpMotifType* motifType = static_cast<AliMpMotifType*>(object);
    AliDebug(1,Form("Found : %p id=%s",motifType,motifType->GetID().Data()));
    return motifType;
  }
  AliDebug(1,"Not found");
  return 0x0;
  
}

//_____________________________________________________________________________
void
AliMpSlatMotifMap::Print(Option_t*) const
{
  /// printout
  cout << "Motifs=" << endl;
  TObject* key;
  TIter next(&fMotifs);
  while ( ( key = next() ) ) 
  {
    AliMpVMotif* motif = dynamic_cast<AliMpVMotif*>(fMotifs.GetValue(key));
    if (motif) cout << motif->GetID() << endl;
  }

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