Files
containers/sources/container.c
T

137 lines
2.9 KiB
C

#include "malunal/container.h"
const uuid_t UUID_CONTAINER_T = {
.tl = 0xF4784CF5,
.tm = 0xFE95,
.thv = 0x4529,
.csr = 0xBD,
.csl = 0x6D,
.nbs = {
0x82, 0x53, 0x70,
0x85, 0xC4, 0xAE
}
};
static
malunal_cstr_t
describe(malunal_int32_t code) {
switch (code) {
case CONTAINER_ERROR_FAILURE:
return "Generic container error";
case CONTAINER_ERROR_NULL_CONTAINER:
return "Container provided was null";
case CONTAINER_ERROR_OUT_OF_BOUNDS:
return "Index into container was out of bounds";
}
return "Unknown container error";
}
const error_domain_t ERROR_DOMAIN_CONTAINER_T = {
.describe = &describe,
.name = "malunal.container.error"
};
error_t
container_allocator(
container_iptr_t container,
allocator_mptr_t* out
) {
return container != null
? container->vtable->allocator(container, out)
: (error_t) {
.domain = &ERROR_DOMAIN_CONTAINER_T,
.code = CONTAINER_ERROR_NULL_CONTAINER
};
}
error_t
container_stride(
container_iptr_t container,
malunal_size_t* out
) {
return container != null
? container->vtable->stride(container, out)
: (error_t) {
.domain = &ERROR_DOMAIN_CONTAINER_T,
.code = CONTAINER_ERROR_NULL_CONTAINER
};
}
error_t
container_count(
container_iptr_t container,
malunal_size_t* out
) {
return container != null
? container->vtable->count(container, out)
: (error_t) {
.domain = &ERROR_DOMAIN_CONTAINER_T,
.code = CONTAINER_ERROR_NULL_CONTAINER
};
}
error_t
container_capacity(
container_iptr_t container,
malunal_size_t* out
) {
return container != null
? container->vtable->capacity(container, out)
: (error_t) {
.domain = &ERROR_DOMAIN_CONTAINER_T,
.code = CONTAINER_ERROR_NULL_CONTAINER
};
}
error_t
container_append(
container_mptr_t container,
malunal_iptr_t element
) {
return container != null
? container->vtable->append(container, element)
: (error_t) {
.domain = &ERROR_DOMAIN_CONTAINER_T,
.code = CONTAINER_ERROR_NULL_CONTAINER
};
}
error_t
container_remove(
container_mptr_t container,
malunal_iptr_t element
) {
return container != null
? container->vtable->remove(container, element)
: (error_t) {
.domain = &ERROR_DOMAIN_CONTAINER_T,
.code = CONTAINER_ERROR_NULL_CONTAINER
};
}
error_t
container_contains(
container_iptr_t container,
malunal_iptr_t element
) {
return container != null
? container->vtable->contains(container, element)
: (error_t) {
.domain = &ERROR_DOMAIN_CONTAINER_T,
.code = CONTAINER_ERROR_NULL_CONTAINER
};
}
error_t
container_clear(
container_mptr_t container
) {
return container != null
? container->vtable->clear(container)
: (error_t) {
.domain = &ERROR_DOMAIN_CONTAINER_T,
.code = CONTAINER_ERROR_NULL_CONTAINER
};
}