// @(#)root/meta:$Id$
// Author: Bianca-Cristina Cristescu   09/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.             *
 *************************************************************************/

#ifndef ROOT_TEnum
#define ROOT_TEnum

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TEnum                                                                //
//                                                                      //
// TEnum class defines enum type.                                       //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TNamed
#include "TNamed.h"
#endif
#ifndef ROOT_THashList
#include "THashList.h"
#endif
#ifndef ROOT_TString
#include "TString.h"
#endif
#ifndef ROOT_TDictionary
#include "TDictionary.h"
#endif



class TClass;
class TEnumConstant;

class TEnum : public TDictionary {

private:
   THashList fConstantList;     //list of constants the enum type
   void*     fInfo;             //interpreter implementation provided declaration
   TClass*   fClass;            //owning class

public:

   TEnum(): fInfo(0) {}
   TEnum(const char* name, void* info, TClass* cls);
   virtual ~TEnum();

   void                  AddConstant(TEnumConstant* constant);
   TClass*               GetClass() const { return fClass; }
   const TSeqCollection* GetConstants() const { return &fConstantList; }
   const TEnumConstant*  GetConstant(const char* name) const {
      return (TEnumConstant*) fConstantList.FindObject(name);
   }
   DeclId_t              GetDeclId() const { return (DeclId_t)fInfo; }
   Bool_t                IsValid();
   Long_t                Property() const;
   void                  Update(DeclId_t id);

   ClassDef(TEnum,2)  //Enum type class
};

#endif
 TEnum.h:1
 TEnum.h:2
 TEnum.h:3
 TEnum.h:4
 TEnum.h:5
 TEnum.h:6
 TEnum.h:7
 TEnum.h:8
 TEnum.h:9
 TEnum.h:10
 TEnum.h:11
 TEnum.h:12
 TEnum.h:13
 TEnum.h:14
 TEnum.h:15
 TEnum.h:16
 TEnum.h:17
 TEnum.h:18
 TEnum.h:19
 TEnum.h:20
 TEnum.h:21
 TEnum.h:22
 TEnum.h:23
 TEnum.h:24
 TEnum.h:25
 TEnum.h:26
 TEnum.h:27
 TEnum.h:28
 TEnum.h:29
 TEnum.h:30
 TEnum.h:31
 TEnum.h:32
 TEnum.h:33
 TEnum.h:34
 TEnum.h:35
 TEnum.h:36
 TEnum.h:37
 TEnum.h:38
 TEnum.h:39
 TEnum.h:40
 TEnum.h:41
 TEnum.h:42
 TEnum.h:43
 TEnum.h:44
 TEnum.h:45
 TEnum.h:46
 TEnum.h:47
 TEnum.h:48
 TEnum.h:49
 TEnum.h:50
 TEnum.h:51
 TEnum.h:52
 TEnum.h:53
 TEnum.h:54
 TEnum.h:55
 TEnum.h:56
 TEnum.h:57
 TEnum.h:58
 TEnum.h:59
 TEnum.h:60
 TEnum.h:61
 TEnum.h:62
 TEnum.h:63
 TEnum.h:64
 TEnum.h:65
 TEnum.h:66
 TEnum.h:67
 TEnum.h:68