rs_element.c revision 5a47020542c52af3e879c1cd67674ca979ff0a18
1#include "rs_core.rsh"
2#include "rs_graphics.rsh"
3#include "rs_structs.h"
4
5/**
6* Element
7*/
8extern uint32_t __attribute__((overloadable))
9        rsElementGetSubElementCount(rs_element e) {
10    Element_t *element = (Element_t *)e.p;
11    if (element == NULL) {
12        return 0;
13    }
14    return element->mHal.state.fieldsCount;
15}
16
17extern rs_element __attribute__((overloadable))
18        rsElementGetSubElement(rs_element e, uint32_t index) {
19    Element_t *element = (Element_t *)e.p;
20    if (element == NULL || index >= element->mHal.state.fieldsCount) {
21        rs_element nullElem = {0};
22        return nullElem;
23    }
24    rs_element returnElem = {element->mHal.state.fields[index]};
25    return returnElem;
26}
27
28extern uint32_t __attribute__((overloadable))
29        rsElementGetSubElementNameLength(rs_element e, uint32_t index) {
30    Element_t *element = (Element_t *)e.p;
31    if (element == NULL || index >= element->mHal.state.fieldsCount) {
32        return 0;
33    }
34    return element->mHal.state.fieldNameLengths[index];
35}
36
37extern uint32_t __attribute__((overloadable))
38        rsElementGetSubElementName(rs_element e, uint32_t index, char *name, uint32_t nameLength) {
39    Element_t *element = (Element_t *)e.p;
40    if (element == NULL || index >= element->mHal.state.fieldsCount ||
41        nameLength == 0 || name == 0) {
42        return 0;
43    }
44
45    uint32_t numToCopy = element->mHal.state.fieldNameLengths[index];
46    if (nameLength < numToCopy) {
47        numToCopy = nameLength;
48    }
49    // Place the null terminator manually, in case of partial string
50    numToCopy --;
51    name[numToCopy] = '\0';
52    const char *nameSource = element->mHal.state.fieldNames[index];
53    for (uint32_t i = 0; i < numToCopy; i ++) {
54        name[i] = nameSource[i];
55    }
56    return numToCopy;
57}
58
59extern uint32_t __attribute__((overloadable))
60        rsElementGetSubElementArraySize(rs_element e, uint32_t index) {
61    Element_t *element = (Element_t *)e.p;
62    if (element == NULL || index >= element->mHal.state.fieldsCount) {
63        return 0;
64    }
65    return element->mHal.state.fieldArraySizes[index];
66}
67
68extern uint32_t __attribute__((overloadable))
69        rsElementGetSubElementOffsetBytes(rs_element e, uint32_t index) {
70    Element_t *element = (Element_t *)e.p;
71    if (element == NULL || index >= element->mHal.state.fieldsCount) {
72        return 0;
73    }
74    return element->mHal.state.fieldOffsetBytes[index];
75}
76
77extern uint32_t __attribute__((overloadable))
78        rsElementGetBytesSize(rs_element e) {
79    Element_t *element = (Element_t *)e.p;
80    if (element == NULL) {
81        return 0;
82    }
83    return element->mHal.state.elementSizeBytes;
84}
85
86extern rs_data_type __attribute__((overloadable))
87        rsElementGetDataType(rs_element e) {
88    Element_t *element = (Element_t *)e.p;
89    if (element == NULL) {
90        return RS_TYPE_INVALID;
91    }
92    return element->mHal.state.dataType;
93}
94
95extern rs_data_kind __attribute__((overloadable))
96        rsElementGetDataKind(rs_element e) {
97    Element_t *element = (Element_t *)e.p;
98    if (element == NULL) {
99        return RS_KIND_INVALID;
100    }
101    return element->mHal.state.dataKind;
102}
103
104extern uint32_t __attribute__((overloadable))
105        rsElementGetVectorSize(rs_element e) {
106    Element_t *element = (Element_t *)e.p;
107    if (element == NULL) {
108        return 0;
109    }
110    return element->mHal.state.vectorSize;
111}
112