DelimStringReader

This commit is contained in:
Silent 2017-03-23 11:30:06 +01:00
parent d40fff0b05
commit b2c9b188b3
4 changed files with 60 additions and 16 deletions

View file

@ -0,0 +1,51 @@
#pragma once
template<typename T>
class BasicDelimStringReader
{
public:
BasicDelimStringReader( size_t size )
: m_buffer( new T[size] ), m_size( size )
{
m_cursor = m_buffer;
}
~BasicDelimStringReader()
{
delete[] m_buffer;
}
inline T* GetBuffer() const
{
return m_buffer;
}
inline size_t GetSize() const
{
return m_size;
}
const T* GetString( size_t* size = nullptr )
{
if ( *m_cursor == '\0' )
{
if ( size != nullptr ) *size = 0;
return nullptr;
}
const T* curString = m_cursor;
size_t len = 0;
while ( *m_cursor++ != '\0' ) len++;
if ( size != nullptr ) *size = len;
return curString;
}
private:
T* m_buffer;
const T* m_cursor;
size_t m_size;
};
typedef BasicDelimStringReader<char> DelimStringReader;
typedef BasicDelimStringReader<wchar_t> WideDelimStringReader;

View file

@ -154,6 +154,7 @@ copy /y "$(TargetPath)" "D:\gry\GTA San Andreas clean\scripts\newsteam_r2_lowvio
</FxCompile> </FxCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\SilentPatch\DelimStringReader.h" />
<ClInclude Include="..\SilentPatch\FLAC\callback.h" /> <ClInclude Include="..\SilentPatch\FLAC\callback.h" />
<ClInclude Include="..\SilentPatch\FLAC\export.h" /> <ClInclude Include="..\SilentPatch\FLAC\export.h" />
<ClInclude Include="..\SilentPatch\FLAC\format.h" /> <ClInclude Include="..\SilentPatch\FLAC\format.h" />

View file

@ -137,6 +137,9 @@
<ClInclude Include="..\SilentPatch\resource1.h"> <ClInclude Include="..\SilentPatch\resource1.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\SilentPatch\DelimStringReader.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="Shaders.rc"> <ResourceCompile Include="Shaders.rc">

View file

@ -4,6 +4,7 @@
#include <vector> #include <vector>
#include "VehicleSA.h" #include "VehicleSA.h"
#include "TimerSA.h" #include "TimerSA.h"
#include "DelimStringReader.h"
std::vector<unsigned int> vecRotorExceptions; std::vector<unsigned int> vecRotorExceptions;
@ -56,27 +57,15 @@ static RpMaterial* SetCompAlphaCB(RpMaterial* pMaterial, void* data)
void ReadRotorFixExceptions(const wchar_t* pPath) void ReadRotorFixExceptions(const wchar_t* pPath)
{ {
const size_t SCRATCH_PAD_SIZE = 32767; const size_t SCRATCH_PAD_SIZE = 32767;
wchar_t* buf = new wchar_t[ SCRATCH_PAD_SIZE ]; WideDelimStringReader reader( SCRATCH_PAD_SIZE );
GetPrivateProfileSectionW( L"RotorFixExceptions", buf, SCRATCH_PAD_SIZE, pPath ); GetPrivateProfileSectionW( L"RotorFixExceptions", reader.GetBuffer(), reader.GetSize(), pPath );
for( wchar_t* raw = buf; *raw != '\0'; ++raw ) while ( const wchar_t* str = reader.GetString() )
{ {
// Construct a std::wstring with the line unsigned int toList = _wtoi( str );
wchar_t fileID[128];
wchar_t* ptr = fileID;
do
{
*ptr++ = *raw++;
}
while ( *raw != '\0' && ptr < fileID + (_countof(fileID)-1) );
*ptr = '\0';
unsigned int toList = _wtoi( fileID );
if ( toList != 0 ) if ( toList != 0 )
vecRotorExceptions.push_back( toList ); vecRotorExceptions.push_back( toList );
} }
delete[] buf;
} }
void CVehicle::SetComponentAtomicAlpha(RpAtomic* pAtomic, int nAlpha) void CVehicle::SetComponentAtomicAlpha(RpAtomic* pAtomic, int nAlpha)