Zen API
 All Classes Files Functions Variables Typedefs Friends Macros Modules Pages
kArray2.h
Go to the documentation of this file.
1 
10 #ifndef K_API_ARRAY_2_H
11 #define K_API_ARRAY_2_H
12 
13 #include <kApi/kApiDef.h>
14 #include <kApi/Data/kArray2.x.h>
15 
35 //typedef kObject kArray2; --forward-declared in kApiDef.x.h
36 
48 kFx(kStatus) kArray2_Construct(kArray2* array, kType itemType, kSize length0, kSize length1, kAlloc allocator);
49 
50 #if defined(K_CPP)
51 
64 kFx(kStatus) kArray2_ConstructEx(kArray2* array, kType itemType, kSize length0, kSize length1, kAlloc allocator, kAlloc valueAllocator, kMemoryAlignment valueAlignment = kALIGN_ANY);
65 #endif
66 
77 kFx(kStatus) kArray2_Allocate(kArray2 array, kType itemType, kSize length0, kSize length1);
78 
92 {
93  return kArray2_Allocate(array, kArray2_ItemType(array), length0, length1);
94 }
95 
109 kFx(kStatus) kArray2_Attach(kArray2 array, void* items, kType itemType, kSize length0, kSize length1);
110 
127 #define kArray2_AttachT(kArray2_array, TPtr_items, kType_itemType, kSize_length0, kSize_length1) \
128  xkArray2_AttachT(kArray2_array, TPtr_items, kType_itemType, kSize_length0, kSize_length1, sizeof(*(TPtr_items)))
129 
142 {
143  return xkArray2_Assign(array, source, kNULL);
144 }
145 
158 #if defined (K_CPP)
160 {
161  return xkArray2_Assign(array, source, context);
162 }
163 #endif
164 
172 kFx(kStatus) kArray2_Zero(kArray2 array);
173 
184 kFx(kStatus) kArray2_SetItem(kArray2 array, kSize index0, kSize index1, const void* item);
185 
199 #define kArray2_SetItemT(kArray2_array, kSize_index0, kSize_index1, TPtr_item) \
200  xkArray2_SetItemT(kArray2_array, kSize_index0, kSize_index1, TPtr_item, sizeof(*(TPtr_item)))
201 
212 kFx(kStatus) kArray2_Item(kArray2 array, kSize index0, kSize index1, void* item);
213 
227 #define kArray2_ItemT(kArray2_array, kSize_index0, kSize_index1, TPtr_item) \
228  xkArray2_ItemT(kArray2_array, kSize_index0, kSize_index1, TPtr_item, sizeof(*(TPtr_item)))
229 
244 #define kArray2_SetAsT(kArray2_array, kSize_index0, kSize_index1, T_value, T) \
245  (kPointer_WriteAs(xkArray2_AsT(kArray2_array, kSize_index0, kSize_index1, sizeof(T)), T_value, T), (void)0)
246 
261 #define kArray2_AsT(kArray2_array, kSize_index0, kSize_index1, T) \
262  kPointer_ReadAs(xkArray2_AsT(kArray2_array, kSize_index0, kSize_index1, sizeof(T)), T)
263 
272 {
273  kObj(kArray2, array);
274 
275  return obj->items;
276 }
277 
289 #define kArray2_DataT(kArray2_array, T) \
290  kCast(T*, xkArray2_DataT(kArray2_array, sizeof(T)))
291 
303 kInlineFx(void*) kArray2_DataAt(kArray2 array, kSSize index0, kSSize index1)
304 {
305  kObj(kArray2, array);
306  kSSize index = index0*(kSSize)obj->length[1] + index1;
307 
308  return kPointer_ItemOffset(obj->items, index, obj->itemSize);
309 }
310 
326 #define kArray2_DataAtT(kArray2_array, kSSize_index0, kSSize_index1, T) \
327  kCast(T*, xkArray2_DataAtT(kArray2_array, kSSize_index0, kSSize_index1, sizeof(T)))
328 
337 {
338  kObj(kArray2, array);
339 
340  return kArray2_Count(array) * obj->itemSize;
341 }
342 
355 kInlineFx(void*) kArray2_At(kArray2 array, kSize index0, kSize index1)
356 {
357 # if !defined(K_FSS_912_DISABLE_BOUNDS_CHECK)
358  {
359  kAssert(index0 < kArray2_Length(array, 0));
360  kAssert(index1 < kArray2_Length(array, 1));
361  }
362 # endif
363 
364  return kArray2_DataAt(array, (kSSize)index0, (kSSize)index1);
365 }
366 
381 #define kArray2_AtT(kArray2_array, kSize_index0, kSize_index1, T) \
382  kCast(T*, xkArray2_AtT(kArray2_array, kSize_index0, kSize_index1, sizeof(T)))
383 
392 {
393  kObj(kArray2, array);
394 
395  return obj->itemType;
396 }
397 
406 {
407  kObj(kArray2, array);
408 
409  return obj->itemSize;
410 }
411 
421 {
422  kObj(kArray2, array);
423 
424  kAssert(dimension < 2);
425 
426  return obj->length[dimension];
427 }
428 
437 {
438  kObj(kArray2, array);
439 
440  return obj->length[0] * obj->length[1];
441 }
442 
451 {
452  kObj(kArray2, array);
453 
454  return kType_IsValue(obj->itemType) ? obj->valueAlloc : kObject_Alloc(array);
455 }
456 
457 #endif
kBool kType_IsValue(kType type)
Determines whether a type represents a value (primitive, struct, enum).
Definition: kType.h:103
kStatus kArray2_Allocate(kArray2 array, kType itemType, kSize length0, kSize length1)
Reallocates the internal array item buffer.
kSize kArray2_DataSize(kArray2 array)
Reports the size, in bytes, of the array item buffer.
Definition: kArray2.h:336
kStatus kArray2_Resize(kArray2 array, kSize length0, kSize length1)
Resizes the internal array item buffer.
Definition: kArray2.h:91
void * kArray2_DataAt(kArray2 array, kSSize index0, kSSize index1)
Calculates an address relative to the start of the buffer.
Definition: kArray2.h:303
kAlloc kObject_Alloc(kObject object)
Gets the memory allocator associated with this object.
Definition: kObject.h:329
kStatus kArray2_Construct(kArray2 *array, kType itemType, kSize length0, kSize length1, kAlloc allocator)
Constructs a kArray2 object.
kSize kArray2_Count(kArray2 array)
Returns the array item count, in elements.
Definition: kArray2.h:436
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
Represents a 2D array.
#define kInlineFx(TYPE)
Inline method declaration helper.
Definition: kApiDef.h:26
void * kArray2_At(kArray2 array, kSize index0, kSize index1)
Returns a pointer to the specified item in the array.
Definition: kArray2.h:355
Represents a signed integer that can store a pointer address.
kStatus kArray2_SetItem(kArray2 array, kSize index0, kSize index1, const void *item)
Sets the value of an item.
kSize kArray2_Length(kArray2 array, kSize dimension)
Returns the length of the specified array dimension, in elements.
Definition: kArray2.h:420
kStatus kArray2_ConstructEx(kArray2 *array, kType itemType, kSize length0, kSize length1, kAlloc allocator, kAlloc valueAllocator, kMemoryAlignment valueAlignment=kALIGN_ANY)
Constructs a kArray2 object using a separate allocator for data array memory.
#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
kStatus kArray2_Zero(kArray2 array)
Sets all array element bits to zero.
kSize kArray2_ItemSize(kArray2 array)
Returns the array item size.
Definition: kArray2.h:405
Core Zen type declarations.
Represents metadata about a type (class, interface, or value).
void * kArray2_Data(kArray2 array)
Returns a pointer to the array item buffer.
Definition: kArray2.h:271
kStatus kArray2_Assign(kArray2 array, kArray2 source)
Performs a shallow copy of the source array.
Definition: kArray2.h:141
#define kAssert(EXPRESSION)
Aborts execution if EXPRESSION is kFALSE.
Definition: kApiDef.h:751
kAlloc kArray2_DataAlloc(kArray2 array)
Reports the allocator used for the internal data array.
Definition: kArray2.h:450
Root of all Zen classes.
Represents an error code.
kStatus kArray2_Item(kArray2 array, kSize index0, kSize index1, void *item)
Gets the value of an item.
#define kNULL
Null pointer.
Definition: kApiDef.h:269
kStatus kArray2_Attach(kArray2 array, void *items, kType itemType, kSize length0, kSize length1)
Attaches the array to an external item buffer.
kType kArray2_ItemType(kArray2 array)
Returns the array item type.
Definition: kArray2.h:391
Represents alignment options for allocations.