diff options
Diffstat (limited to 'src/usr/diag/prdf/common/framework/resolution/prdfResolutionMap.H')
-rwxr-xr-x | src/usr/diag/prdf/common/framework/resolution/prdfResolutionMap.H | 258 |
1 files changed, 258 insertions, 0 deletions
diff --git a/src/usr/diag/prdf/common/framework/resolution/prdfResolutionMap.H b/src/usr/diag/prdf/common/framework/resolution/prdfResolutionMap.H new file mode 100755 index 000000000..197a5f429 --- /dev/null +++ b/src/usr/diag/prdf/common/framework/resolution/prdfResolutionMap.H @@ -0,0 +1,258 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/common/framework/resolution/prdfResolutionMap.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2004,2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +/*! /file prdfResolutionMap.H + * /brief Map Bit List encodings to Resolutions + */ +#ifndef prdfResolutionMap_h +#define prdfResolutionMap_h +//-------------------------------------------------------------------- +// Includes +//-------------------------------------------------------------------- + +#include <vector> +#include <prdfBitKey.H> +#include <prdfResolutionList.H> +#include <prdfFilters.H> + +//-------------------------------------------------------------------- +// Forward References +//-------------------------------------------------------------------- +struct STEP_CODE_DATA_STRUCT; //dg04c +//! prdfResolutionMap +/*! + This class prvodes mapping of a bitList key to a resolution list + @code + Callout callout = { PU0_HIGH , MSCTLR0_HIGH } ; + FinalResolution default_resolution(&callout); + FinalResolution error_type1(&callout); + ResolutionMap Resolutions(expected_size=10,&default_resolution); + Resolutions.Add(BIT_LIST_STRING_15,&error_type1); // Add resolution for error bit 15 + //... + foo(ScanCommRegister *scr, ResolutionMap &rm, STEP_CODE_DATA_STRUCT & error_data) + { + scr->Read(); + BIT_LIST_CLASS bl = *scr->GetBitString(); + Resolution & r = rm.LookUp(bl); + r.Resolve(error_data); + } + @endcode +*/ +class prdfResolutionMap +{ +public: + /** + Constructor + @param entryCount expected (estimated) number of entries + @param defaultResolution Resolution of use if LookUp failes + @param ptr to a filter to apply to the bitKey before it is looked up + @pre None + @post Object created & space reserved + */ + prdfResolutionMap(int32_t entryCount, prdfResolution &defaultResolution, prdfFilter * i_fltr = NULL); + + /* + Destructor - compiler default is ok + */ + //~prdfprdfResolutionMap(); + + // DRGDRG - Should we be returning a ResolutionList? or get rid of Default & use no bits on key??? + /** + Get the default resolution for this map + @returns a reference to the default resolution + @pre None + @post None + */ + prdfResolution & GetDefault(void) const; + + /** + Replace the default Resolution + @param Reference to new default resolution + */ + void ReplaceDefaultWith(prdfResolution & r); + + /** + Add a key,Resolution pair + @param i_bitPos - bit position + @param 1 to 6 Resolutions + */ + void Add(uint8_t i_bitPos, + prdfResolution * i_res ); + void Add(uint8_t i_bitPos, + prdfResolution * i_r1, prdfResolution * i_r2); + void Add(uint8_t i_bitPos, + prdfResolution * i_r1, prdfResolution * i_r2, prdfResolution * i_r3); + void Add(uint8_t i_bitPos, + prdfResolution * i_r1, prdfResolution * i_r2, prdfResolution * i_r3, + prdfResolution * i_r4); + void Add(uint8_t i_bitPos, + prdfResolution * i_r1, prdfResolution * i_r2, prdfResolution * i_r3, + prdfResolution * i_r4, prdfResolution * i_r5); + void Add(uint8_t i_bitPos, + prdfResolution * i_r1, prdfResolution * i_r2, prdfResolution * i_r3, + prdfResolution * i_r4, prdfResolution * i_r5, prdfResolution * i_r6); + void Add(uint8_t i_bitPos, + prdfResolution * i_r1, prdfResolution * i_r2, prdfResolution * i_r3, + prdfResolution * i_r4, prdfResolution * i_r5, prdfResolution * i_r6, + prdfResolution * i_r7); + + /** + Add a key,prdfResolution pair + @param i_ble - bit list encoding (array of bitPos) + @param i_bleLen length of bit list + @param 1 to 6 prdfResolutions + */ + void Add(const uint8_t *i_ble, uint8_t i_bleLen, + prdfResolution * res ); + void Add(const uint8_t *i_ble, uint8_t i_bleLen, + prdfResolution * r1, prdfResolution * r2); + void Add(const uint8_t *i_ble, uint8_t i_bleLen, + prdfResolution * r1, prdfResolution * r2, prdfResolution * r3); + void Add(const uint8_t *i_ble, uint8_t i_bleLen, + prdfResolution * r1, prdfResolution * r2, prdfResolution * r3, + prdfResolution * r4); + void Add(const uint8_t *i_ble, uint8_t i_bleLen, + prdfResolution * r1, prdfResolution * r2, prdfResolution * r3, + prdfResolution * r4, prdfResolution * r5); + void Add(const uint8_t *i_ble, uint8_t i_bleLen, + prdfResolution * r1, prdfResolution * r2, prdfResolution * r3, + prdfResolution * r4, prdfResolution * r5, prdfResolution * r6); + + + //! Old Add interface + /*! + */ + void Add(const char *i_ble, + prdfResolution * res ); + void Add(const char *i_ble, + prdfResolution * r1, prdfResolution * r2); + void Add(const char *i_ble, + prdfResolution * r1, prdfResolution * r2, prdfResolution * r3); + void Add(const char *i_ble, + prdfResolution * r1, prdfResolution * r2, prdfResolution * r3, + prdfResolution * r4); + void Add(const char *i_ble, + prdfResolution * r1, prdfResolution * r2, prdfResolution * r3, + prdfResolution * r4, prdfResolution * r5); + void Add(const char *i_ble, + prdfResolution * r1, prdfResolution * r2, prdfResolution * r3, + prdfResolution * r4, prdfResolution * r5, prdfResolution * r6); + void Add(const char *i_ble, + prdfResolution * r1, prdfResolution * r2, prdfResolution * r3, + prdfResolution * r4, prdfResolution * r5, prdfResolution * r6, + prdfResolution * r7); + + void AddRange(const char *i_ble,prdfResolution * res ) { Add(i_ble,res); } + void AddRange(const char *i_ble,prdfResolution * r1, prdfResolution * r2) { Add(i_ble,r1,r2); } + void AddRange(const char *i_ble, + prdfResolution * r1, prdfResolution * r2, prdfResolution * r3) { Add(i_ble,r1,r2,r3); } + void AddRange(const char *i_ble, + prdfResolution * r1, prdfResolution * r2, prdfResolution * r3, + prdfResolution * r4) { Add(i_ble,r1,r2,r3,r4); } + void AddRange(const char *i_ble, + prdfResolution * r1, prdfResolution * r2, prdfResolution * r3, + prdfResolution * r4, prdfResolution * r5) { Add(i_ble,r1,r2,r3,r4,r5); } + void AddRange(const char *i_ble, + prdfResolution * r1, prdfResolution * r2, prdfResolution * r3, + prdfResolution * r4, prdfResolution * r5, prdfResolution * r6) { Add(i_ble,r1,r2,r3,r4,r5,r6); } + /** + Look up a prdfResolution for a bitlist + @param bitList + @returns List of all prdfResolutions that match + @pre none + @post prdfResolution returned is only valid until the next call to LookUp or this object is destroyed. + i_bitList may be modified + @notes if the bitList does not have a match then the defaultprdfResolution is returned. + */ + void LookUp(prdfResolutionList & o_list, prdfBitKey & io_bitList, STEP_CODE_DATA_STRUCT & scd); //dg04c + + /** + * @brief Get the stored filter associated with this resolution map. + * @returns Currently assigned filter. + */ + prdfFilter * getFilter() { return iv_filter; }; + + /** + * @brief Store a new filter with this resolution map. + * @param i - Filter to store. + */ + void setFilter(prdfFilter * i) { iv_filter = i; }; + +protected: // functions + +private: // functions + + /*! + Copy prohibited + */ + prdfResolutionMap(const prdfResolutionMap &); // Don't allow copy - No defn + + /*! + Assignment prohibited + */ + const prdfResolutionMap &operator=(const prdfResolutionMap &); // Don't allow - no defn + +private: // Data + + struct RmPair + { + prdfBitKey iv_blist; + prdfResolution * iv_res; + RmPair(uint8_t i_bitPos, prdfResolution *res) : iv_blist(i_bitPos), iv_res(res) {} + RmPair(void) : iv_blist(), iv_res(NULL) {} + }; + + typedef std::vector<RmPair> MapList; + + prdfResolution * defaultRes; + prdfFilter * iv_filter; + + MapList iv_list; +// MapList iv_rangeList; + +}; + +inline prdfResolutionMap::prdfResolutionMap(int32_t entryCount, + prdfResolution & defaultResolution, + prdfFilter * i_fltr) +: defaultRes(&defaultResolution), iv_filter(i_fltr), iv_list() +{ + iv_list.reserve(entryCount); +} + +inline prdfResolution & prdfResolutionMap::GetDefault(void) const {return *defaultRes; } +inline void prdfResolutionMap::ReplaceDefaultWith(prdfResolution & r) { defaultRes = &r; } + +#endif /* prdfResolutionMap_h */ + +// Change Log ************************************************************************************* +// +// Flag Reason Vers Date Coder Description +// ---- -------- ------- -------- -------- ------------------------------------------------------- +// v4r1mo 05/02/96 DRG Initial Creation +// D49203.5 v4r3 07/30/97 DRG Add Add() for multiple resolutions +// fips 03/02/04 dgilbert Changes the way lookups are done +// 482244 fips225 11/04/04 dgilbert Add filter +// F544848 f300 04/03/06 iawillia Add multi-bit support for rule code +// dg04 568068 f310 08/29/06 dgilbert Add STEP_CODE_DATA_STRUCT to LookUp +// End Change Log ********************************************************************************* |