/* Web Polygraph http://www.web-polygraph.org/
* (C) 2003-2006 The Measurement Factory
* Licensed under the Apache License, Version 2.0 */
#ifndef POLYGRAPH__LOGANALYZERS_STEX_H
#define POLYGRAPH__LOGANALYZERS_STEX_H
#include "xstd/String.h"
#include "base/StatPhaseRec.h"
class XmlNodes;
class PhaseInfo;
// an algorithm of extracting a particular named statistics out of
// cycle or phase stats record and describing/categorizing that statistics
class Stex {
public:
typedef TmSzStat StatPhaseRec::*AggrPtr;
typedef TmSzHistStat StatPhaseRec::*HistPtr;
typedef TmSzStat StatIntvlRec::*TracePtr;
public:
Stex(const String &aKey, const String &aName);
virtual ~Stex();
void parent(const Stex *aParent);
const String &key() const { return theKey; } // precise, for machine use
const String &name() const { return theName; } // imprecise, human-readable
const Stex *parent() const { return theParent; }
virtual const TmSzStat *aggr(const PhaseInfo &phase) const;
virtual const TmSzHistStat *hist(const PhaseInfo &) const { return 0; }
virtual const TmSzStat *trace(const StatIntvlRec &) const { return 0; }
virtual void describe(XmlNodes &nodes) const = 0;
protected:
void describeParent(XmlNodes &nodes) const;
protected:
String theKey;
String theName;
const Stex *theParent; // if we are a part of a 'larger' stats group
};
class HitsStex: public Stex {
public:
HitsStex(const String &aKey, const String &aName);
virtual const TmSzHistStat *hist(const PhaseInfo &phase) const;
virtual const TmSzStat *trace(const StatIntvlRec &rec) const;
virtual void describe(XmlNodes &nodes) const;
};
class MissesStex: public Stex {
public:
MissesStex(const String &aKey, const String &aName);
virtual const TmSzHistStat *hist(const PhaseInfo &phase) const;
virtual const TmSzStat *trace(const StatIntvlRec &rec) const;
virtual void describe(XmlNodes &nodes) const;
};
class HitMissesStex: public Stex {
public:
HitMissesStex(const String &aKey, const String &aName);
virtual const TmSzHistStat *hist(const PhaseInfo &phase) const;
virtual const TmSzStat *trace(const StatIntvlRec &rec) const;
protected:
mutable TmSzHistStat theXactHist;
mutable TmSzStat theXactAggr;
virtual void describe(XmlNodes &nodes) const;
};
class Ims200Stex: public Stex {
public:
Ims200Stex(const String &aKey, const String &aName);
virtual const TmSzStat *aggr(const PhaseInfo &phase) const;
virtual const TmSzHistStat *hist(const PhaseInfo &phase) const;
virtual void describe(XmlNodes &nodes) const;
protected:
mutable TmSzStat theXactAggr;
};
class Ims304Stex: public Stex {
public:
Ims304Stex(const String &aKey, const String &aName);
virtual const TmSzStat *aggr(const PhaseInfo &phase) const;
virtual const TmSzHistStat *hist(const PhaseInfo &phase) const;
virtual void describe(XmlNodes &nodes) const;
protected:
mutable TmSzStat theXactAggr;
};
class ImsStex: public Stex {
public:
ImsStex(const String &aKey, const String &aName);
virtual const TmSzHistStat *hist(const PhaseInfo &phase) const;
virtual const TmSzStat *trace(const StatIntvlRec &rec) const;
virtual void describe(XmlNodes &nodes) const;
protected:
mutable TmSzHistStat theXactHist;
mutable TmSzStat theXactAggr;
};
class CachableStex: public Stex {
public:
CachableStex(const String &aKey, const String &aName);
virtual const TmSzStat *trace(const StatIntvlRec &rec) const;
virtual void describe(XmlNodes &nodes) const;
};
class UnCachableStex: public Stex {
public:
UnCachableStex(const String &aKey, const String &aName);
virtual const TmSzStat *trace(const StatIntvlRec &rec) const;
virtual void describe(XmlNodes &nodes) const;
};
class AllCachableStex: public Stex {
public:
AllCachableStex(const String &aKey, const String &aName);
virtual const TmSzStat *trace(const StatIntvlRec &rec) const;
virtual void describe(XmlNodes &nodes) const;
protected:
mutable TmSzStat theXactAggr;
};
class FillStex: public Stex {
public:
FillStex(const String &aKey, const String &aName);
virtual const TmSzStat *trace(const StatIntvlRec &rec) const;
virtual void describe(XmlNodes &nodes) const;
};
class SimpleStex: public Stex {
public:
SimpleStex(const String &aKey, const String &aName, HistPtr aHist, TracePtr aTrace);
virtual const TmSzHistStat *hist(const PhaseInfo &phase) const;
virtual const TmSzStat *trace(const StatIntvlRec &rec) const;
virtual void describe(XmlNodes &nodes) const;
protected:
HistPtr theHist;
TracePtr theTrace;
};
class AllMethodsStex: public Stex {
public:
AllMethodsStex(const String &aKey, const String &aName);
virtual const TmSzHistStat *hist(const PhaseInfo &phase) const;
virtual const TmSzStat *trace(const StatIntvlRec &rec) const;
virtual void describe(XmlNodes &nodes) const;
protected:
mutable TmSzHistStat theXactHist;
mutable TmSzStat theXactAggr;
};
class AllRepsStex: public Stex {
public:
AllRepsStex(const String &aKey, const String &aName);
virtual const TmSzHistStat *hist(const PhaseInfo &phase) const;
virtual const TmSzStat *trace(const StatIntvlRec &rec) const;
virtual void describe(XmlNodes &nodes) const;
protected:
mutable TmSzHistStat theXactHist;
mutable TmSzStat theXactAggr;
};
class ContTypeStex: public Stex {
public:
ContTypeStex(const String &aKey, const String &aName, int idx);
virtual const TmSzStat *aggr(const PhaseInfo &phase) const;
virtual void describe(XmlNodes &nodes) const;
protected:
int theIdx;
mutable TmSzStat theXactAggr;
};
class AllContTypesStex: public Stex {
public:
AllContTypesStex(const String &aKey, const String &aName);
virtual const TmSzStat *aggr(const PhaseInfo &phase) const;
virtual void describe(XmlNodes &nodes) const;
protected:
mutable TmSzStat theXactAggr;
};
#endif
syntax highlighted by Code2HTML, v. 0.9.1