#include "rs_core.rsh"
#include "rs_structs.h"
/**
* Element
*/
extern uint32_t __attribute__((overloadable))
rsElementGetSubElementCount(rs_element e) {
Element_t *element = (Element_t *)e.p;
if (element == NULL) {
return 0;
}
return element->mHal.state.fieldsCount;
}
extern rs_element __attribute__((overloadable))
rsElementGetSubElement(rs_element e, uint32_t index) {
Element_t *element = (Element_t *)e.p;
if (element == NULL || index >= element->mHal.state.fieldsCount) {
rs_element nullElem = RS_NULL_OBJ;
return nullElem;
}
rs_element returnElem = {
element->mHal.state.fields[index]
#ifdef __LP64__
, 0, 0, 0
#endif
};
rs_element rs_retval = RS_NULL_OBJ;
rsSetObject(&rs_retval, returnElem);
return rs_retval;
}
extern uint32_t __attribute__((overloadable))
rsElementGetSubElementNameLength(rs_element e, uint32_t index) {
Element_t *element = (Element_t *)e.p;
if (element == NULL || index >= element->mHal.state.fieldsCount) {
return 0;
}
return element->mHal.state.fieldNameLengths[index];
}
extern uint32_t __attribute__((overloadable))
rsElementGetSubElementName(rs_element e, uint32_t index, char *name, uint32_t nameLength) {
Element_t *element = (Element_t *)e.p;
if (element == NULL || index >= element->mHal.state.fieldsCount ||
nameLength == 0 || name == 0) {
return 0;
}
uint32_t numToCopy = element->mHal.state.fieldNameLengths[index];
if (nameLength < numToCopy) {
numToCopy = nameLength;
}
// Place the null terminator manually, in case of partial string
numToCopy --;
name[numToCopy] = '\0';
const char *nameSource = element->mHal.state.fieldNames[index];
for (uint32_t i = 0; i < numToCopy; i ++) {
name[i] = nameSource[i];
}
return numToCopy;
}
extern uint32_t __attribute__((overloadable))
rsElementGetSubElementArraySize(rs_element e, uint32_t index) {
Element_t *element = (Element_t *)e.p;
if (element == NULL || index >= element->mHal.state.fieldsCount) {
return 0;
}
return element->mHal.state.fieldArraySizes[index];
}
extern uint32_t __attribute__((overloadable))
rsElementGetSubElementOffsetBytes(rs_element e, uint32_t index) {
Element_t *element = (Element_t *)e.p;
if (element == NULL || index >= element->mHal.state.fieldsCount) {
return 0;
}
return element->mHal.state.fieldOffsetBytes[index];
}
extern uint32_t __attribute__((overloadable))
rsElementGetBytesSize(rs_element e) {
Element_t *element = (Element_t *)e.p;
if (element == NULL) {
return 0;
}
return element->mHal.state.elementSizeBytes;
}
extern rs_data_type __attribute__((overloadable))
rsElementGetDataType(rs_element e) {
Element_t *element = (Element_t *)e.p;
if (element == NULL) {
return RS_TYPE_INVALID;
}
return element->mHal.state.dataType;
}
extern rs_data_kind __attribute__((overloadable))
rsElementGetDataKind(rs_element e) {
Element_t *element = (Element_t *)e.p;
if (element == NULL) {
return RS_KIND_INVALID;
}
return element->mHal.state.dataKind;
}
extern uint32_t __attribute__((overloadable))
rsElementGetVectorSize(rs_element e) {
Element_t *element = (Element_t *)e.p;
if (element == NULL) {
return 0;
}
return element->mHal.state.vectorSize;
}