| 40 | char* buffer, char** data_start, char** data_last, int index, char* pointer_base); |
| 41 | |
| 42 | static void DefaultLuaValueToDDF(lua_State* L, const dmDDF::FieldDescriptor* f, |
| 43 | char* buffer, char** data_start, char** data_end, const char* default_value, char* pointer_base) |
| 44 | { |
| 45 | switch (f->m_Type) |
| 46 | { |
| 47 | case dmDDF::TYPE_INT32: |
| 48 | { |
| 49 | *((int32_t *) &buffer[f->m_Offset]) = *((int32_t*) default_value); |
| 50 | } |
| 51 | break; |
| 52 | |
| 53 | case dmDDF::TYPE_UINT32: |
| 54 | { |
| 55 | *((uint32_t *) &buffer[f->m_Offset]) = *((uint32_t*) default_value); |
| 56 | } |
| 57 | break; |
| 58 | |
| 59 | case dmDDF::TYPE_UINT64: |
| 60 | { |
| 61 | *((dmhash_t *) &buffer[f->m_Offset]) = *((dmhash_t*) default_value); |
| 62 | } |
| 63 | break; |
| 64 | |
| 65 | case dmDDF::TYPE_BOOL: |
| 66 | { |
| 67 | *((bool *) &buffer[f->m_Offset]) = *((bool*) default_value); |
| 68 | } |
| 69 | break; |
| 70 | |
| 71 | case dmDDF::TYPE_FLOAT: |
| 72 | { |
| 73 | *((float *) &buffer[f->m_Offset]) = *((float*) default_value); |
| 74 | } |
| 75 | break; |
| 76 | |
| 77 | case dmDDF::TYPE_STRING: |
| 78 | { |
| 79 | const char* s = default_value; |
| 80 | int size = strlen(s) + 1; |
| 81 | if (*data_start + size > *data_end) |
| 82 | { |
| 83 | luaL_error(L, "Message data doesn't fit"); |
| 84 | } |
| 85 | else |
| 86 | { |
| 87 | memcpy(*data_start, s, size); |
| 88 | // NOTE: We store offset here an relocate later... |
| 89 | *((const char**) &buffer[f->m_Offset]) = (const char*) (*data_start - pointer_base); |
| 90 | } |
| 91 | *data_start += size; |
| 92 | } |
| 93 | break; |
| 94 | |
| 95 | case dmDDF::TYPE_ENUM: |
| 96 | { |
| 97 | *((int32_t *) &buffer[f->m_Offset]) = *((int32_t*) default_value); |
| 98 | } |
| 99 | break; |
no test coverage detected