MCPcopy Create free account
hub / github.com/catboost/catboost / DoCopy

Method DoCopy

util/thread/lfqueue.h:143–169  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

141 PrevFirst = nullptr;
142 }
143 void DoCopy(TListNode* ptr) {
144 TListNode* newFirst = ptr;
145 TListNode* newCopy = nullptr;
146 TListNode* newTail = nullptr;
147 while (ptr) {
148 if (ptr == PrevFirst) {
149 // short cut, we have copied this part already
150 Tail->Next.store(newCopy, std::memory_order_release);
151 newCopy = Copy;
152 Copy = nullptr; // do not destroy prev try
153 if (!newTail) {
154 newTail = Tail; // tried to invert same list
155 }
156 break;
157 }
158 TListNode* newElem = new TListNode(ptr->Data, newCopy);
159 newCopy = newElem;
160 ptr = ptr->Next.load(std::memory_order_acquire);
161 if (!newTail) {
162 newTail = newElem;
163 }
164 }
165 EraseList(Copy); // copy was useless
166 Copy = newCopy;
167 PrevFirst = newFirst;
168 Tail = newTail;
169 }
170 };
171
172 void EnqueueImpl(TListNode* head, TListNode* tail) {

Callers 1

DequeueMethod · 0.80

Calls 3

EraseListFunction · 0.50
storeMethod · 0.45
loadMethod · 0.45

Tested by

no test coverage detected