void UnicodeString::Partition(UnicodeCharacter Seperator, suVector<UnicodeString> &Output) const { Output.FreeMemory(); UnicodeString CurEntry; const UINT Length = _Length; for(UINT Index = 0; Index < Length; Index++) { if(_Data[Index] == Seperator) { if(CurEntry._Length > 0) { Output.PushEnd(CurEntry); CurEntry._Length = 0; CurEntry._Data[0] = UnicodeNullTerminator; } } else { CurEntry.PushEnd(_Data[Index]); } } if(CurEntry._Length > 0) { Output.PushEnd(CurEntry); } }
void UnicodeString::Partition(const UnicodeString &Seperator, suVector<UnicodeString> &Output) const { Assert(Seperator.Length() >= 1, _T("empty seperator")); Output.FreeMemory(); UnicodeString CurEntry; for(UINT CurIndex = 0; CurIndex < Length(); CurIndex++) { bool IsSeperator = true; for(UINT TestIndex = 0; TestIndex < Seperator.Length() && CurIndex + TestIndex < Length() && IsSeperator; TestIndex++) { if(_Data[CurIndex + TestIndex] != Seperator[TestIndex]) { IsSeperator = false; } } if(IsSeperator) { if(CurEntry._Length > 0) { Output.PushEnd(CurEntry); CurEntry._Length = 0; CurEntry._Data[0] = UnicodeNullTerminator; } CurIndex += Seperator._Length - 1; } else { CurEntry.PushEnd(_Data[CurIndex]); } } if(CurEntry._Length > 0) { Output.PushEnd(CurEntry); } }
void GetUnicodeFileLines(const String &Filename, Vector<UnicodeString> &Output, UINT LineLimit) { Vector<BYTE> Data; Utility::GetFileData(Filename, Data); const UINT Length = Data.Length() / 2; const unsigned short *CArray = (unsigned short *)Data.CArray(); UINT StringCount = 0; if(LineLimit == 0) { for(UINT Index = 0; Index < Length; Index++) { unsigned short CurCharacter = CArray[Index]; if(CurCharacter == 0x000D || CurCharacter == 0x000A) { if(Index < Length - 1 && (CArray[Index + 1] == 0x000D || CArray[Index + 1] == 0x000A)) { Index++; } StringCount++; } } Output.Allocate(StringCount); } else { Output.Allocate(LineLimit); } UINT StringIndex = 0; UnicodeString *CurString = &(Output[0]); bool Done = false; for(UINT Index = 0; Index < Length && !Done; Index++) { unsigned short CurCharacter = CArray[Index]; if(CurCharacter == 0x000D || CurCharacter == 0x000A) { if(Index < Length - 1 && (CArray[Index + 1] == 0x000D || CArray[Index + 1] == 0x000A)) { Index++; } if(StringIndex == LineLimit - 1) { Done = true; } else { StringIndex++; if(StringIndex != Output.Length()) { CurString = &(Output[StringIndex]); } } } else if(CurCharacter != 0xFEFF) { //Console::WriteString(String::UnsignedIntAsHex(CurCharacter) + String(" ")); CurString->PushEnd(CurCharacter); } } if(LineLimit != 0) { Output.ReSize(StringIndex + 1); } }