MCPcopy Create free account
hub / github.com/SakuraEngine/SakuraEngine / move_impl

Function move_impl

modules/engine/runtime/src/ecs/chunk_view.cpp:103–153  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

101}
102
103static void move_impl(sugoi_chunk_view_t dstV, const sugoi_chunk_t* srcC, uint32_t srcStart, type_index_t type, EIndex srcOffset, EIndex dstOffset, uint32_t size, uint32_t align, uint32_t elemSize, void (*move)(sugoi_chunk_t* chunk, EIndex index, char* dst, sugoi_chunk_t* schunk, EIndex sindex, char* src))
104{
105 SKR_ASSERT(!type.is_chunk());
106 char* dst = dstV.chunk->data() + (size_t)dstOffset + (size_t)size * dstV.start;
107 char* src = srcC->data() + (size_t)srcOffset + (size_t)size * srcStart;
108 if (move)
109 {
110 if (type.is_buffer())
111 {
112 forloop (j, 0, dstV.count)
113 {
114 auto arrayDst = (sugoi_array_comp_t*)((size_t)j * size + dst);
115 auto arraySrc = (sugoi_array_comp_t*)((size_t)j * size + src);
116 if (!is_array_small(arraySrc)) // memory is on heap
117 *arrayDst = *arraySrc; // just steal it
118 else // memory is in chunk
119 {
120 new_array(arrayDst, size, elemSize, align);
121 arrayDst->EndX = (char*)arrayDst->BeginX + arraySrc->size_in_bytes();
122 for (char *currDst = (char*)arrayDst->BeginX, *currSrc = (char*)arraySrc->BeginX;
123 currDst != arrayDst->EndX; currDst += elemSize, currSrc += elemSize)
124 move(dstV.chunk, dstV.start + j, currDst, (sugoi_chunk_t*)srcC, srcStart + j, currSrc);
125 }
126 }
127 }
128 else
129 forloop (j, 0, dstV.count)
130 move(dstV.chunk, dstV.start + j, (size_t)j * size + dst, (sugoi_chunk_t*)srcC, srcStart + j, (size_t)j * size + src);
131 }
132 else
133 {
134 if (type.is_buffer())
135 {
136 forloop (j, 0, dstV.count)
137 {
138 auto arrayDst = (sugoi_array_comp_t*)((size_t)j * size + dst);
139 auto arraySrc = (sugoi_array_comp_t*)((size_t)j * size + src);
140 if (!is_array_small(arraySrc)) // memory is on heap
141 *arrayDst = *arraySrc; // just steal it
142 else // memory is in chunk
143 {
144 new_array(arrayDst, size, elemSize, align);
145 arrayDst->EndX = (char*)arrayDst->BeginX + arraySrc->size_in_bytes();
146 memcpy(arrayDst->BeginX, arraySrc->BeginX, arraySrc->size_in_bytes());
147 }
148 }
149 }
150 else
151 memcpy(dst, src, dstV.count * (size_t)size);
152 }
153}
154
155static void clone_impl(sugoi_chunk_view_t dstV, const sugoi_chunk_t* srcC, uint32_t srcStart, type_index_t type, EIndex srcOffset, EIndex dstOffset, uint32_t size, uint32_t align, uint32_t elemSize, resource_fields_t resourceFields, void (*copy)(sugoi_chunk_t* chunk, EIndex index, char* dst, sugoi_chunk_t* schunk, EIndex sindex, const char* src))
156{

Callers 3

move_viewFunction · 0.85
cast_viewFunction · 0.85
clone_viewFunction · 0.85

Calls 8

is_array_smallFunction · 0.85
new_arrayFunction · 0.85
memcpyFunction · 0.85
is_chunkMethod · 0.80
is_bufferMethod · 0.80
moveFunction · 0.50
dataMethod · 0.45
size_in_bytesMethod · 0.45

Tested by

no test coverage detected