Files
handleaiuinew/env/LMI/include/kApi/Data/kArrayProvider.h
T
2024-05-18 23:53:26 +08:00

143 lines
4.4 KiB
C

/**
* @file kArrayProvider.h
* @brief Declares the kArrayProvider interface.
*
* @internal
* Copyright (C) 2020-2021 by LMI Technologies Inc.
* Licensed under the MIT License.
* Redistributed files must retain the above copyright notice.
*/
#ifndef K_API_ARRAY_PROVIDER_H
#define K_API_ARRAY_PROVIDER_H
#include <kApi/kApiDef.h>
#include <kApi/Data/kArrayProvider.x.h>
/**
* @interface kArrayProvider
* @ingroup kApi-Data
* @brief Supports operations on contiguous array-based data types.
*/
//typedef kObject kArrayProvider; --forward-declared in kApiDef.x.h
/**
* Constructs a default instance of the specified array provided type.
*
* @public @memberof kArrayProvider
* @param provider Receives constructed ArrayProvider object.
* @param type Type of object to be constructed.
* @param objectAllocator Object memory allocator (or kNULL for default).
* @param valueAllocator Value memory allocator (or kNULL for default).
* @return Operation status.
*/
kInlineFx(kStatus) kArrayProvider_Construct(kArrayProvider* provider, kType type, kAlloc objectAllocator, kAlloc valueAllocator)
{
return kType_IVTableT(type, kArrayProvider)->VConstructDefault(provider, objectAllocator, valueAllocator);
}
/**
* Performs a shallow copy of the source array.
*
* Source items are copied by value; if the source array contains objects, the object
* handles are copied but the objects are not cloned.
*
* @public @memberof kArrayProvider
* @param provider ArrayProvider object.
* @param source Source array to be copied.
* @param context Context for copy operation (allocator specific; not usually required).
* @return Operation status.
*/
#if defined(K_CPP)
kInlineFx(kStatus) kArrayProvider_Assign(kArrayProvider provider, kArrayProvider source, kObject context = kNULL)
{
return xkArrayProvider_VTable(provider)->VAssign(provider, source, context);
}
#endif
/**
* Copies the properties of a source array, such as its dimensions, without copying its data.
*
* @public @memberof kArrayProvider
* @param provider ArrayProvider object.
* @param source Source array to be imitated.
* @return Operation status.
*/
kInlineFx(kStatus) kArrayProvider_Imitate(kArrayProvider provider, kArrayProvider source)
{
return xkArrayProvider_VTable(provider)->VImitate(provider, source);
}
/**
* Returns the array item type.
*
* @public @memberof kArrayProvider
* @param provider ArrayProvider object.
* @return Array item type.
*/
kInlineFx(kType) kArrayProvider_ItemType(kArrayProvider provider)
{
return xkArrayProvider_VTable(provider)->VItemType(provider);
}
/**
* Returns the array item size.
*
* @public @memberof kArrayProvider
* @param provider ArrayProvider object.
* @return Item size, in bytes.
*/
kInlineFx(kSize) kArrayProvider_ItemSize(kArrayProvider provider)
{
return kType_Size(kArrayProvider_ItemType(provider));
}
/**
* Gets the array element count.
*
* @public @memberof kArrayProvider
* @param provider ArrayProvider object.
* @return Item count.
*/
kInlineFx(kSize) kArrayProvider_Count(kArrayProvider provider)
{
return xkArrayProvider_VTable(provider)->VCount(provider);
}
/**
* Gets a pointer to the array element data.
*
* @public @memberof kArrayProvider
* @param provider ArrayProvider object.
* @return Array data pointer.
*/
kInlineFx(kPointer) kArrayProvider_Data(kArrayProvider provider)
{
return xkArrayProvider_VTable(provider)->VData(provider);
}
/**
* Reports the size, in bytes, of the array item buffer.
*
* @public @memberof kArrayProvider
* @param provider ArrayProvider object.
* @return Size of array item buffer (bytes).
*/
kInlineFx(kSize) kArrayProvider_DataSize(kArrayProvider provider)
{
return xkArrayProvider_VTable(provider)->VDataSize(provider);
}
/**
* Reports the value allocator that was optionally provided at construction time.
*
* @public @memberof kArrayProvider
* @param provider ArrayProvider object.
* @return Allocator for internal data array.
*/
kInlineFx(kAlloc) kArrayProvider_ValueAlloc(kArrayProvider provider)
{
return xkArrayProvider_VTable(provider)->VDataAlloc(provider);
}
#endif