1 #include "JAWS/Cache_Object.h"
3 #include "ace/Malloc_Base.h"
4 #include "ace/Guard_T.h"
5 #include "ace/OS_NS_time.h"
7 JAWS_Cache_Object::JAWS_Cache_Object (const void *data
, size_t size
)
12 this->first_access_
= ACE_OS::time ((time_t *)0);
13 this->new_last_access_
= this->last_access_
= this->first_access_
;
16 JAWS_Cache_Object::~JAWS_Cache_Object ()
23 JAWS_Cache_Object::internal (void) const
25 return this->internal_
;
29 JAWS_Cache_Object::internal (void *item
)
31 this->internal_
= item
;
35 JAWS_Cache_Object::data (void) const
41 JAWS_Cache_Object::size (void) const
47 JAWS_Cache_Object::count (void) const
49 return this->count_i ();
53 JAWS_Cache_Object::acquire (void)
55 this->new_last_access_
= ACE_OS::time ((time_t *)0);
56 return this->acquire_i ();
60 JAWS_Cache_Object::release (void)
62 this->last_access_
= this->new_last_access_
;
63 return this->release_i ();
67 JAWS_Cache_Object::last_access (void) const
69 return this->last_access_
;
73 JAWS_Cache_Object::first_access (void) const
75 return this->first_access_
;
79 JAWS_Cache_Object::priority (void) const
81 return this->priority_i ();
85 JAWS_Cache_Object::heap_item (void) const
87 return this->heap_item_
;
91 JAWS_Cache_Object::heap_item (void *item
)
93 this->heap_item_
= item
;
97 JAWS_Referenced_Cache_Object::
98 JAWS_Referenced_Cache_Object (const void *data
, size_t size
)
99 : JAWS_Cache_Object (data
, size
),
100 lock_adapter_ (count_
)
104 JAWS_Referenced_Cache_Object::~JAWS_Referenced_Cache_Object (void)
109 JAWS_Referenced_Cache_Object::lock (void)
111 return this->lock_adapter_
;
115 JAWS_Referenced_Cache_Object::count_i (void) const
117 if (this->count_
.tryacquire_write () == 0)
124 JAWS_Referenced_Cache_Object::acquire_i (void)
126 return this->count_
.acquire_read ();
130 JAWS_Referenced_Cache_Object::release_i (void)
132 return this->count_
.release ();
136 JAWS_Referenced_Cache_Object::priority_i (void) const
138 unsigned int priority
= ~(0U);
140 = ACE_OS::difftime (this->last_access (), this->first_access ());
142 if (delta
>= 0.0 && delta
< ~(0U))
143 priority
= (unsigned) delta
;
150 JAWS_Counted_Cache_Object::
151 JAWS_Counted_Cache_Object (const void *data
, size_t size
)
152 : JAWS_Cache_Object (data
, size
),
155 lock_adapter_ (lock_
)
159 JAWS_Counted_Cache_Object::~JAWS_Counted_Cache_Object (void)
164 JAWS_Counted_Cache_Object::lock (void)
166 return this->lock_adapter_
;
170 JAWS_Counted_Cache_Object::count_i (void) const
172 ACE_GUARD_RETURN (ACE_SYNCH_MUTEX
, g
,this->lock_
, 0);
178 JAWS_Counted_Cache_Object::acquire_i (void)
180 ACE_GUARD_RETURN (ACE_SYNCH_MUTEX
, g
,this->lock_
, 0);
187 JAWS_Counted_Cache_Object::release_i (void)
189 ACE_GUARD_RETURN (ACE_SYNCH_MUTEX
, g
,this->lock_
, 0);
192 this->count_
= this->new_count_
;
197 JAWS_Counted_Cache_Object::priority_i (void) const
199 return this->count_i ();
202 JAWS_Cache_Object_Factory::JAWS_Cache_Object_Factory (ACE_Allocator
*alloc
)
205 if (this->allocator_
== 0)
206 this->allocator_
= ACE_Allocator::instance ();
209 JAWS_Cache_Object_Factory::~JAWS_Cache_Object_Factory (void)
214 JAWS_Cache_Object_Factory::open (ACE_Allocator
*alloc
)
216 this->allocator_
= alloc
;
218 if (this->allocator_
== 0)
219 this->allocator_
= ACE_Allocator::instance ();
224 JAWS_Referenced_Cache_Object_Factory
225 ::JAWS_Referenced_Cache_Object_Factory (ACE_Allocator
*alloc
)
226 : JAWS_Cache_Object_Factory (alloc
)
230 JAWS_Referenced_Cache_Object_Factory
231 ::~JAWS_Referenced_Cache_Object_Factory (void)
236 JAWS_Referenced_Cache_Object_Factory::create (const void *data
, size_t size
)
238 JAWS_Referenced_Cache_Object
*obj
;
240 size_t obj_size
= sizeof (JAWS_Referenced_Cache_Object
);
241 ACE_NEW_MALLOC_RETURN (obj
,
242 (JAWS_Referenced_Cache_Object
*)
243 this->allocator_
->malloc (obj_size
),
244 JAWS_Referenced_Cache_Object (data
, size
), 0);
250 JAWS_Referenced_Cache_Object_Factory::destroy (JAWS_Cache_Object
*obj
)
252 JAWS_Referenced_Cache_Object
*rco
= (JAWS_Referenced_Cache_Object
*) obj
;
253 ACE_DES_FREE (rco
, this->allocator_
->free
, JAWS_Referenced_Cache_Object
);
256 JAWS_Counted_Cache_Object_Factory
257 ::JAWS_Counted_Cache_Object_Factory (ACE_Allocator
*alloc
)
258 : JAWS_Cache_Object_Factory (alloc
)
262 JAWS_Counted_Cache_Object_Factory
263 ::~JAWS_Counted_Cache_Object_Factory (void)
268 JAWS_Counted_Cache_Object_Factory::create (const void *data
, size_t size
)
270 JAWS_Counted_Cache_Object
*obj
;
272 size_t obj_size
= sizeof (JAWS_Counted_Cache_Object
);
273 ACE_NEW_MALLOC_RETURN (obj
,
274 (JAWS_Counted_Cache_Object
*)
275 this->allocator_
->malloc (obj_size
),
276 JAWS_Counted_Cache_Object (data
, size
), 0);
282 JAWS_Counted_Cache_Object_Factory::destroy (JAWS_Cache_Object
*obj
)
284 JAWS_Counted_Cache_Object
*cco
= (JAWS_Counted_Cache_Object
*) obj
;
285 ACE_DES_FREE (cco
, this->allocator_
->free
, JAWS_Counted_Cache_Object
);