| 107 | } |
| 108 | |
| 109 | static void UnityValueToDDF(lua_State* L, const dmDDF::FieldDescriptor* f, char* buffer, char** data_start, char** data_end, char* pointer_base) |
| 110 | { |
| 111 | switch (f->m_Type) |
| 112 | { |
| 113 | case dmDDF::TYPE_INT32: |
| 114 | { |
| 115 | *((int32_t *) &buffer[f->m_Offset]) = 0; |
| 116 | } |
| 117 | break; |
| 118 | |
| 119 | case dmDDF::TYPE_UINT32: |
| 120 | { |
| 121 | *((uint32_t *) &buffer[f->m_Offset]) = 0; |
| 122 | } |
| 123 | break; |
| 124 | |
| 125 | case dmDDF::TYPE_UINT64: |
| 126 | { |
| 127 | *((dmhash_t *) &buffer[f->m_Offset]) = 0; |
| 128 | } |
| 129 | break; |
| 130 | |
| 131 | case dmDDF::TYPE_BOOL: |
| 132 | { |
| 133 | *((bool *) &buffer[f->m_Offset]) = false; |
| 134 | } |
| 135 | break; |
| 136 | |
| 137 | case dmDDF::TYPE_FLOAT: |
| 138 | { |
| 139 | *((float *) &buffer[f->m_Offset]) = 0; |
| 140 | } |
| 141 | break; |
| 142 | |
| 143 | case dmDDF::TYPE_STRING: |
| 144 | { |
| 145 | const char* s = ""; |
| 146 | int size = strlen(s) + 1; |
| 147 | if (*data_start + size > *data_end) |
| 148 | { |
| 149 | luaL_error(L, "Message data doesn't fit"); |
| 150 | } |
| 151 | else |
| 152 | { |
| 153 | memcpy(*data_start, s, size); |
| 154 | // NOTE: We store offset here an relocate later... |
| 155 | *((const char**) &buffer[f->m_Offset]) = (const char*) (*data_start - pointer_base); |
| 156 | } |
| 157 | *data_start += size; |
| 158 | } |
| 159 | break; |
| 160 | |
| 161 | case dmDDF::TYPE_ENUM: |
| 162 | { |
| 163 | *((int32_t *) &buffer[f->m_Offset]) = 0; |
| 164 | } |
| 165 | break; |
| 166 |
no test coverage detected