mirror of
https://github.com/VCMP-SqMod/SqMod.git
synced 2026-07-17 14:07:09 +02:00
Rename source to module.
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
#include "Library/System/Dir.hpp"
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
namespace SqMod {
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
SQMODE_DECL_TYPENAME(TypenameD, _SC("SqSysDir"))
|
||||
SQMODE_DECL_TYPENAME(TypenameF, _SC("SqSysFile"))
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
LightObj SysDir::ReadFile() const
|
||||
{
|
||||
Validate("read current file");
|
||||
// Create a file instance
|
||||
std::unique_ptr< SysFile > mem = std::make_unique< SysFile >();
|
||||
// Turn it into a script object
|
||||
LightObj obj(mem.get());
|
||||
// Will hold the raw object pointer
|
||||
SysFile * ptr = nullptr;
|
||||
// Release it if it was taken over by the script engine
|
||||
if (obj.IsNull())
|
||||
{
|
||||
STHROWF("Failed to create a SqSysFile object.");
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr = mem.release();
|
||||
}
|
||||
// The file handle where it will be opened
|
||||
tinydir_file * handle = ptr->GetOrMake();
|
||||
// Attempt to read the current file
|
||||
if (tinydir_readfile(mHandle.get(), handle) == -1)
|
||||
{
|
||||
STHROWF("Failed to read current file.");
|
||||
}
|
||||
// Return the resulted object
|
||||
return obj;
|
||||
}
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
LightObj SysDir::ReadFileAt(SQInteger i) const
|
||||
{
|
||||
Validate("read scanned file");
|
||||
// Make sure the specified directory index is valid
|
||||
if (i < 0)
|
||||
{
|
||||
STHROWF("File index (" PRINT_INT_FMT " < 0) our of bounds.", i);
|
||||
}
|
||||
if (static_cast< size_t >(i) >= mHandle->n_files)
|
||||
{
|
||||
STHROWF("File index (" PRINT_INT_FMT " >= " PRINT_SZ_FMT ") our of bounds.", i, mHandle->n_files);
|
||||
}
|
||||
// Create a file instance
|
||||
std::unique_ptr< SysFile > mem = std::make_unique< SysFile >();
|
||||
// Turn it into a script object
|
||||
LightObj obj(mem.get());
|
||||
// Will hold the raw object pointer
|
||||
SysFile * ptr = nullptr;
|
||||
// Release it if it was taken over by the script engine
|
||||
if (obj.IsNull())
|
||||
{
|
||||
STHROWF("Failed to create a SqSysFile object.");
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr = mem.release();
|
||||
}
|
||||
// The file handle where it will be opened
|
||||
tinydir_file * handle = ptr->GetOrMake();
|
||||
// Attempt to read the current file
|
||||
if (tinydir_readfile_n(mHandle.get(), handle, i) == -1)
|
||||
{
|
||||
STHROWF("Failed to read file at index (" PRINT_INT_FMT ")", i);
|
||||
}
|
||||
// Return the resulted object
|
||||
return obj;
|
||||
}
|
||||
|
||||
// ================================================================================================
|
||||
void Register_SysDir(HSQUIRRELVM vm)
|
||||
{
|
||||
RootTable(vm).Bind(TypenameD::Str,
|
||||
Class< SysDir, NoCopy< SysDir > >(vm, TypenameD::Str)
|
||||
// Constructors
|
||||
.Ctor()
|
||||
.Ctor< StackStrF & >()
|
||||
.Ctor< bool, StackStrF & >()
|
||||
// Meta-methods
|
||||
.SquirrelFunc(_SC("_typename"), &TypenameD::Fn)
|
||||
.Func(_SC("_tostring"), &SysDir::ToString)
|
||||
// Member Properties
|
||||
.Prop(_SC("IsValid"), &SysDir::IsValid)
|
||||
.Prop(_SC("Path"), &SysDir::GetPath)
|
||||
.Prop(_SC("HasNext"), &SysDir::HasNext)
|
||||
.Prop(_SC("FileCount"), &SysDir::FileCount)
|
||||
// Member Methods
|
||||
.FmtFunc(_SC("Open"), &SysDir::Open)
|
||||
.FmtFunc(_SC("OpenSorted"), &SysDir::OpenSorted)
|
||||
.Func(_SC("OpenSubDir"), &SysDir::OpenSubDir)
|
||||
.Func(_SC("Next"), &SysDir::Next)
|
||||
.Func(_SC("Close"), &SysDir::Close)
|
||||
.Func(_SC("ReadFile"), &SysDir::ReadFile)
|
||||
.Func(_SC("ReadFileAt"), &SysDir::ReadFileAt)
|
||||
);
|
||||
RootTable(vm).Bind(TypenameF::Str,
|
||||
Class< SysFile, NoCopy< SysFile > >(vm, TypenameF::Str)
|
||||
// Constructors
|
||||
.Ctor()
|
||||
.Ctor< StackStrF & >()
|
||||
// Meta-methods
|
||||
.SquirrelFunc(_SC("_typename"), &TypenameF::Fn)
|
||||
.Func(_SC("_tostring"), &SysFile::ToString)
|
||||
// Member Properties
|
||||
.Prop(_SC("IsValid"), &SysFile::IsValid)
|
||||
.Prop(_SC("IsDir"), &SysFile::IsDir)
|
||||
.Prop(_SC("IsReg"), &SysFile::IsReg)
|
||||
.Prop(_SC("Path"), &SysFile::GetPath)
|
||||
.Prop(_SC("Name"), &SysFile::GetName)
|
||||
.Prop(_SC("Extension"), &SysFile::GetExtension)
|
||||
// Member Methods
|
||||
.FmtFunc(_SC("Open"), &SysFile::Open)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
} // Namespace:: SqMod
|
||||
Reference in New Issue
Block a user