Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RooCatType.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * Package: RooFitCore *
4  * File: $Id: RooCatType.h,v 1.20 2007/05/11 09:11:30 verkerke Exp $
5  * Authors: *
6  * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7  * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8  * *
9  * Copyright (c) 2000-2005, Regents of the University of California *
10  * and Stanford University. All rights reserved. *
11  * *
12  * Redistribution and use in source and binary forms, *
13  * with or without modification, are permitted according to the terms *
14  * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15  *****************************************************************************/
16 #ifndef ROO_CAT_TYPE
17 #define ROO_CAT_TYPE
18 
19 #include "TObject.h"
20 #include "RooPrintable.h"
21 
22 class RooCatType : public TObject, public RooPrintable {
23 public:
24  inline RooCatType() : TObject(), RooPrintable() {
25  // Default constructor
26  _value = 0 ; _label[0] = 0 ;
27  }
28 
29  inline RooCatType(const char* name, Int_t value) : TObject(), RooPrintable(), _value(value) {
30  // Constructor with state name and index value
31  SetName(name) ;
32  }
33  inline RooCatType(const RooCatType& other) :
34  TObject(other), RooPrintable(other), _value(other._value) {
35  // Copy constructor
36  strlcpy(_label,other._label,256) ;
37  } ;
38 
39  virtual ~RooCatType() {
40  // Destructor
41  } ;
42  virtual TObject* Clone(const char*) const { return new RooCatType(*this); }
43 
44  virtual const Text_t* GetName() const {
45  // Return state name
46  return _label[0] ? _label : 0 ;
47  }
48  void SetName(const Text_t* name) ;
49 
50  inline RooCatType& operator=(const RooCatType& other) {
51  // Assignment operator from other RooCatType
52  if (&other==this) return *this ;
53  //SetName(other.GetName()) ;
54  _label[0] = 0 ;
55  _value = other._value ;
56  return *this ; }
57 
58  inline void assignFast(const RooCatType& other) {
59  // Fast assignment operator from other RooCatType
60  _label[0] = 0 ;
61  _value = other._value ;
62  }
63 
64  inline Bool_t operator==(const RooCatType& other) const {
65  // Equality operator with other RooCatType
66  return (_value==other._value) ;
67  }
68 
69  inline Bool_t operator==(Int_t index) const {
70  // Return true if index value matches integer
71  return (_value==index) ;
72  }
73 
74  Bool_t operator==(const char* label) const {
75  // Return true if state name matchins string
76  return label && !strcmp(_label,label) ;
77  }
78 
79  inline Int_t getVal() const {
80  // Return index value
81  return _value ;
82  }
83  void setVal(Int_t newValue) {
84  // Set index value
85  _value = newValue ;
86  }
87 
88  virtual void printName(std::ostream& os) const ;
89  virtual void printTitle(std::ostream& os) const ;
90  virtual void printClassName(std::ostream& os) const ;
91  virtual void printValue(std::ostream& os) const ;
92 
93  inline virtual void Print(Option_t *options= 0) const {
94  // Printing interface
95  printStream(defaultPrintStream(),defaultPrintContents(options),defaultPrintStyle(options));
96  }
97 
98 protected:
99 
100  friend class RooAbsCategoryLValue ;
101  friend class RooAbsCategory ;
102  Int_t _value ; // Index value
103  char _label[256] ; // State name
104 
105  ClassDef(RooCatType,1) // Category state, (name,index) pair
106 } ;
107 
108 
109 #endif
110