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
15 ACE_END_VERSIONED_NAMESPACE_DECL
18 // Cache bucket -- use Hash_Bucket to hold cacheable objects.
20 class JAWS_Cache_Object
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;
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;
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;
63 time_t new_last_access_
;
69 class JAWS_Referenced_Cache_Object
: public JAWS_Cache_Object
72 JAWS_Referenced_Cache_Object (const void *, size_t);
73 virtual ~JAWS_Referenced_Cache_Object (void);
75 virtual ACE_Lock
& lock (void);
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;
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
94 JAWS_Counted_Cache_Object (const void *, size_t);
95 virtual ~JAWS_Counted_Cache_Object (void);
97 virtual ACE_Lock
& lock (void);
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;
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
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;
129 ACE_Allocator
*allocator_
;
133 class JAWS_Referenced_Cache_Object_Factory
: public JAWS_Cache_Object_Factory
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
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 */