Zen API
 All Classes Files Functions Variables Typedefs Friends Macros Modules Pages
kArray1.h
Go to the documentation of this file.
1 
10 #ifndef K_API_ARRAY_1_H
11 #define K_API_ARRAY_1_H
12 
13 #include <kApi/kApiDef.h>
14 #include <kApi/Data/kArray1.x.h>
15 
35 //typedef kObject kArray1; --forward-declared in kApiDef.x.h
36 
47 kFx(kStatus) kArray1_Construct(kArray1* array, kType itemType, kSize length, kAlloc allocator);
48 
49 #if defined(K_CPP)
50 
62 kFx(kStatus) kArray1_ConstructEx(kArray1* array, kType itemType, kSize length, kAlloc allocator, kAlloc valueAllocator, kMemoryAlignment valueAlignment = kALIGN_ANY);
63 #endif
64 
74 kFx(kStatus) kArray1_Allocate(kArray1 array, kType itemType, kSize length);
75 
88 {
89  return kArray1_Allocate(array, kArray1_ItemType(array), length);
90 }
91 
104 kFx(kStatus) kArray1_Attach(kArray1 array, void* items, kType itemType, kSize length);
105 
121 #define kArray1_AttachT(kArray1_array, TPtr_items, kType_itemType, kSize_length) \
122  xkArray1_AttachT(kArray1_array, TPtr_items, kType_itemType, kSize_length, sizeof(*(TPtr_items)))
123 
136 {
137  return xkArray1_Assign(array, source, kNULL);
138 }
139 
152 #if defined (K_CPP)
154 {
155  return xkArray1_Assign(array, source, context);
156 }
157 #endif
158 
166 kFx(kStatus) kArray1_Zero(kArray1 array);
167 
177 kFx(kStatus) kArray1_SetItem(kArray1 array, kSize index, const void* item);
178 
191 #define kArray1_SetItemT(kArray1_array, kSize_index, TPtr_item) \
192  xkArray1_SetItemT(kArray1_array, kSize_index, TPtr_item, sizeof(*(TPtr_item)))
193 
203 kFx(kStatus) kArray1_Item(kArray1 array, kSize index, void* item);
204 
217 #define kArray1_ItemT(kArray1_array, kSize_index, TPtr_item) \
218  xkArray1_ItemT(kArray1_array, kSize_index, TPtr_item, sizeof(*(TPtr_item)))
219 
233 #define kArray1_SetAsT(kArray1_array, kSize_index, T_value, T) \
234  (kPointer_WriteAs(xkArray1_AsT(kArray1_array, kSize_index, sizeof(T)), T_value, T), (void)0)
235 
249 #define kArray1_AsT(kArray1_array, kSize_index, T) \
250  kPointer_ReadAs(xkArray1_AsT(kArray1_array, kSize_index, sizeof(T)), T)
251 
260 {
261  kObj(kArray1, array);
262 
263  return obj->items;
264 }
265 
277 #define kArray1_DataT(kArray1_array, T) \
278  kCast(T*, xkArray1_DataT(kArray1_array, sizeof(T)))
279 
291 {
292  kObj(kArray1, array);
293 
294  return kPointer_ItemOffset(obj->items, index, obj->itemSize);
295 }
296 
311 #define kArray1_DataAtT(kArray1_array, kSSize_index, T) \
312  kCast(T*, xkArray1_DataAtT(kArray1_array, kSSize_index, sizeof(T)))
313 
322 {
323  kObj(kArray1, array);
324 
325  return obj->length * obj->itemSize;
326 }
327 
339 kInlineFx(void*) kArray1_At(kArray1 array, kSize index)
340 {
341 # if !defined(K_FSS_912_DISABLE_BOUNDS_CHECK)
342  {
343  kAssert(index < kArray1_Length(array));
344  }
345 # endif
346 
347  return kArray1_DataAt(array, (kSSize)index);
348 }
349 
363 #define kArray1_AtT(kArray1_array, kSize_index, T) \
364  kCast(T*, xkArray1_AtT(kArray1_array, kSize_index, sizeof(T)))
365 
374 {
375  kObj(kArray1, array);
376 
377  return obj->itemType;
378 }
379 
388 {
389  kObj(kArray1, array);
390 
391  return obj->itemSize;
392 }
393 
402 {
403  kObj(kArray1, array);
404 
405  return obj->length;
406 }
407 
419 {
420  kObj(kArray1, array);
421 
422  return obj->length;
423 }
424 
433 {
434  kObj(kArray1, array);
435 
436  return kType_IsValue(obj->itemType) ? obj->valueAlloc : kObject_Alloc(array);
437 }
438 
439 #endif
kBool kType_IsValue(kType type)
Determines whether a type represents a value (primitive, struct, enum).
Definition: kType.h:103
Represents a 1D array.
kStatus kArray1_Zero(kArray1 array)
Sets all array element bits to zero.
kAlloc kObject_Alloc(kObject object)
Gets the memory allocator associated with this object.
Definition: kObject.h:329
kType kArray1_ItemType(kArray1 array)
Returns the array item type.
Definition: kArray1.h:373
kAlloc kArray1_DataAlloc(kArray1 array)
Reports the allocator used for the internal data array.
Definition: kArray1.h:432
Represents an unsigned integer that can store a pointer address.
kStatus kArray1_Allocate(kArray1 array, kType itemType, kSize length)
Reallocates the internal array item buffer.
Abstract base class for memory allocator types.
void * kArray1_Data(kArray1 array)
Returns a pointer to the array item buffer.
Definition: kArray1.h:259
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
void * kArray1_DataAt(kArray1 array, kSSize index)
Calculates an address relative to the start of the buffer.
Definition: kArray1.h:290
kStatus kArray1_ConstructEx(kArray1 *array, kType itemType, kSize length, kAlloc allocator, kAlloc valueAllocator, kMemoryAlignment valueAlignment=kALIGN_ANY)
Constructs a kArray1 object using a separate allocator for data array memory.
Represents a signed integer that can store a pointer address.
kSize kArray1_ItemSize(kArray1 array)
Returns the array item size.
Definition: kArray1.h:387
void * kArray1_At(kArray1 array, kSize index)
Returns a pointer to the specified item in the array.
Definition: kArray1.h:339
kStatus kArray1_Construct(kArray1 *array, kType itemType, kSize length, kAlloc allocator)
Constructs a kArray1 object.
#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
Core Zen type declarations.
kStatus kArray1_Item(kArray1 array, kSize index, void *item)
Gets the value of an item.
Represents metadata about a type (class, interface, or value).
kSize kArray1_DataSize(kArray1 array)
Reports the size, in bytes, of the array item buffer.
Definition: kArray1.h:321
kStatus kArray1_Resize(kArray1 array, kSize length)
Resizes the internal array item buffer.
Definition: kArray1.h:87
#define kAssert(EXPRESSION)
Aborts execution if EXPRESSION is kFALSE.
Definition: kApiDef.h:751
kSize kArray1_Count(kArray1 array)
Returns the array item count, in elements.
Definition: kArray1.h:418
Root of all Zen classes.
Represents an error code.
#define kNULL
Null pointer.
Definition: kApiDef.h:269
kStatus kArray1_SetItem(kArray1 array, kSize index, const void *item)
Sets the value of an item.
kStatus kArray1_Assign(kArray1 array, kArray1 source)
Performs a shallow copy of the source array.
Definition: kArray1.h:135
Represents alignment options for allocations.
kStatus kArray1_Attach(kArray1 array, void *items, kType itemType, kSize length)
Attaches the array to an external item buffer.
kSize kArray1_Length(kArray1 array)
Returns the array length, in elements.
Definition: kArray1.h:401