Zen API
 All Classes Files Functions Variables Typedefs Friends Macros Modules Pages
kArray3.h
Go to the documentation of this file.
1 
10 #ifndef K_API_ARRAY_3_H
11 #define K_API_ARRAY_3_H
12 
13 #include <kApi/kApiDef.h>
14 #include <kApi/Data/kArray3.x.h>
15 
35 //typedef kObject kArray3; --forward-declared in kApiDef.x.h
36 
49 kFx(kStatus) kArray3_Construct(kArray3* array, kType itemType, kSize length0, kSize length1, kSize length2, kAlloc allocator);
50 
51 #if defined(K_CPP)
52 
66 kFx(kStatus) kArray3_ConstructEx(kArray3* array, kType itemType, kSize length0, kSize length1, kSize length2, kAlloc allocator, kAlloc valueAllocator, kMemoryAlignment valueAlignment = kALIGN_ANY);
67 #endif
68 
80 kFx(kStatus) kArray3_Allocate(kArray3 array, kType itemType, kSize length0, kSize length1, kSize length2);
81 
95 kInlineFx(kStatus) kArray3_Resize(kArray3 array, kSize length0, kSize length1, kSize length2)
96 {
97  return kArray3_Allocate(array, kArray3_ItemType(array), length0, length1, length2);
98 }
99 
114 kFx(kStatus) kArray3_Attach(kArray3 array, void* items, kType itemType, kSize length0, kSize length1, kSize length2);
115 
133 #define kArray3_AttachT(kArray3_array, TPtr_items, kType_itemType, kSize_length0, kSize_length1, kSize_length2) \
134  xkArray3_AttachT(kArray3_array, TPtr_items, kType_itemType, kSize_length0, kSize_length1, kSize_length2, sizeof(*(TPtr_items)))
135 
148 {
149  return xkArray3_Assign(array, source, kNULL);
150 }
151 
164 #if defined (K_CPP)
166 {
167  return xkArray3_Assign(array, source, context);
168 }
169 #endif
170 
178 kFx(kStatus) kArray3_Zero(kArray3 array);
179 
191 kFx(kStatus) kArray3_SetItem(kArray3 array, kSize index0, kSize index1, kSize index2, const void* item);
192 
207 #define kArray3_SetItemT(kArray3_array, kSize_index0, kSize_index1, kSize_index2, TPtr_item) \
208  xkArray3_SetItemT(kArray3_array, kSize_index0, kSize_index1, kSize_index2, TPtr_item, sizeof(*(TPtr_item)))
209 
221 kFx(kStatus) kArray3_Item(kArray3 array, kSize index0, kSize index1, kSize index2, void* item);
222 
237 #define kArray3_ItemT(kArray3_array, kSize_index0, kSize_index1, kSize_index2, TPtr_item) \
238  xkArray3_ItemT(kArray3_array, kSize_index0, kSize_index1, kSize_index2, TPtr_item, sizeof(*(TPtr_item)))
239 
240 
257 #define kArray3_SetAsT(kArray3_array, kSize_index0, kSize_index1, kSize_index2, T_value, T) \
258  (kPointer_WriteAs(xkArray3_AsT(kArray3_array, kSize_index0, kSize_index1, kSize_index2, sizeof(T)), T_value, T), (void)0)
259 
275 #define kArray3_AsT(kArray3_array, kSize_index0, kSize_index1, kSize_index2, T) \
276  kPointer_ReadAs(xkArray3_AsT(kArray3_array, kSize_index0, kSize_index1, kSize_index2, sizeof(T)), T)
277 
286 {
287  kObj(kArray3, array);
288 
289  return obj->items;
290 }
291 
303 #define kArray3_DataT(kArray3_array, T) \
304  kCast(T*, xkArray3_DataT(kArray3_array, sizeof(T)))
305 
318 kInlineFx(void*) kArray3_DataAt(kArray3 array, kSSize index0, kSSize index1, kSSize index2)
319 {
320  kObj(kArray3, array);
321  kSSize index = (index0*(kSSize)obj->length[1] + index1)*(kSSize)obj->length[2] + index2;
322 
323  return kPointer_ItemOffset(obj->items, index, obj->itemSize);
324 }
325 
342 #define kArray3_DataAtT(kArray3_array, kSize_index0, kSize_index1, kSize_index2, T) \
343  kCast(T*, xkArray3_DataAtT(kArray3_array, kSize_index0, kSize_index1, kSize_index2, sizeof(T)))
344 
353 {
354  kObj(kArray3, array);
355 
356  return kArray3_Count(array) * obj->itemSize;
357 }
358 
372 kInlineFx(void*) kArray3_At(kArray3 array, kSize index0, kSize index1, kSize index2)
373 {
374 # if !defined(K_FSS_912_DISABLE_BOUNDS_CHECK)
375  {
376  kAssert(index0 < kArray3_Length(array, 0));
377  kAssert(index1 < kArray3_Length(array, 1));
378  kAssert(index2 < kArray3_Length(array, 2));
379  }
380 # endif
381 
382  return kArray3_DataAt(array, (kSSize)index0, (kSSize)index1, (kSSize)index2);
383 }
384 
400 #define kArray3_AtT(kArray3_array, kSize_index0, kSize_index1, kSize_index2, T) \
401  kCast(T*, xkArray3_AtT(kArray3_array, kSize_index0, kSize_index1, kSize_index2, sizeof(T)))
402 
411 {
412  kObj(kArray3, array);
413 
414  return obj->itemType;
415 }
416 
425 {
426  kObj(kArray3, array);
427 
428  return obj->itemSize;
429 }
430 
440 {
441  kObj(kArray3, array);
442 
443  kAssert(dimension < 3);
444 
445  return obj->length[dimension];
446 }
447 
456 {
457  kObj(kArray3, array);
458 
459  return obj->length[0] * obj->length[1] * obj->length[2];
460 }
461 
470 {
471  kObj(kArray3, array);
472 
473  return kType_IsValue(obj->itemType) ? obj->valueAlloc : kObject_Alloc(array);
474 }
475 
476 #endif
kBool kType_IsValue(kType type)
Determines whether a type represents a value (primitive, struct, enum).
Definition: kType.h:103
void * kArray3_At(kArray3 array, kSize index0, kSize index1, kSize index2)
Returns a pointer to the specified item in the array.
Definition: kArray3.h:372
kStatus kArray3_Attach(kArray3 array, void *items, kType itemType, kSize length0, kSize length1, kSize length2)
Attaches the array to an external item buffer.
void * kArray3_DataAt(kArray3 array, kSSize index0, kSSize index1, kSSize index2)
Calculates an address relative to the start of the buffer.
Definition: kArray3.h:318
kAlloc kObject_Alloc(kObject object)
Gets the memory allocator associated with this object.
Definition: kObject.h:329
kType kArray3_ItemType(kArray3 array)
Returns the array item type.
Definition: kArray3.h:410
kStatus kArray3_Resize(kArray3 array, kSize length0, kSize length1, kSize length2)
Resizes the internal array item buffer.
Definition: kArray3.h:95
Represents an unsigned integer that can store a pointer address.
Abstract base class for memory allocator types.
void * kPointer_ItemOffset(const void *pointer, kSSize itemIndex, kSize itemSize)
Gets a pointer to the Nth element of an array.
Definition: kApiDef.h:294
#define kInlineFx(TYPE)
Inline method declaration helper.
Definition: kApiDef.h:26
kStatus kArray3_Construct(kArray3 *array, kType itemType, kSize length0, kSize length1, kSize length2, kAlloc allocator)
Constructs a kArray3 object.
kSize kArray3_ItemSize(kArray3 array)
Returns the array item size.
Definition: kArray3.h:424
Represents a signed integer that can store a pointer address.
kStatus kArray3_Item(kArray3 array, kSize index0, kSize index1, kSize index2, void *item)
Gets the value of an item.
kAlloc kArray3_DataAlloc(kArray3 array)
Reports the allocator used for the internal data array.
Definition: kArray3.h:469
kStatus kArray3_Zero(kArray3 array)
Sets all array element bits to zero.
#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:3383
Represents a 3D array.
kStatus kArray3_Allocate(kArray3 array, kType itemType, kSize length0, kSize length1, kSize length2)
Reallocates the internal array item buffer.
Core Zen type declarations.
void * kArray3_Data(kArray3 array)
Returns a pointer to the array item buffer.
Definition: kArray3.h:285
kStatus kArray3_ConstructEx(kArray3 *array, kType itemType, kSize length0, kSize length1, kSize length2, kAlloc allocator, kAlloc valueAllocator, kMemoryAlignment valueAlignment=kALIGN_ANY)
Constructs a kArray3 object using a separate allocator for data array memory.
kSize kArray3_Length(kArray3 array, kSize dimension)
Returns the length of the specified array dimension, in elements.
Definition: kArray3.h:439
Represents metadata about a type (class, interface, or value).
kSize kArray3_Count(kArray3 array)
Returns the array item count, in elements.
Definition: kArray3.h:455
kStatus kArray3_Assign(kArray3 array, kArray3 source)
Performs a shallow copy of the source array.
Definition: kArray3.h:147
kSize kArray3_DataSize(kArray3 array)
Reports the size, in bytes, of the array item buffer.
Definition: kArray3.h:352
#define kAssert(EXPRESSION)
Aborts execution if EXPRESSION is kFALSE.
Definition: kApiDef.h:751
Root of all Zen classes.
Represents an error code.
#define kNULL
Null pointer.
Definition: kApiDef.h:269
Represents alignment options for allocations.
kStatus kArray3_SetItem(kArray3 array, kSize index0, kSize index1, kSize index2, const void *item)
Sets the value of an item.