123 lines
4.2 KiB
C
123 lines
4.2 KiB
C
/**
|
|
* @file kArray1.x.h
|
|
*
|
|
* @internal
|
|
* Copyright (C) 2005-2021 by LMI Technologies Inc.
|
|
* Licensed under the MIT License.
|
|
* Redistributed files must retain the above copyright notice.
|
|
*/
|
|
#ifndef K_API_ARRAY_1_X_H
|
|
#define K_API_ARRAY_1_X_H
|
|
|
|
typedef struct kArray1Class
|
|
{
|
|
kObjectClass base;
|
|
kAlloc valueAlloc; //allocator to be used for value allocations
|
|
kType itemType; //item type
|
|
kSize itemSize; //item size, in bytes
|
|
kSize allocSize; //size of allocated array memory, in bytes
|
|
void* items; //array memory
|
|
kSize length; //array length, in items
|
|
kBool isAttached; //is array memory externally owned?
|
|
kMemoryAlignment alignment; //alignment for the value array
|
|
} kArray1Class;
|
|
|
|
kDeclareClassEx(k, kArray1, kObject)
|
|
|
|
/*
|
|
* Forward declarations.
|
|
*/
|
|
|
|
kFx(kStatus) kArray1_Attach(kArray1 array, void* items, kType itemType, kSize length);
|
|
kFx(kStatus) kArray1_SetItem(kArray1 array, kSize index, const void* item);
|
|
kFx(kStatus) kArray1_Item(kArray1 array, kSize index, void* item);
|
|
kInlineFx(kSize) kArray1_Length(kArray1 array);
|
|
kInlineFx(kType) kArray1_ItemType(kArray1 array);
|
|
kInlineFx(void*) kArray1_Data(kArray1 array);
|
|
kInlineFx(void*) kArray1_DataAt(kArray1 array, kSSize index);
|
|
kInlineFx(void*) kArray1_At(kArray1 array, kSize index);
|
|
kInlineFx(kSize) kArray1_ItemSize(kArray1 array);
|
|
|
|
/*
|
|
* Private methods.
|
|
*/
|
|
kFx(kStatus) xkArray1_ConstructFramework(kArray1* array, kAlloc objectAlloc);
|
|
|
|
kFx(kStatus) xkArray1_Init(kArray1 array, kType classType, kType itemType, kSize length, kAlloc alloc, kAlloc valueAlloc, kMemoryAlignment alignment);
|
|
kFx(kStatus) xkArray1_VClone(kArray1 array, kArray1 source, kAlloc valueAlloc, kObject context);
|
|
|
|
kFx(kStatus) xkArray1_VRelease(kArray1 array);
|
|
kFx(kStatus) xkArray1_VDisposeItems(kArray1 array);
|
|
|
|
kFx(kBool) xkArray1_VHasShared(kArray1 array);
|
|
kFx(kSize) xkArray1_VSize(kArray1 array);
|
|
kFx(kAllocTrait) xkArray1_VAllocTraits(kArray1 array);
|
|
|
|
kFx(kStatus) xkArray1_WriteDat5V1(kArray1 array, kSerializer serializer);
|
|
kFx(kStatus) xkArray1_ReadDat5V1(kArray1 array, kSerializer serializer);
|
|
kFx(kStatus) xkArray1_WriteDat6V0(kArray1 array, kSerializer serializer);
|
|
kFx(kStatus) xkArray1_ReadDat6V0(kArray1 array, kSerializer serializer);
|
|
|
|
kFx(kStatus) xkArray1_Assign(kArray1 array, kArray1 source, kObject context);
|
|
kFx(kStatus) xkArray1_Realloc(kArray1 array, kSize length);
|
|
|
|
//kCollection
|
|
kFx(kIterator) xkArray1_GetIterator(kArray1 array);
|
|
kFx(kBool) xkArray1_HasNext(kArray1 array, kIterator iterator);
|
|
kFx(void*) xkArray1_Next(kArray1 array, kIterator* iterator);
|
|
|
|
//kArrayProvider
|
|
kFx(kStatus) xkArray1_ConstructDefaultEx(kArray1* array, kAlloc objectAlloc, kAlloc valueAlloc);
|
|
kFx(kStatus) xkArray1_Imitate(kArray1 array, kArray1 source);
|
|
|
|
kInlineFx(kStatus) xkArray1_AttachT(kArray1 array, void* items, kType itemType, kSize length, kSize itemSize)
|
|
{
|
|
kAssert(xkType_IsPointerCompatible(itemType, itemSize));
|
|
|
|
return kArray1_Attach(array, items, itemType, length);
|
|
}
|
|
|
|
kInlineFx(kStatus) xkArray1_SetItemT(kArray1 array, kSize index, const void* item, kSize itemSize)
|
|
{
|
|
kAssert(xkType_IsPointerCompatible(kArray1_ItemType(array), itemSize));
|
|
|
|
return kArray1_SetItem(array, index, item);
|
|
}
|
|
|
|
kInlineFx(kStatus) xkArray1_ItemT(kArray1 array, kSize index, void* item, kSize itemSize)
|
|
{
|
|
kAssert(xkType_IsPointerCompatible(kArray1_ItemType(array), itemSize));
|
|
|
|
return kArray1_Item(array, index, item);
|
|
}
|
|
|
|
kInlineFx(void*) xkArray1_DataT(kArray1 array, kSize itemSize)
|
|
{
|
|
kAssert(xkType_IsPointerCompatible(kArray1_ItemType(array), itemSize));
|
|
|
|
return kArray1_Data(array);
|
|
}
|
|
|
|
kInlineFx(void*) xkArray1_DataAtT(kArray1 array, kSSize index, kSize itemSize)
|
|
{
|
|
kAssert(xkType_IsPointerCompatible(kArray1_ItemType(array), itemSize));
|
|
|
|
return kArray1_DataAt(array, index);
|
|
}
|
|
|
|
kInlineFx(void*) xkArray1_AtT(kArray1 array, kSize index, kSize itemSize)
|
|
{
|
|
kAssert(xkType_IsPointerCompatible(kArray1_ItemType(array), itemSize));
|
|
|
|
return kArray1_At(array, index);
|
|
}
|
|
|
|
kInlineFx(void*) xkArray1_AsT(kArray1 array, kSize index, kSize itemSize)
|
|
{
|
|
kAssert(itemSize == kArray1_ItemSize(array));
|
|
|
|
return kArray1_At(array, index);
|
|
}
|
|
|
|
#endif
|