12 #ifndef ROOT_XrdProofGroup 
   13 #define ROOT_XrdProofGroup 
   27 #include "XrdOuc/XrdOucHash.hh" 
   28 #include "XrdOuc/XrdOucString.hh" 
   34 class XrdProofGroupMember {
 
   40    XrdProofGroupMember(
const char *n) : fName(n) { fActive = 0; }
 
   41    virtual ~XrdProofGroupMember() { }
 
   43    int           Active()
 const { 
return fActive; }
 
   44    void          Count(
int n) { fActive += n; }
 
   45    const char   *Name()
 const { 
return fName.c_str(); }
 
   49 friend class XrdProofGroupMgr;
 
   53    XrdOucString  fMembers; 
 
   55    XrdOucHash<XrdProofGroupMember> fActives;  
 
   62    XrdSysRecMutex *fMutex; 
 
   64    void          AddMember(
const char *usr) { XrdSysMutexHelper mhp(fMutex);
 
   65                                               fMembers += usr; fMembers += 
","; fSize++; }
 
   66    XrdProofGroup(
const char *n, 
const char *m = 0);
 
   71    int           Active(
const char *usr = 0);
 
   72    bool          HasMember(
const char *usr);
 
   74    inline const char *Members()
 const { XrdSysMutexHelper mhp(fMutex); 
return fMembers.c_str(); }
 
   75    inline const char *Name()
 const { XrdSysMutexHelper mhp(fMutex); 
return fName.c_str(); }
 
   76    inline int    Size()
 const { XrdSysMutexHelper mhp(fMutex); 
return fSize; }
 
   78    inline int    Fraction()
 const { XrdSysMutexHelper mhp(fMutex); 
return fFraction; }
 
   79    inline float  FracEff()
 const { XrdSysMutexHelper mhp(fMutex); 
return fFracEff; }
 
   80    inline float  Priority()
 const { XrdSysMutexHelper mhp(fMutex); 
return fPriority; }
 
   81    void          SetFracEff(
float f) { XrdSysMutexHelper mhp(fMutex); fFracEff = f; }
 
   82    void          SetFraction(
int f) { XrdSysMutexHelper mhp(fMutex); fFraction = f; }
 
   83    void          SetPriority(
float p) { XrdSysMutexHelper mhp(fMutex); fPriority = p; }
 
   85    void          Count(
const char *usr, 
int n = 1);
 
   93 class XrdProofGroupMgr {
 
   95    XrdOucString              fIterator; 
 
   96    XrdOucHash<XrdProofGroup> fGroups;  
 
   97    XrdSysRecMutex            fMutex;   
 
   99    XrdProofdFile             fCfgFile; 
 
  100    XrdProofdFile             fPriorityFile; 
 
  102    int           ParseInfoFrom(
const char *fn);
 
  105    XrdProofGroupMgr(
const char *fn = 0);
 
  106    ~XrdProofGroupMgr() { }
 
  108    int            Config(
const char *fn);
 
  110    int            ReadPriorities();
 
  111    int            SetEffectiveFractions(
bool optprio);
 
  113    XrdProofGroup *Apply(
int (*f)(
const char *, XrdProofGroup *, 
void *), 
void *arg);
 
  115    XrdOucString   Export(
const char *grp);
 
  116    int            Num() { 
return fGroups.Num(); }
 
  117    void           Print(
const char *grp);
 
  119    XrdProofGroup *GetGroup(
const char *grp);
 
  120    XrdProofGroup *GetUserGroup(
const char *usr, 
const char *grp = 0);
 
  122    const char    *GetCfgFile()
 const { 
return fCfgFile.fName.c_str(); }
 
  125    void           ResetIter() { fIterator = 
"getnextgrp:"; }
 
  126    XrdProofGroup *Next();
 
  139    XpdGroupGlobal_t *glo;