MCPcopy Create free account
hub / github.com/beefytech/Beef / ReplaceLargerHelper

Method ReplaceLargerHelper

BeefySysLib/util/String.cpp:651–696  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

649}
650
651void StringImpl::ReplaceLargerHelper(const StringView& find, const StringView& replace)
652{
653 Array<intptr> replaceEntries;
654
655 intptr moveOffset = replace.mLength - find.mLength;
656
657 for (intptr startIdx = 0; startIdx <= mLength - find.mLength; startIdx++)
658 {
659 if (EqualsHelper(GetPtr() + startIdx, find.mPtr, find.mLength))
660 {
661 replaceEntries.Add(startIdx);
662 startIdx += find.mLength - 1;
663 }
664 }
665
666 if (replaceEntries.size() == 0)
667 return;
668
669 intptr destLength = mLength + moveOffset * replaceEntries.size();
670 intptr needSize = destLength + 1;
671 if (needSize > GetAllocSize())
672 Realloc((int_strsize)needSize);
673
674 auto replacePtr = replace.mPtr;
675 auto ptr = GetMutablePtr();
676
677 intptr lastDestStartIdx = destLength;
678 for (intptr moveIdx = replaceEntries.size() - 1; moveIdx >= 0; moveIdx--)
679 {
680 intptr srcStartIdx = replaceEntries[moveIdx];
681 intptr srcEndIdx = srcStartIdx + find.mLength;
682 intptr destStartIdx = srcStartIdx + moveIdx * moveOffset;
683 intptr destEndIdx = destStartIdx + replace.mLength;
684
685 for (intptr i = lastDestStartIdx - destEndIdx - 1; i >= 0; i--)
686 ptr[destEndIdx + i] = ptr[srcEndIdx + i];
687
688 for (intptr i = 0; i < replace.mLength; i++)
689 ptr[destStartIdx + i] = replacePtr[i];
690
691 lastDestStartIdx = destStartIdx;
692 }
693
694 ptr[destLength] = 0;
695 mLength = (int_strsize)destLength;
696}
697
698void StringImpl::Replace(char find, char replace)
699{

Callers

nothing calls this directly

Calls 2

AddMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected