Merge pull request #1844 from jrw972/monterey
[ACE_TAO.git] / ACE / apps / JAWS2 / JAWS / Cache_Object.h
blob19c717f336ebd704db677d30a0b8c264a16018e8
1 // -*- C++ -*-
4 #ifndef JAWS_CACHE_OBJECT_H
5 #define JAWS_CACHE_OBJECT_H
7 #include "ace/Thread_Mutex.h"
8 #include "ace/Synch_Traits.h"
9 #include "ace/Malloc.h"
10 #include "ace/RW_Thread_Mutex.h"
11 #include "ace/Lock_Adapter_T.h"
13 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
14 class ACE_Allocator;
15 ACE_END_VERSIONED_NAMESPACE_DECL
18 // Cache bucket -- use Hash_Bucket to hold cacheable objects.
20 class JAWS_Cache_Object
22 public:
23 JAWS_Cache_Object (const void *, size_t);
24 virtual ~JAWS_Cache_Object (void);
26 void *internal (void) const;
27 void internal (void *);
29 const void *data (void) const;
30 size_t size (void) const;
31 unsigned int count (void) const;
33 int acquire (void);
34 int release (void);
36 time_t last_access (void) const;
37 time_t first_access (void) const;
39 unsigned int priority (void) const;
41 enum { ACE_CO_REFERENCED, ACE_CO_COUNTED };
43 void *heap_item (void) const;
44 void heap_item (void *item);
46 virtual ACE_Lock & lock (void) = 0;
48 protected:
50 virtual unsigned int count_i (void) const = 0;
51 virtual int acquire_i (void) = 0;
52 virtual int release_i (void) = 0;
53 virtual unsigned int priority_i (void) const = 0;
55 private:
57 void *internal_;
58 const void *data_;
59 size_t size_;
61 time_t last_access_;
62 time_t first_access_;
63 time_t new_last_access_;
65 void *heap_item_;
69 class JAWS_Referenced_Cache_Object : public JAWS_Cache_Object
71 public:
72 JAWS_Referenced_Cache_Object (const void *, size_t);
73 virtual ~JAWS_Referenced_Cache_Object (void);
75 virtual ACE_Lock & lock (void);
77 protected:
79 virtual unsigned int count_i (void) const;
80 virtual int acquire_i (void);
81 virtual int release_i (void);
82 virtual unsigned int priority_i (void) const;
84 private:
86 mutable ACE_SYNCH_RW_MUTEX count_;
87 mutable ACE_Lock_Adapter<ACE_SYNCH_RW_MUTEX> lock_adapter_;
91 class JAWS_Counted_Cache_Object : public JAWS_Cache_Object
93 public:
94 JAWS_Counted_Cache_Object (const void *, size_t);
95 virtual ~JAWS_Counted_Cache_Object (void);
97 virtual ACE_Lock & lock (void);
99 protected:
101 virtual unsigned int count_i (void) const;
102 virtual int acquire_i (void);
103 virtual int release_i (void);
104 virtual unsigned int priority_i (void) const;
106 private:
108 unsigned int count_;
109 unsigned int new_count_;
110 mutable ACE_SYNCH_MUTEX lock_;
111 mutable ACE_Lock_Adapter<ACE_SYNCH_MUTEX> lock_adapter_;
115 class JAWS_Cache_Object_Factory
117 public:
119 JAWS_Cache_Object_Factory (ACE_Allocator *alloc = 0);
120 virtual ~JAWS_Cache_Object_Factory (void);
122 int open (ACE_Allocator *alloc = 0);
124 virtual JAWS_Cache_Object * create (const void *, size_t) = 0;
125 virtual void destroy (JAWS_Cache_Object *) = 0;
127 protected:
129 ACE_Allocator *allocator_;
133 class JAWS_Referenced_Cache_Object_Factory : public JAWS_Cache_Object_Factory
135 public:
136 JAWS_Referenced_Cache_Object_Factory (ACE_Allocator *alloc = 0);
137 virtual ~JAWS_Referenced_Cache_Object_Factory (void);
139 virtual JAWS_Cache_Object * create (const void *, size_t);
140 virtual void destroy (JAWS_Cache_Object *);
144 class JAWS_Counted_Cache_Object_Factory : public JAWS_Cache_Object_Factory
146 public:
147 JAWS_Counted_Cache_Object_Factory (ACE_Allocator *alloc = 0);
148 virtual ~JAWS_Counted_Cache_Object_Factory (void);
150 virtual JAWS_Cache_Object * create (const void *, size_t);
151 virtual void destroy (JAWS_Cache_Object *);
155 #endif /* JAWS_CACHE_OBJECT_H */