Zen API
 All Classes Files Functions Variables Typedefs Friends Macros Modules Pages
kObject.h
Go to the documentation of this file.
1 
10 #include <kApi/kApiDef.h> //--inclusion order controlled by kApiDef
11 
12 #ifndef K_API_OBJECT_H
13 #define K_API_OBJECT_H
14 
15 #include <kApi/kObject.x.h>
16 
73 //typedef kPointer kObject; --forward-declared in kApiDef.x.h
74 
75 /*
76 * Public
77 */
78 
97 kInlineFx(kStatus) kObject_Clone(kObject* object, kObject source, kAlloc allocator)
98 {
99  if (!kIsNull(source))
100  {
101  return xkObject_CloneImpl(object, source, allocator);
102  }
103 
104  *object = kNULL;
105 
106  return kOK;
107 }
108 
120 {
121  kObj(kObject, object);
122 
123  kAtomic32s_Increment(&obj->refCount);
124 
125  return kOK;
126 }
127 
141 {
142  kObj(kObject, object);
143 
144  obj->pool = pool;
145 
146  return kOK;
147 }
148 
166 {
167  if (!kIsNull(object))
168  {
169  return xkObject_DestroyImpl(object, kFALSE);
170  }
171 
172  return kOK;
173 }
174 
194 {
195  if (!kIsNull(object))
196  {
197  return xkObject_DestroyImpl(object, kTRUE);
198  }
199 
200  return kOK;
201 }
202 
215 {
216  kObj(kObject, object);
217 
218  return obj->type;
219 }
220 
235 {
236  kObjR(kObject, object);
237 
238  return !kIsNull(object) && !kIsNull(type) && !kIsNull(obj->type) &&
239  xkObject_RawVerifyTag(object) && kType_Is(obj->type, type);
240 }
241 
255 {
256  return xkObject_VTable(object)->VEquals(object, other);
257 }
258 
270 {
271  return xkObject_VTable(object)->VHashCode(object);
272 }
273 
287 {
288  kObj(kObject, object);
289 
290  return obj->alloc;
291 }
292 
305 {
306  return xkObject_VTable(object)->VSize(object);
307 }
308 
326 {
327  kObj(kObject, object);
328 
329  return kAtomic32s_Get(&obj->refCount) > 1;
330 }
331 
332 /*
333 * Protected
334 */
335 
348 {
349  kObjR(kObject, object);
350 
351  obj->type = type;
352  obj->alloc = alloc;
353  obj->pool = kNULL;
354  obj->tag = xkOBJECT_TAG;
355 
356  kAtomic32s_Init(&obj->refCount, 1);
357 
358  return kOK;
359 }
360 
372 kInlineFx(kStatus) kObject_GetMem(kObject object, kSize size, void* mem)
373 {
374  return kAlloc_Get(kObject_Alloc(object), size, mem);
375 }
376 
389 {
390  return kAlloc_GetZero(kObject_Alloc(object), size, mem);
391 }
392 
404 {
405  return kAlloc_Free(kObject_Alloc(object), mem);
406 }
407 
419 {
420  return kAlloc_FreeRef(kObject_Alloc(object), mem);
421 }
422 
437 {
438  kObjR(kObject, object);
439 
440  obj->tag = 0;
441 
442  return kOK;
443 }
444 
459 {
460  return kERROR_UNIMPLEMENTED;
461 }
462 
475 {
476  return kOK;
477 }
478 
494 {
495  return kType_InnerSize(kObject_Type(object));
496 }
497 
511 {
512  return xkHashPointer(object);
513 }
514 
530 {
531  return (object == other);
532 }
533 
534 
535 #endif
kStatus kObject_VRelease(kObject object)
Protected virtual method that deallocates any resources owned by the object.
Definition: kObject.h:436
kType kObject_Type(kObject object)
Returns the type of the object.
Definition: kObject.h:214
kAlloc kObject_Alloc(kObject object)
Gets the memory allocator associated with this object.
Definition: kObject.h:286
kBool kObject_Equals(kObject object, kObject other)
Determines whether the object is equal to another object.
Definition: kObject.h:254
kSize kObject_HashCode(kObject object)
Gets a hash code representing the state of this object.
Definition: kObject.h:269
#define kIsNull(POINTER)
Tests for equality with null pointer.
Definition: kApiDef.h:339
kBool kObject_Is(kObject object, kType type)
Determines whether this object is an instance of the specified type.
Definition: kObject.h:234
k32s kAtomic32s_Increment(kAtomic32s *atomic)
Increments an atomic variable.
Definition: kAtomic.h:50
kStatus kObject_Init(kObject object, kType type, kAlloc alloc)
Protected method called by derived classes to initialize the kObject base class.
Definition: kObject.h:347
Represents an unsigned integer that can store a pointer address.
Abstract base class for memory allocator types.
kStatus kObject_Share(kObject object)
Increments the reference count associated with this object.
Definition: kObject.h:119
kSize kObject_VHashCode(kObject object)
Protected virtual method that calculates a hash code representing the object instance.
Definition: kObject.h:510
kStatus kAlloc_Free(kAlloc alloc, void *mem)
Frees a block of memory.
Definition: kAlloc.h:82
kStatus kObject_FreeMemRef(kObject object, void *mem)
Protected method called by derived classes to free memory (and reset the provided memory pointer to k...
Definition: kObject.h:418
#define kInlineFx(TYPE)
Inline method declaration helper.
Definition: kApiDef.h:26
kStatus kObject_Clone(kObject *object, kObject source, kAlloc allocator)
Constructs a new object by copying an existing object, including any aggregated child elements...
Definition: kObject.h:97
#define kTRUE
Boolean true.
Definition: kApiDef.h:354
kBool kObject_IsShared(kObject object)
Reports whether the object is currently shared (reference count greater than one).
Definition: kObject.h:325
kStatus kObject_VInitClone(kObject object, kObject source, kAlloc allocator)
Protected virtual method that clones (makes a deep copy of) the specified source object.
Definition: kObject.h:458
#define kObj(TypeName_T, T_object)
Declares a local "obj" (this-pointer) variable and initializes it from a type-checked object handle...
Definition: kApiDef.h:2858
#define kObjR(TypeName_T, T_object)
Declares a local "obj" (this-pointer) variable and initializes it from an object handle, without type-checking.
Definition: kApiDef.h:2870
Supports reclaiming objects upon destruction.
Core Zen type declarations.
kStatus kAlloc_FreeRef(kAlloc alloc, void *mem)
Frees a block of memory and sets the memory pointer to kNULL.
Definition: kAlloc.h:95
kStatus kObject_Destroy(kObject object)
Destroys the object.
Definition: kObject.h:165
#define kERROR_UNIMPLEMENTED
Feature not implemented.
Definition: kApiDef.h:492
Represents metadata about a type (class, interface, or value).
kBool kObject_VEquals(kObject object, kObject other)
Protected virtual method that compares two objects for equality.
Definition: kObject.h:529
kStatus kObject_Dispose(kObject object)
Destroys the object and any aggregated child elements.
Definition: kObject.h:193
kStatus kObject_SetPool(kObject object, kObjectPool pool)
Sets the object pool associated with this object.
Definition: kObject.h:140
kSize kType_InnerSize(kType type)
Gets the internal size of a type.
Definition: kType.h:321
Root of all Zen classes.
kSize kObject_Size(kObject object)
Estimates the memory consumed by this object, including any aggregated child elements.
Definition: kObject.h:304
#define kOK
Operation successful.
Definition: kApiDef.h:513
void kAtomic32s_Init(kAtomic32s *atomic, k32s value)
Initializes an atomic variable with a particular value.
Definition: kAtomic.h:36
Represents an error code.
kStatus kObject_GetMem(kObject object, kSize size, void *mem)
Protected method called by derived classes to allocate memory using the object's allocator.
Definition: kObject.h:372
#define kNULL
Null pointer.
Definition: kApiDef.h:267
kStatus kAlloc_Get(kAlloc alloc, kSize size, void *mem)
Allocates a block of memory.
Definition: kAlloc.h:37
kStatus kObject_GetMemZero(kObject object, kSize size, void *mem)
Protected method called by derived classes to allocate and zero memory using the object's allocator...
Definition: kObject.h:388
kBool kType_Is(kType type, kType other)
Determines whether a type is equivalent to another type.
Definition: kType.h:89
kStatus kObject_VDisposeItems(kObject object)
Protected virtual method that destroys any aggregated child objects associated with a collection...
Definition: kObject.h:474
Represents a boolean value.
#define kFALSE
Boolean false.
Definition: kApiDef.h:353
kStatus kAlloc_GetZero(kAlloc alloc, kSize size, void *mem)
Allocates a block of memory and zero-initializes the block.
Definition: kAlloc.h:51
kStatus kObject_FreeMem(kObject object, void *mem)
Protected method called by derived classes to free memory using the object's allocator.
Definition: kObject.h:403
k32s kAtomic32s_Get(kAtomic32s *atomic)
Gets the current value of an atomic variable.
Definition: kAtomic.h:111
kSize kObject_VSize(kObject object)
Protected virtual method that calculates the total size (in bytes) of the object instance.
Definition: kObject.h:493