Merge pull request #1844 from jrw972/monterey
[ACE_TAO.git] / ACE / apps / JAWS2 / JAWS / Cache_Object.cpp
blobb036842f65ed404108c3c22c7c201c2a5888ae5f
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)
8 : internal_ (0),
9 data_ (data),
10 size_ (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 ()
18 this->data_ = 0;
19 this->size_ = 0;
22 void *
23 JAWS_Cache_Object::internal (void) const
25 return this->internal_;
28 void
29 JAWS_Cache_Object::internal (void *item)
31 this->internal_ = item;
34 const void *
35 JAWS_Cache_Object::data (void) const
37 return this->data_;
40 size_t
41 JAWS_Cache_Object::size (void) const
43 return this->size_;
46 unsigned int
47 JAWS_Cache_Object::count (void) const
49 return this->count_i ();
52 int
53 JAWS_Cache_Object::acquire (void)
55 this->new_last_access_ = ACE_OS::time ((time_t *)0);
56 return this->acquire_i ();
59 int
60 JAWS_Cache_Object::release (void)
62 this->last_access_ = this->new_last_access_;
63 return this->release_i ();
66 time_t
67 JAWS_Cache_Object::last_access (void) const
69 return this->last_access_;
72 time_t
73 JAWS_Cache_Object::first_access (void) const
75 return this->first_access_;
78 unsigned int
79 JAWS_Cache_Object::priority (void) const
81 return this->priority_i ();
84 void *
85 JAWS_Cache_Object::heap_item (void) const
87 return this->heap_item_;
90 void
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)
108 ACE_Lock &
109 JAWS_Referenced_Cache_Object::lock (void)
111 return this->lock_adapter_;
114 unsigned int
115 JAWS_Referenced_Cache_Object::count_i (void) const
117 if (this->count_.tryacquire_write () == 0)
118 return 0;
120 return 1;
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 ();
135 unsigned int
136 JAWS_Referenced_Cache_Object::priority_i (void) const
138 unsigned int priority = ~(0U);
139 double delta
140 = ACE_OS::difftime (this->last_access (), this->first_access ());
142 if (delta >= 0.0 && delta < ~(0U))
143 priority = (unsigned) delta;
145 return priority;
150 JAWS_Counted_Cache_Object::
151 JAWS_Counted_Cache_Object (const void *data, size_t size)
152 : JAWS_Cache_Object (data, size),
153 count_ (0),
154 new_count_ (0),
155 lock_adapter_ (lock_)
159 JAWS_Counted_Cache_Object::~JAWS_Counted_Cache_Object (void)
163 ACE_Lock &
164 JAWS_Counted_Cache_Object::lock (void)
166 return this->lock_adapter_;
169 unsigned int
170 JAWS_Counted_Cache_Object::count_i (void) const
172 ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, g ,this->lock_, 0);
174 return this->count_;
178 JAWS_Counted_Cache_Object::acquire_i (void)
180 ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, g ,this->lock_, 0);
182 ++this->new_count_;
183 return 0;
187 JAWS_Counted_Cache_Object::release_i (void)
189 ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, g ,this->lock_, 0);
191 --this->new_count_;
192 this->count_ = this->new_count_;
193 return 0;
196 unsigned int
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)
203 : 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 ();
221 return 0;
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)
235 JAWS_Cache_Object *
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);
246 return obj;
249 void
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)
267 JAWS_Cache_Object *
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);
278 return obj;
281 void
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);