MCPcopy Create free account
hub / github.com/Pagghiu/SaneCppLibraries / getWritableData

Method getWritableData

Libraries/AsyncStreams/AsyncStreams.cpp:103–134  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

101}
102
103Result AsyncBuffersPool::getWritableData(AsyncBufferView::ID bufferID, Span<char>& data)
104{
105 AsyncBufferView* buffer = getBuffer(bufferID);
106 SC_TRY_MSG(buffer != nullptr, "AsyncBuffersPool::getWritableData - Invalid bufferID");
107 switch (buffer->type)
108 {
109 case AsyncBufferView::Type::Writable:
110 SC_TRY(buffer->writableData.sliceStartLength(buffer->offset, buffer->length, data));
111 break;
112 case AsyncBufferView::Type::Child: {
113 AsyncBufferView* parent = getBuffer(buffer->parentID);
114 SC_TRY_MSG(parent != nullptr, "AsyncBuffersPool::getWritableData - Invalid parentID");
115 if (parent->type == AsyncBufferView::Type::Growable)
116 {
117 AsyncBufferView::GrowableStorage storage;
118
119 auto da = parent->getGrowableBuffer(storage, true)->getDirectAccess();
120 Span<char> rootFullData = {static_cast<char*>(da.data), da.sizeInBytes};
121 SC_TRY(rootFullData.sliceStartLength(buffer->offset, buffer->length, data));
122 buffer->writableData = data; // Update for debugging visibility
123 (void)parent->getGrowableBuffer(storage, false); // destruct
124 }
125 else
126 {
127 data = buffer->writableData;
128 }
129 break;
130 }
131 default: return Result::Error("AsyncBuffersPool::getWritableData - Readonly or Growable buffer");
132 }
133 return Result(true);
134}
135
136AsyncBufferView* AsyncBuffersPool::getBuffer(AsyncBufferView::ID bufferID)
137{

Callers 7

onDataMethod · 0.80
onDataMethod · 0.80
readableSyncStreamMethod · 0.80
readableAsyncStreamMethod · 0.80
createChildViewMethod · 0.80
onStreamReceiveMethod · 0.80
onDataMethod · 0.80

Calls 2

ErrorEnum · 0.50
ResultClass · 0.50

Tested by 5

onDataMethod · 0.64
onDataMethod · 0.64
readableSyncStreamMethod · 0.64
readableAsyncStreamMethod · 0.64
createChildViewMethod · 0.64