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