summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/common/util/prdfFlyWeight.H
blob: 64573dda2a6a7cd7fa55a3673d823b5e487b1f0b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* $Source: src/usr/diag/prdf/common/util/prdfFlyWeight.H $               */
/*                                                                        */
/* IBM CONFIDENTIAL                                                       */
/*                                                                        */
/* COPYRIGHT International Business Machines Corp. 2002,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                                                     */

#ifndef PRDFFLYWEIGHT_H
#define PRDFFLYWEIGHT_H
/**
   @file prdfFlyWeight.H
   @brief Description
*/


//--------------------------------------------------------------------
// Includes
//--------------------------------------------------------------------

#include <stdint.h>
#include <vector>

//--------------------------------------------------------------------
//  Forward References
//--------------------------------------------------------------------
//
//
namespace PRDF
{
#if defined(ESW_SIM_COMPILE)
class FlyWeightBase
{
  public:
    FlyWeightBase() { cv_fwlist.push_back(this); }
    virtual ~FlyWeightBase() {}
    virtual void printStats(void) = 0;

    static void report(void)
    {
      for(FlyWeightList::iterator i = cv_fwlist.begin(); i != cv_fwlist.end(); ++i)
      {
        (*i)->printStats();
      }
    }

    typedef std::vector<FlyWeightBase *> FlyWeightList;
    static FlyWeightList cv_fwlist;
};
#endif

/**
    **One line Class description**
    @author Doug Gilbert
    @par T is the type of object to flyweight, S is the size (# of T's) in an allocation
         unit (minimum number of T's to reserve space for when more storage is needed)
    @code
    @endcode
*/
template <class T, uint32_t S>
class FlyWeight
#if defined(ESW_SIM_COMPILE)
 : public FlyWeightBase
#endif
{
public:
  /**
    Constructor
    @param
    @returns
    @pre
    @post
    @see
    @note
  */
  FlyWeight() : iv_nextOpen(NULL)  {}

  /**
    Destructor
  */
  ~FlyWeight();

  /**
   clear all entries
   @param - none
   @pre none
   @post all instances of T are deleted.
   @note any ponters or references to any of the instances should be reset
   */
  void clear();

  /**
   Get the flyweight version of T - add it if it does not yet exist
   @param key to search for
   @returns Reference to T in the flyweight
   @pre none
   @post FlyWeight contains one instance of key
   */
  T & get(const T & key);

#if defined(ESW_SIM_COMPILE)
  virtual void printStats(void);
#endif

private:  // functions
private:  // Data

  typedef std::vector< void* > HeapType;

  HeapType iv_heap;  // vector of arrays of T
  T * iv_nextOpen;
};

} //End namespace PRDF
#endif /* PRDFFLYWEIGHT_H */

// Change Log *****************************************************************
//
//  Flag Reason    Vers    Date     Coder    Description
//  ---- --------- ------- -------- -------- ------------------------------------
//                                  dgilbert Initial Creation
//                 fips222 09/14/04 dgilbert  Add clear()
//
// End Change Log *************************************************************
OpenPOWER on IntegriCloud