MCPcopy Create free account
hub / github.com/HoShiMin/Kernel-Bridge / Resize

Method Resize

Kernel-Bridge/API/StringsAPI.h:585–634  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

583 }
584
585 void Resize(size_t Characters, TChar Filler = 0, bool AutoShrink = false) {
586 if (Characters == Data.Length) {
587 if (AutoShrink) Shrink();
588 return;
589 }
590
591 if (!Characters) {
592 if (AutoShrink) {
593 Clear();
594 } else {
595 Data.Buffer[0] = NullChar;
596 Data.Length = 0;
597 }
598 return;
599 }
600
601 if (Characters > Data.Length) {
602 size_t RequiredSize = (Characters + 1) * sizeof(TChar);
603 if (RequiredSize <= Data.BufferSize) {
604 if (Filler == 0)
605 RtlZeroMemory(&Data.Buffer[Data.Length], (Characters - Data.Length) * sizeof(TChar));
606 else {
607 for (size_t Index = Data.Length; Index < Characters; ++Index)
608 Data.Buffer[Index] = Filler;
609 }
610 Data.Buffer[Characters] = NullChar;
611 Data.Length = Characters;
612 return;
613 }
614
615 STRING_INFO StringInfo = {};
616 if (Alloc(&StringInfo, Characters)) {
617 Copy(StringInfo.Buffer, Data.Buffer, Data.Length);
618 if (Filler == 0)
619 RtlZeroMemory(&StringInfo.Buffer[Data.Length], (Characters - Data.Length) * sizeof(TChar));
620 else {
621 for (size_t Index = Data.Length; Index < Characters; ++Index)
622 StringInfo.Buffer[Index] = Filler;
623 }
624 StringInfo.Buffer[Characters] = NullChar;
625 StringInfo.Length = Characters;
626 Free(&Data);
627 Data = StringInfo;
628 }
629 } else {
630 Data.Buffer[Characters] = NullChar;
631 Data.Length = Characters;
632 }
633 if (AutoShrink) Shrink();
634 }
635
636 void Reserve(size_t Characters) {
637 if (Characters == Data.Length) return;

Callers 2

FormatAnsiFunction · 0.80
FormatWideFunction · 0.80

Calls 1

AllocFunction · 0.85

Tested by

no test coverage detected