ROOT logo
#ifndef ROOT_THaPrintOption
#define ROOT_THaPrintOption

//////////////////////////////////////////////////////////////////////////
//
// THaPrintOption
//
//////////////////////////////////////////////////////////////////////////

#include "Rtypes.h"

Option_t* const kPRINTLINE  = "LINE";
Option_t* const kPRINTSTATS = "STATS";

class THaPrintOption {
  
public:
  THaPrintOption();
  THaPrintOption( const char* string );
  THaPrintOption( const THaPrintOption& opt );
  THaPrintOption& operator=( const THaPrintOption& rhs );
  THaPrintOption& operator=( const char* rhs );
  virtual ~THaPrintOption();

  Int_t        GetNOptions()            const { return fNTokens; }
  const char*  GetOption( Int_t i = 0 ) const;
  Int_t        GetValue( Int_t i = 0 )  const;
  Bool_t       IsLine()                 const;
  const char*  Data() const { return fString; }
  operator const char*() const { return Data(); }
  const char* operator[]( Int_t i ) const { return GetOption(i); }
  const char* operator()( Int_t i ) const { return GetOption(i); }

protected:
  char*       fString;      //Pointer to local copy of string
  char*       fTokenStr;    //Copy of string parsed by strtok()
  Bool_t      fParsed;      //Indicator whether string has been parsed
  Int_t       fNTokens;     //Number of tokens
  char**      fTokens;      //Array of pointers to the tokens in the string
  Int_t*      fParam;       //Array of the parameter values in the string
  char*       fEmpty;       //Pointer to \0, returned by GetOption() if error

  virtual void  Parse();

  ClassDef(THaPrintOption,0)   //Utility class to handle option strings
};

//__________ inline functions _________________________________________________
inline
const char* THaPrintOption::GetOption( Int_t i ) const
{
  // Get i-th token from string. Tokens are delimited by blanks or commas.

  return ( i>=0 && i<fNTokens && fTokens ) ? fTokens[i] : fEmpty;
}

//_____________________________________________________________________________
inline
Int_t THaPrintOption::GetValue( Int_t i ) const
{
  // Get integer value of the i-th token from string. 
  // Example:  
  //
  // With "OPT,10,20,30" or "OPT 10 20 30", GetValue(2) returns 20.
  //

  return ( i>=0 && i<fNTokens && fParam ) ? fParam[i] : 0;
}

//_____________________________________________________________________________
inline
Bool_t THaPrintOption::IsLine() const
{
  // True if "opt" is a request for printing on a single line

  const char* opt = GetOption();
  return ( !strcmp( opt, kPRINTLINE ) || !strcmp( opt, kPRINTSTATS ));
}

#endif

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