// Portage UE 5.5 - voir LPStringCompat.h #include "LPStringCompat.h" TArray ULPStringCompat::ParseIntoArray(const FString& SourceString, const FString& Delimiter, const bool CullEmptyStrings) { // Transcription de FString::ParseIntoArray, UE 4.27 (String.cpp, lignes 940-963). TArray 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; } 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; }