Files
bluflame/aiwaz/Aiwaz/FileSystem/CFileLoader/CFileLoader.cpp
2026-04-18 22:31:51 +02:00

89 lines
1.6 KiB
C++

#include "stdafx.h"
#include "CFileLoader.h"
#include "IFileSystem.h"
CFileLoader::~CFileLoader()
{
this->FreeFile();
}
bool CFileLoader::LoadFile(string16 argFilename)
{
m_File = m_Engine->get_FileSystem().Open(argFilename);
if (m_File != NULL)
{
std::stringstream dataStream;
dataStream.write(m_File->get_Buffer(), m_File->get_BufferLength());
while (!dataStream.eof())
{
m_CurrentLineOfCode++;
std::string currentReadLine;
std::getline(dataStream, currentReadLine);
if (currentReadLine.empty())
continue;
std::vector<std::string> token = this->SplitString(currentReadLine);
if (token.empty())
continue;
m_CurrentSection = token[0];
if (!this->OnSectionBegin(m_CurrentSection, token))
{
this->FreeFile();
return false;
}
if (token[token.size() - 1] == "{{")
m_EndSectionMarker = "}}";
else
m_EndSectionMarker = "}";
while (!dataStream.eof())
{
m_CurrentLineOfCode++;
std::getline(dataStream, currentReadLine);
if (currentReadLine.empty())
continue;
std::vector<std::string> token = this->SplitString(currentReadLine, ", \t()\r");
if (token.empty())
continue;
if (token[0] == m_EndSectionMarker)
{
if (!this->OnSectionEnd(m_CurrentSection))
{
this->FreeFile();
return false;
}
m_CurrentSection = "";
break;
}
if (!this->OnContentReceived(token, currentReadLine))
{
this->FreeFile();
return false;
}
}
}
this->FreeFile();
return true;
}
this->FreeFile();
return false;
}
void CFileLoader::FreeFile()
{
if (m_File != NULL)
delete m_File;
m_File = NULL;
}