// @(#)root/meta:$Id:$
// Author: Bianca-Cristina Cristescu   03/07/13

/*************************************************************************
 * Copyright (C) 1995-2013, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
//  The ROOT oject has a list of properties which are stored and        //
//  retrieved using TDictAttributeMap.                                  //
//  TDictAttributeMap maps the property keys of the object to their     //
//  values.                                                             //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TDictAttributeMap.h"
#include "THashTable.h"
#include "TNamed.h"
#include "TParameter.h"


ClassImp(TDictAttributeMap)

//_____________________________________________________________________________
TDictAttributeMap::TDictAttributeMap()
{
   //Default constructor.
   fStringProperty.SetOwner(kTRUE);
}

//_____________________________________________________________________________
TDictAttributeMap::~TDictAttributeMap()
{
   //Default destructor.
}

//_____________________________________________________________________________
void TDictAttributeMap::AddProperty(const char* key, const char* value)
{
   //Add a property with a String value to the TDictAttributeMap.
   //Parameters: key and char* value of the property.

   //Add the property pair name - Int value to the hash table.
   fStringProperty.Add(new TNamed(key, value));
}

//_____________________________________________________________________________
Bool_t TDictAttributeMap::HasKey(const char* key) const
{

   //Check whether the class has a property using the key.

   if (fStringProperty.FindObject(key))
      return true;
   return false;
}

//_____________________________________________________________________________
const char* TDictAttributeMap::GetPropertyAsString(const char* key) const
{
   //Access the value of a String property using the key.

   //Copy object into found to avoid calling the function two times.
   TObject* found = fStringProperty.FindObject(key);
   if(found)
      return found->GetTitle();
   else
      //Show an error message if the key is not found.
      Error("GetPropertyAsString"
      , "Could not find property with String value for this key: %s", key);
   return 0;
}

//_____________________________________________________________________________
TString TDictAttributeMap::RemovePropertyString(const char* key)
{
   //Remove a String property from the attribute map specified by the key.
   //Returns the TString property removed or NULL if the property does not exist.

   TObject *property = fStringProperty.FindObject(key);
   if (property) {
      fStringProperty.Remove(property);
      return property->GetTitle();
   }
   return TString(0);
}

Bool_t TDictAttributeMap::RemoveProperty(const char* key)
{
   //Remove a property from the attribute map specified by the key.
   //Returns true if property exists and was removed, false if property
   //does not exist.

   if (TObject *property = fStringProperty.FindObject(key)) {
      fStringProperty.Remove(property);
      return true;
   }
   return false;
}

//_____________________________________________________________________________
void TDictAttributeMap::Clear(Option_t* /*option = ""*/)
{
   //Deletes all the properties of the class.

   fStringProperty.Delete();
}
 TDictAttributeMap.cxx:1
 TDictAttributeMap.cxx:2
 TDictAttributeMap.cxx:3
 TDictAttributeMap.cxx:4
 TDictAttributeMap.cxx:5
 TDictAttributeMap.cxx:6
 TDictAttributeMap.cxx:7
 TDictAttributeMap.cxx:8
 TDictAttributeMap.cxx:9
 TDictAttributeMap.cxx:10
 TDictAttributeMap.cxx:11
 TDictAttributeMap.cxx:12
 TDictAttributeMap.cxx:13
 TDictAttributeMap.cxx:14
 TDictAttributeMap.cxx:15
 TDictAttributeMap.cxx:16
 TDictAttributeMap.cxx:17
 TDictAttributeMap.cxx:18
 TDictAttributeMap.cxx:19
 TDictAttributeMap.cxx:20
 TDictAttributeMap.cxx:21
 TDictAttributeMap.cxx:22
 TDictAttributeMap.cxx:23
 TDictAttributeMap.cxx:24
 TDictAttributeMap.cxx:25
 TDictAttributeMap.cxx:26
 TDictAttributeMap.cxx:27
 TDictAttributeMap.cxx:28
 TDictAttributeMap.cxx:29
 TDictAttributeMap.cxx:30
 TDictAttributeMap.cxx:31
 TDictAttributeMap.cxx:32
 TDictAttributeMap.cxx:33
 TDictAttributeMap.cxx:34
 TDictAttributeMap.cxx:35
 TDictAttributeMap.cxx:36
 TDictAttributeMap.cxx:37
 TDictAttributeMap.cxx:38
 TDictAttributeMap.cxx:39
 TDictAttributeMap.cxx:40
 TDictAttributeMap.cxx:41
 TDictAttributeMap.cxx:42
 TDictAttributeMap.cxx:43
 TDictAttributeMap.cxx:44
 TDictAttributeMap.cxx:45
 TDictAttributeMap.cxx:46
 TDictAttributeMap.cxx:47
 TDictAttributeMap.cxx:48
 TDictAttributeMap.cxx:49
 TDictAttributeMap.cxx:50
 TDictAttributeMap.cxx:51
 TDictAttributeMap.cxx:52
 TDictAttributeMap.cxx:53
 TDictAttributeMap.cxx:54
 TDictAttributeMap.cxx:55
 TDictAttributeMap.cxx:56
 TDictAttributeMap.cxx:57
 TDictAttributeMap.cxx:58
 TDictAttributeMap.cxx:59
 TDictAttributeMap.cxx:60
 TDictAttributeMap.cxx:61
 TDictAttributeMap.cxx:62
 TDictAttributeMap.cxx:63
 TDictAttributeMap.cxx:64
 TDictAttributeMap.cxx:65
 TDictAttributeMap.cxx:66
 TDictAttributeMap.cxx:67
 TDictAttributeMap.cxx:68
 TDictAttributeMap.cxx:69
 TDictAttributeMap.cxx:70
 TDictAttributeMap.cxx:71
 TDictAttributeMap.cxx:72
 TDictAttributeMap.cxx:73
 TDictAttributeMap.cxx:74
 TDictAttributeMap.cxx:75
 TDictAttributeMap.cxx:76
 TDictAttributeMap.cxx:77
 TDictAttributeMap.cxx:78
 TDictAttributeMap.cxx:79
 TDictAttributeMap.cxx:80
 TDictAttributeMap.cxx:81
 TDictAttributeMap.cxx:82
 TDictAttributeMap.cxx:83
 TDictAttributeMap.cxx:84
 TDictAttributeMap.cxx:85
 TDictAttributeMap.cxx:86
 TDictAttributeMap.cxx:87
 TDictAttributeMap.cxx:88
 TDictAttributeMap.cxx:89
 TDictAttributeMap.cxx:90
 TDictAttributeMap.cxx:91
 TDictAttributeMap.cxx:92
 TDictAttributeMap.cxx:93
 TDictAttributeMap.cxx:94
 TDictAttributeMap.cxx:95
 TDictAttributeMap.cxx:96
 TDictAttributeMap.cxx:97
 TDictAttributeMap.cxx:98
 TDictAttributeMap.cxx:99
 TDictAttributeMap.cxx:100
 TDictAttributeMap.cxx:101
 TDictAttributeMap.cxx:102
 TDictAttributeMap.cxx:103
 TDictAttributeMap.cxx:104
 TDictAttributeMap.cxx:105
 TDictAttributeMap.cxx:106
 TDictAttributeMap.cxx:107
 TDictAttributeMap.cxx:108
 TDictAttributeMap.cxx:109
 TDictAttributeMap.cxx:110
 TDictAttributeMap.cxx:111
 TDictAttributeMap.cxx:112