/* 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