// @(#)root/meta:$Id$
// Author: Bianca-Cristina Cristescu   10/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 TEnum class implements the enum type.                            //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TEnum.h"
#include "TEnumConstant.h"
#include "TInterpreter.h"


ClassImp(TEnum)

//______________________________________________________________________________
TEnum::TEnum(const char* name, void* info, TClass* cls)
   :fInfo(info), fClass(cls)
{
   //Constructor for TEnum class.
   //It take the name of the TEnum type, specification if it is global
   //and interpreter info.
   //Constant List is owner if enum not on global scope (thus constants not
   //in TROOT::GetListOfGlobals).
   SetNameTitle(name, "An enum type");
   if (cls) {
      fConstantList.SetOwner(kTRUE);
   }
}

//______________________________________________________________________________
TEnum::~TEnum()
{
   //Destructor
}

//______________________________________________________________________________
void TEnum::AddConstant(TEnumConstant* constant)
{
   //Add a EnumConstant to the list of constants of the Enum Type.

   fConstantList.Add(constant);
}

//______________________________________________________________________________
Bool_t TEnum::IsValid()
{
   // Return true if this enum object is pointing to a currently
   // loaded enum.  If a enum is unloaded after the TEnum
   // is created, the TEnum will be set to be invalid.

   // Register the transaction when checking the validity of the object.
   if (!fInfo && UpdateInterpreterStateMarker()) {
      DeclId_t newId = gInterpreter->GetEnum(fClass, fName);
      if (newId) {
         Update(newId);
      }
      return newId != 0;
   }
   return fInfo != 0;
}

//______________________________________________________________________________
Long_t TEnum::Property() const
{
   // Get property description word. For meaning of bits see EProperty.

   return kIsEnum;
}

//______________________________________________________________________________
void TEnum::Update(DeclId_t id)
{
   fInfo = (void*)id;
}
 TEnum.cxx:1
 TEnum.cxx:2
 TEnum.cxx:3
 TEnum.cxx:4
 TEnum.cxx:5
 TEnum.cxx:6
 TEnum.cxx:7
 TEnum.cxx:8
 TEnum.cxx:9
 TEnum.cxx:10
 TEnum.cxx:11
 TEnum.cxx:12
 TEnum.cxx:13
 TEnum.cxx:14
 TEnum.cxx:15
 TEnum.cxx:16
 TEnum.cxx:17
 TEnum.cxx:18
 TEnum.cxx:19
 TEnum.cxx:20
 TEnum.cxx:21
 TEnum.cxx:22
 TEnum.cxx:23
 TEnum.cxx:24
 TEnum.cxx:25
 TEnum.cxx:26
 TEnum.cxx:27
 TEnum.cxx:28
 TEnum.cxx:29
 TEnum.cxx:30
 TEnum.cxx:31
 TEnum.cxx:32
 TEnum.cxx:33
 TEnum.cxx:34
 TEnum.cxx:35
 TEnum.cxx:36
 TEnum.cxx:37
 TEnum.cxx:38
 TEnum.cxx:39
 TEnum.cxx:40
 TEnum.cxx:41
 TEnum.cxx:42
 TEnum.cxx:43
 TEnum.cxx:44
 TEnum.cxx:45
 TEnum.cxx:46
 TEnum.cxx:47
 TEnum.cxx:48
 TEnum.cxx:49
 TEnum.cxx:50
 TEnum.cxx:51
 TEnum.cxx:52
 TEnum.cxx:53
 TEnum.cxx:54
 TEnum.cxx:55
 TEnum.cxx:56
 TEnum.cxx:57
 TEnum.cxx:58
 TEnum.cxx:59
 TEnum.cxx:60
 TEnum.cxx:61
 TEnum.cxx:62
 TEnum.cxx:63
 TEnum.cxx:64
 TEnum.cxx:65
 TEnum.cxx:66
 TEnum.cxx:67
 TEnum.cxx:68
 TEnum.cxx:69
 TEnum.cxx:70
 TEnum.cxx:71
 TEnum.cxx:72
 TEnum.cxx:73
 TEnum.cxx:74
 TEnum.cxx:75
 TEnum.cxx:76
 TEnum.cxx:77
 TEnum.cxx:78
 TEnum.cxx:79
 TEnum.cxx:80
 TEnum.cxx:81
 TEnum.cxx:82
 TEnum.cxx:83
 TEnum.cxx:84