2026-09-29 21:56:16 +00:00
|
|
|
// Portage UE 5.5 - voir LPStringCompat.h
|
|
|
|
|
|
|
|
|
|
#include "LPStringCompat.h"
|
|
|
|
|
|
|
|
|
|
TArray<FString> ULPStringCompat::ParseIntoArray(const FString& SourceString, const FString& Delimiter, const bool CullEmptyStrings)
|
|
|
|
|
{
|
|
|
|
|
// Transcription de FString::ParseIntoArray, UE 4.27 (String.cpp, lignes 940-963).
|
|
|
|
|
TArray<FString> OutArray;
|
|
|
|
|
const TCHAR* Start = *SourceString;
|
|
|
|
|
const int32 DelimLength = Delimiter.Len();
|
|
|
|
|
if (Start && *Start != TEXT('\0') && DelimLength)
|
|
|
|
|
{
|
|
|
|
|
while (const TCHAR* At = FCString::Strstr(Start, *Delimiter))
|
|
|
|
|
{
|
|
|
|
|
if (!CullEmptyStrings || At - Start)
|
|
|
|
|
{
|
|
|
|
|
OutArray.Emplace(UE_PTRDIFF_TO_INT32(At - Start), Start);
|
|
|
|
|
}
|
|
|
|
|
Start = At + DelimLength;
|
|
|
|
|
}
|
|
|
|
|
if (!CullEmptyStrings || *Start)
|
|
|
|
|
{
|
|
|
|
|
OutArray.Emplace(Start);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return OutArray;
|
|
|
|
|
}
|
2026-10-01 17:24:20 +00:00
|
|
|
|
|
|
|
|
int32 ULPStringCompat::FindUE4(const FString& Str, const FString& SubStr, ESearchCase::Type SearchCase, ESearchDir::Type SearchDir, int32 StartPosition)
|
|
|
|
|
{
|
|
|
|
|
// UE 4.27 : FCString::Stristr(Start, TEXT("")) ne trouve jamais rien (il cherche nul final).
|
|
|
|
|
if (SubStr.IsEmpty() && SearchCase == ESearchCase::IgnoreCase && SearchDir == ESearchDir::FromStart)
|
|
|
|
|
{
|
|
|
|
|
return INDEX_NONE;
|
|
|
|
|
}
|
|
|
|
|
return Str.Find(SubStr, SearchCase, SearchDir, StartPosition);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int32 ULPStringCompat::FindSubstring(const FString& SearchIn, const FString& Substring, bool bUseCase, bool bSearchFromEnd, int32 StartPosition)
|
|
|
|
|
{
|
|
|
|
|
// Meme corps que UKismetStringLibrary::FindSubstring, avec FindUE4.
|
|
|
|
|
const ESearchCase::Type Case = bUseCase ? ESearchCase::CaseSensitive : ESearchCase::IgnoreCase;
|
|
|
|
|
const ESearchDir::Type Dir = bSearchFromEnd ? ESearchDir::FromEnd : ESearchDir::FromStart;
|
|
|
|
|
return FindUE4(SearchIn, Substring, Case, Dir, StartPosition);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool ULPStringCompat::Contains(const FString& SearchIn, const FString& Substring, bool bUseCase, bool bSearchFromEnd)
|
|
|
|
|
{
|
|
|
|
|
return FindSubstring(SearchIn, Substring, bUseCase, bSearchFromEnd) != -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool ULPStringCompat::Split(const FString& SourceString, const FString& InStr, FString& LeftS, FString& RightS, ESearchCase::Type SearchCase, ESearchDir::Type SearchDir)
|
|
|
|
|
{
|
|
|
|
|
// Meme corps que FString::Split (4.27 et 5.5), avec FindUE4.
|
|
|
|
|
const int32 InPos = FindUE4(SourceString, InStr, SearchCase, SearchDir);
|
|
|
|
|
if (InPos < 0)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
LeftS = SourceString.Left(InPos);
|
|
|
|
|
RightS = SourceString.Mid(InPos + InStr.Len());
|
|
|
|
|
return true;
|
|
|
|
|
}
|