MCPcopy Create free account
hub / github.com/defold/defold / Copy

Function Copy

engine/dlib/src/dlib/buffer.cpp:417–466  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

415 }
416
417 Result Copy(const HBuffer dst_buffer_handle, const HBuffer src_buffer_handle)
418 {
419 const Buffer* dst_buffer = g_BufferContext->Get(dst_buffer_handle);
420 const Buffer* src_buffer = g_BufferContext->Get(src_buffer_handle);
421
422 // Verify stream declaration is 1:1
423 if (src_buffer->m_NumStreams != dst_buffer->m_NumStreams) {
424 return RESULT_STREAM_COUNT_MISMATCH;
425 }
426
427 for (uint8_t i = 0; i < dst_buffer->m_NumStreams; ++i)
428 {
429 const Buffer::Stream& dst_stream = dst_buffer->m_Streams[i];
430 const Buffer::Stream& src_stream = src_buffer->m_Streams[i];
431 if (src_stream.m_Name != dst_stream.m_Name ||
432 src_stream.m_Offset != dst_stream.m_Offset ||
433 src_stream.m_ValueType != dst_stream.m_ValueType ||
434 src_stream.m_ValueCount != dst_stream.m_ValueCount)
435 {
436 dmLogError("Stream mismatch: src(name: %s, offset: %u, type: %s, count: %u) != dst(name: %s, offset: %u, type: %s, count: %u)",
437 dmHashReverseSafe64(src_stream.m_Name), src_stream.m_Offset, GetValueTypeString((dmBuffer::ValueType)src_stream.m_ValueType), src_stream.m_ValueCount,
438 dmHashReverseSafe64(dst_stream.m_Name), dst_stream.m_Offset, GetValueTypeString((dmBuffer::ValueType)dst_stream.m_ValueType), dst_stream.m_ValueCount);
439 return RESULT_STREAM_MISMATCH;
440 }
441 }
442
443 // Verify destination buffer has enough of element space
444 if (src_buffer->m_Count > dst_buffer->m_Count) {
445 return RESULT_BUFFER_SIZE_ERROR;
446 }
447
448 // Get buffer pointers for dst and src
449 void* dst_bytes = 0x0;
450 uint32_t dst_size = 0;
451 dmBuffer::Result r = dmBuffer::GetBytes(dst_buffer_handle, &dst_bytes, &dst_size);
452 if (r != RESULT_OK) {
453 return r;
454 }
455 void* src_bytes = 0x0;
456 uint32_t src_size = 0;
457 r = dmBuffer::GetBytes(src_buffer_handle, &src_bytes, &src_size);
458 if (r != RESULT_OK) {
459 return r;
460 }
461
462 // Copy memory
463 memcpy(dst_bytes, src_bytes, src_size);
464
465 return RESULT_OK;
466 }
467
468 void Destroy(HBuffer hbuffer)
469 {

Callers 2

CloneFunction · 0.85
SetBufferFunction · 0.85

Calls 4

dmHashReverseSafe64Function · 0.85
GetValueTypeStringFunction · 0.85
GetBytesFunction · 0.70
GetMethod · 0.45

Tested by

no test coverage detected