mirror of
https://github.com/VCMP-SqMod/SqMod.git
synced 2025-06-15 22:57:12 +02:00
Separated major non mandatory libraries into their onwn modules.
Consolidated and simplified the module API system. Various other fixes and improvements.
This commit is contained in:
@ -1,533 +0,0 @@
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
#include "Library/INI.hpp"
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
#include <errno.h>
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
namespace SqMod {
|
||||
namespace INI {
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
Int32 Entries::Cmp(const Entries & o) const
|
||||
{
|
||||
if (m_Elem == o.m_Elem)
|
||||
return 0;
|
||||
else if (this > &o)
|
||||
return 1;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
CSStr Entries::ToString() const
|
||||
{
|
||||
return GetItem();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void Entries::Next()
|
||||
{
|
||||
// Are there any other elements ahead?
|
||||
if (!m_List.empty() && m_Elem != m_List.end())
|
||||
++m_Elem; /* Go ahead one element */
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void Entries::Prev()
|
||||
{
|
||||
// Are there any other elements behind?
|
||||
if (!m_List.empty() && m_Elem != m_List.begin())
|
||||
--m_Elem; /* Go back one element */
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void Entries::Advance(Int32 n)
|
||||
{
|
||||
// Are there any other elements ahead?
|
||||
if (m_List.empty() || m_Elem == m_List.end())
|
||||
return;
|
||||
// Jump as many elements as possible
|
||||
while ((--n >= 0) && m_Elem != m_List.end()) ++m_Elem;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void Entries::Retreat(Int32 n)
|
||||
{
|
||||
// Are there any other elements behind?
|
||||
if (m_List.empty() || m_Elem == m_List.begin())
|
||||
return;
|
||||
// Jump as many elements as possible
|
||||
while ((--n >= 0) && m_Elem != m_List.begin()) --m_Elem;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
CSStr Entries::GetItem() const
|
||||
{
|
||||
if (m_List.empty() || m_Elem == m_List.end())
|
||||
SqThrow("Invalid INI entry [item]");
|
||||
else
|
||||
return m_Elem->pItem;
|
||||
return _SC("");
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
CSStr Entries::GetComment() const
|
||||
{
|
||||
if (m_List.empty() || m_Elem == m_List.end())
|
||||
SqThrow("Invalid INI entry [comment]");
|
||||
else
|
||||
return m_Elem->pComment;
|
||||
return _SC("");
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
Int32 Entries::GetOrder() const
|
||||
{
|
||||
if (m_List.empty() || m_Elem == m_List.end())
|
||||
SqThrow("Invalid INI entry [order]");
|
||||
else
|
||||
return m_Elem->nOrder;
|
||||
return -1;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
Document::Document()
|
||||
: m_Doc(false, false, true)
|
||||
{
|
||||
/* ... */
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
Document::Document(bool utf8, bool multikey, bool multiline)
|
||||
: m_Doc(utf8, multikey, multiline)
|
||||
{
|
||||
/* ... */
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
Document::~Document()
|
||||
{
|
||||
/* ... */
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
Int32 Document::Cmp(const Document & o) const
|
||||
{
|
||||
if (m_Doc == o.m_Doc)
|
||||
return 0;
|
||||
else if (this > &o)
|
||||
return 1;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
CSStr Document::ToString() const
|
||||
{
|
||||
return _SC("");
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void Document::LoadFile(CSStr filepath)
|
||||
{
|
||||
if (!Validate())
|
||||
return; /* Unable to proceed */
|
||||
// Attempt to load the file from disk
|
||||
const SI_Error ret = m_Doc->LoadFile(filepath);
|
||||
// See if the file could be loaded
|
||||
if (ret < 0)
|
||||
{
|
||||
// Identify the error type
|
||||
switch (ret)
|
||||
{
|
||||
case SI_FAIL:
|
||||
SqThrow("Failed to load the INI file. Probably invalid");
|
||||
break;
|
||||
case SI_NOMEM:
|
||||
SqThrow("Ran out of memory while loading the INI file");
|
||||
break;
|
||||
case SI_FILE:
|
||||
SqThrow("Failed to load the INI file. %s", strerror(errno));
|
||||
break;
|
||||
default:
|
||||
SqThrow("Failed to load the INI file for some unforeseen reason");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void Document::LoadData(CSStr source, Int32 size)
|
||||
{
|
||||
if (!Validate())
|
||||
return; /* Unable to proceed */
|
||||
// Attempt to load the source from memory
|
||||
const SI_Error ret = m_Doc->LoadData(source, size < 0 ? strlen(source) : size);
|
||||
// See if the source could be loaded
|
||||
if (ret < 0)
|
||||
{
|
||||
// Identify the error type
|
||||
switch (ret)
|
||||
{
|
||||
case SI_FAIL:
|
||||
SqThrow("Failed to load the INI data. Probably invalid");
|
||||
break;
|
||||
case SI_NOMEM:
|
||||
SqThrow("Ran out of memory while loading the INI data");
|
||||
break;
|
||||
default:
|
||||
SqThrow("Failed to load the INI data for some unforeseen reason");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void Document::SaveFile(CSStr filepath, bool signature)
|
||||
{
|
||||
if (!Validate())
|
||||
return; /* Unable to proceed */
|
||||
// Attempt to save the file to disk
|
||||
const SI_Error ret = m_Doc->SaveFile(filepath, signature);
|
||||
// See if the file could be saved
|
||||
if (ret == SI_FAIL)
|
||||
{
|
||||
SqThrow("Failed to save the INI file. Probably invalid");
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
Object Document::SaveData(bool signature)
|
||||
{
|
||||
if (!Validate())
|
||||
return NullObject(); /* Unable to proceed */
|
||||
// The string where the content will be saved
|
||||
String source;
|
||||
// Attempt to save the data to string
|
||||
const SI_Error ret = m_Doc->Save(source, signature);
|
||||
// See if the data could be saved
|
||||
if (ret == SI_FAIL)
|
||||
{
|
||||
SqThrow("Failed to save the INI data. Probably invalid");
|
||||
return NullObject(); /* Unable to proceed */
|
||||
}
|
||||
// Transform it into a script object
|
||||
sq_pushstring(DefaultVM::Get(), source.c_str(), source.size());
|
||||
// Get the object from the stack
|
||||
Var< Object & > var(DefaultVM::Get(), -1);
|
||||
// Pop the created object from the stack
|
||||
if (!var.value.IsNull())
|
||||
{
|
||||
sq_pop(DefaultVM::Get(), 1);
|
||||
}
|
||||
// Return the script object
|
||||
return var.value;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
Entries Document::GetAllSections() const
|
||||
{
|
||||
if (!Validate())
|
||||
return Entries(); /* Unable to proceed */
|
||||
// Prepare a container to receive the entries
|
||||
static Container entries;
|
||||
// Obtain all sections from the INI document
|
||||
m_Doc->GetAllSections(entries);
|
||||
// Return the entries and take over content
|
||||
return Entries(m_Doc, entries);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
Entries Document::GetAllKeys(CSStr section) const
|
||||
{
|
||||
if (!Validate())
|
||||
return Entries(); /* Unable to proceed */
|
||||
// Prepare a container to receive the entries
|
||||
static Container entries;
|
||||
// Obtain all sections from the INI document
|
||||
m_Doc->GetAllKeys(section, entries);
|
||||
// Return the entries and take over content
|
||||
return Entries(m_Doc, entries);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
Entries Document::GetAllValues(CSStr section, CSStr key) const
|
||||
{
|
||||
if (!Validate())
|
||||
return Entries(); /* Unable to proceed */
|
||||
// Prepare a container to receive the entries
|
||||
static Container entries;
|
||||
// Obtain all sections from the INI document
|
||||
m_Doc->GetAllValues(section, key, entries);
|
||||
// Return the entries and take over content
|
||||
return Entries(m_Doc, entries);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
Int32 Document::GetSectionSize(CSStr section) const
|
||||
{
|
||||
if (Validate())
|
||||
// Return the requested information
|
||||
return m_Doc->GetSectionSize(section);
|
||||
// Return invalid size
|
||||
return -1;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
bool Document::HasMultipleKeys(CSStr section, CSStr key) const
|
||||
{
|
||||
if (!Validate())
|
||||
return false; /* Unable to proceed */
|
||||
// Where to retrive whether the key has multiple instances
|
||||
bool multiple = false;
|
||||
// Attempt to query the information
|
||||
if (m_Doc->GetValue(section, key, NULL, &multiple) == NULL)
|
||||
return true; /* Doesn't exist */
|
||||
return multiple;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
CCStr Document::GetValue(CSStr section, CSStr key, CSStr def) const
|
||||
{
|
||||
if (!Validate())
|
||||
return _SC(""); /* Unable to proceed */
|
||||
// Attempt to query the information and return it
|
||||
return m_Doc->GetValue(section, key, def, NULL);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
SQInteger Document::GetInteger(CSStr section, CSStr key, SQInteger def) const
|
||||
{
|
||||
if (!Validate())
|
||||
return 0; /* Unable to proceed */
|
||||
// Attempt to query the information and return it
|
||||
return (SQInteger)m_Doc->GetLongValue(section, key, def, NULL);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
SQFloat Document::GetFloat(CSStr section, CSStr key, SQFloat def) const
|
||||
{
|
||||
if (!Validate())
|
||||
return 0.0; /* Unable to proceed */
|
||||
// Attempt to query the information and return it
|
||||
return (SQFloat)m_Doc->GetDoubleValue(section, key, def, NULL);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
bool Document::GetBoolean(CSStr section, CSStr key, bool def) const
|
||||
{
|
||||
if (!Validate())
|
||||
return false; /* Unable to proceed */
|
||||
// Attempt to query the information and return it
|
||||
return m_Doc->GetBoolValue(section, key, def, NULL);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void Document::SetValue(CSStr section, CSStr key, CSStr value, bool force, CSStr comment)
|
||||
{
|
||||
if (!Validate())
|
||||
return; /* Unable to proceed */
|
||||
// Attempt to apply the specified information
|
||||
const SI_Error ret = m_Doc->SetValue(section, key, value, comment, force);
|
||||
// See if the information could be applied
|
||||
if (ret < 0)
|
||||
{
|
||||
// Identify the error type
|
||||
switch (ret)
|
||||
{
|
||||
case SI_FAIL:
|
||||
SqThrow("Failed to set the INI value. Probably invalid");
|
||||
break;
|
||||
case SI_NOMEM:
|
||||
SqThrow("Ran out of memory while setting INI value");
|
||||
break;
|
||||
default:
|
||||
SqThrow("Failed to set the INI value for some unforeseen reason");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void Document::SetInteger(CSStr section, CSStr key, SQInteger value, bool hex, bool force, CSStr comment)
|
||||
{
|
||||
if (!Validate())
|
||||
return; /* Unable to proceed */
|
||||
// Attempt to apply the specified information
|
||||
const SI_Error ret = m_Doc->SetLongValue(section, key, value, comment, hex, force);
|
||||
// See if the information could be applied
|
||||
if (ret < 0)
|
||||
{
|
||||
// Identify the error type
|
||||
switch (ret)
|
||||
{
|
||||
case SI_FAIL:
|
||||
SqThrow("Failed to set the INI integer. Probably invalid");
|
||||
break;
|
||||
case SI_NOMEM:
|
||||
SqThrow("Ran out of memory while setting INI integer");
|
||||
break;
|
||||
default:
|
||||
SqThrow("Failed to set the INI integer for some unforeseen reason");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void Document::SetFloat(CSStr section, CSStr key, SQFloat value, bool force, CSStr comment)
|
||||
{
|
||||
if (!Validate())
|
||||
return; /* Unable to proceed */
|
||||
// Attempt to apply the specified information
|
||||
const SI_Error ret = m_Doc->SetDoubleValue(section, key, value, comment, force);
|
||||
// See if the information could be applied
|
||||
if (ret < 0)
|
||||
{
|
||||
// Identify the error type
|
||||
switch (ret)
|
||||
{
|
||||
case SI_FAIL:
|
||||
SqThrow("Failed to set the INI float. Probably invalid");
|
||||
break;
|
||||
case SI_NOMEM:
|
||||
SqThrow("Ran out of memory while setting INI float");
|
||||
break;
|
||||
default:
|
||||
SqThrow("Failed to set the INI float for some unforeseen reason");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void Document::SetBoolean(CSStr section, CSStr key, bool value, bool force, CSStr comment)
|
||||
{
|
||||
if (!Validate())
|
||||
return; /* Unable to proceed */
|
||||
// Attempt to apply the specified information
|
||||
const SI_Error ret = m_Doc->SetBoolValue(section, key, value, comment, force);
|
||||
// See if the information could be applied
|
||||
if (ret < 0)
|
||||
{
|
||||
// Identify the error type
|
||||
switch (ret)
|
||||
{
|
||||
case SI_FAIL:
|
||||
SqThrow("Failed to set the INI boolean. Probably invalid");
|
||||
break;
|
||||
case SI_NOMEM:
|
||||
SqThrow("Ran out of memory while setting INI boolean");
|
||||
break;
|
||||
default:
|
||||
SqThrow("Failed to set the INI boolean for some unforeseen reason");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
bool Document::DeleteValue(CSStr section, CSStr key, CSStr value, bool empty)
|
||||
{
|
||||
if (!Validate())
|
||||
return false; /* Unable to proceed */
|
||||
else if (!section)
|
||||
{
|
||||
SqThrow("Invalid INI section");
|
||||
return false; /* Unable to proceed */
|
||||
}
|
||||
else if (!key)
|
||||
{
|
||||
SqThrow("Invalid INI key");
|
||||
return false; /* Unable to proceed */
|
||||
}
|
||||
// Attempt to remove the specified value
|
||||
return m_Doc->DeleteValue(section, key, value, empty);
|
||||
}
|
||||
|
||||
} // Namespace:: INI
|
||||
|
||||
// ================================================================================================
|
||||
void Register_INI(HSQUIRRELVM vm)
|
||||
{
|
||||
using namespace INI;
|
||||
|
||||
Table inins(vm);
|
||||
|
||||
inins.Bind(_SC("Entries"), Class< Entries >(vm, _SC("SqIniEntries"))
|
||||
/* Constructors */
|
||||
.Ctor()
|
||||
.Ctor< const Entries & >()
|
||||
/* Core Metamethods */
|
||||
.Func(_SC("_tostring"), &Entries::ToString)
|
||||
.Func(_SC("_cmp"), &Entries::Cmp)
|
||||
/* Properties */
|
||||
.Prop(_SC("Valid"), &Entries::IsValid)
|
||||
.Prop(_SC("Empty"), &Entries::IsEmpty)
|
||||
.Prop(_SC("References"), &Entries::GetRefCount)
|
||||
.Prop(_SC("Size"), &Entries::GetSize)
|
||||
.Prop(_SC("Item"), &Entries::GetItem)
|
||||
.Prop(_SC("Comment"), &Entries::GetComment)
|
||||
.Prop(_SC("Order"), &Entries::GetOrder)
|
||||
/* Functions */
|
||||
.Func(_SC("Reset"), &Entries::Reset)
|
||||
.Func(_SC("Next"), &Entries::Next)
|
||||
.Func(_SC("Prev"), &Entries::Prev)
|
||||
.Func(_SC("Advance"), &Entries::Advance)
|
||||
.Func(_SC("Retreat"), &Entries::Retreat)
|
||||
.Func(_SC("Sort"), &Entries::Sort)
|
||||
.Func(_SC("SortByKeyOrder"), &Entries::SortByKeyOrder)
|
||||
.Func(_SC("SortByLoadOrder"), &Entries::SortByLoadOrder)
|
||||
.Func(_SC("SortByLoadOrderEmptyFirst"), &Entries::SortByLoadOrderEmptyFirst)
|
||||
);
|
||||
|
||||
inins.Bind(_SC("Document"), Class< Document, NoCopy< Document > >(vm, _SC("SqIniDocument"))
|
||||
/* Constructors */
|
||||
.Ctor()
|
||||
.Ctor< bool, bool, bool >()
|
||||
/* Core Metamethods */
|
||||
.Func(_SC("_tostring"), &Document::ToString)
|
||||
.Func(_SC("_cmp"), &Document::Cmp)
|
||||
/* Properties */
|
||||
.Prop(_SC("Valid"), &Document::IsValid)
|
||||
.Prop(_SC("Empty"), &Document::IsEmpty)
|
||||
.Prop(_SC("References"), &Document::GetRefCount)
|
||||
.Prop(_SC("Unicode"), &Document::GetUnicode, &Document::SetUnicode)
|
||||
.Prop(_SC("MultiKey"), &Document::GetMultiKey, &Document::SetMultiKey)
|
||||
.Prop(_SC("MultiLine"), &Document::GetMultiLine, &Document::SetMultiLine)
|
||||
.Prop(_SC("Spaces"), &Document::GetSpaces, &Document::SetSpaces)
|
||||
/* Functions */
|
||||
.Func(_SC("Reset"), &Document::Reset)
|
||||
.Func(_SC("LoadFile"), &Document::LoadFile)
|
||||
.Overload< void (Document::*)(CSStr) >(_SC("LoadData"), &Document::LoadData)
|
||||
.Overload< void (Document::*)(CSStr, Int32) >(_SC("LoadData"), &Document::LoadData)
|
||||
.Overload< void (Document::*)(CSStr) >(_SC("SaveFile"), &Document::SaveFile)
|
||||
.Overload< void (Document::*)(CSStr, bool) >(_SC("SaveFile"), &Document::SaveFile)
|
||||
.Func(_SC("SaveData"), &Document::SaveData)
|
||||
.Func(_SC("GetSections"), &Document::GetAllSections)
|
||||
.Func(_SC("GetKeys"), &Document::GetAllKeys)
|
||||
.Func(_SC("GetValues"), &Document::GetAllValues)
|
||||
.Func(_SC("GetSectionSize"), &Document::GetSectionSize)
|
||||
.Func(_SC("HasMultipleKeys"), &Document::HasMultipleKeys)
|
||||
.Func(_SC("GetValue"), &Document::GetValue)
|
||||
.Func(_SC("GetInteger"), &Document::GetInteger)
|
||||
.Func(_SC("GetFloat"), &Document::GetFloat)
|
||||
.Func(_SC("GetBoolean"), &Document::GetBoolean)
|
||||
.Overload< void (Document::*)(CSStr, CSStr, CSStr) >(_SC("SetValue"), &Document::SetValue)
|
||||
.Overload< void (Document::*)(CSStr, CSStr, CSStr, bool) >(_SC("SetValue"), &Document::SetValue)
|
||||
.Overload< void (Document::*)(CSStr, CSStr, CSStr, bool, CSStr) >(_SC("SetValue"), &Document::SetValue)
|
||||
.Overload< void (Document::*)(CSStr, CSStr, SQInteger) >(_SC("SetInteger"), &Document::SetInteger)
|
||||
.Overload< void (Document::*)(CSStr, CSStr, SQInteger, bool) >(_SC("SetInteger"), &Document::SetInteger)
|
||||
.Overload< void (Document::*)(CSStr, CSStr, SQInteger, bool, bool) >(_SC("SetInteger"), &Document::SetInteger)
|
||||
.Overload< void (Document::*)(CSStr, CSStr, SQInteger, bool, bool, CSStr) >(_SC("SetInteger"), &Document::SetInteger)
|
||||
.Overload< void (Document::*)(CSStr, CSStr, SQFloat) >(_SC("SetFloat"), &Document::SetFloat)
|
||||
.Overload< void (Document::*)(CSStr, CSStr, SQFloat, bool) >(_SC("SetFloat"), &Document::SetFloat)
|
||||
.Overload< void (Document::*)(CSStr, CSStr, SQFloat, bool, CSStr) >(_SC("SetFloat"), &Document::SetFloat)
|
||||
.Overload< void (Document::*)(CSStr, CSStr, bool) >(_SC("SetBoolean"), &Document::SetBoolean)
|
||||
.Overload< void (Document::*)(CSStr, CSStr, bool, bool) >(_SC("SetBoolean"), &Document::SetBoolean)
|
||||
.Overload< void (Document::*)(CSStr, CSStr, bool, bool, CSStr) >(_SC("SetBoolean"), &Document::SetBoolean)
|
||||
.Overload< bool (Document::*)(CSStr) >(_SC("DeleteValue"), &Document::DeleteValue)
|
||||
.Overload< bool (Document::*)(CSStr, CSStr) >(_SC("DeleteValue"), &Document::DeleteValue)
|
||||
.Overload< bool (Document::*)(CSStr, CSStr, CSStr) >(_SC("DeleteValue"), &Document::DeleteValue)
|
||||
.Overload< bool (Document::*)(CSStr, CSStr, CSStr, bool) >(_SC("DeleteValue"), &Document::DeleteValue)
|
||||
);
|
||||
|
||||
RootTable(vm).Bind(_SC("SqIni"), inins);
|
||||
}
|
||||
|
||||
} // Namespace:: SqMod
|
@ -1,736 +0,0 @@
|
||||
#ifndef _LIBRARY_INI_HPP_
|
||||
#define _LIBRARY_INI_HPP_
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
#include "Base/Shared.hpp"
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
#include <SimpleIni.h>
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
namespace SqMod {
|
||||
namespace INI {
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
class Entries;
|
||||
class Document;
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------
|
||||
* Manages a reference counted INI document instance.
|
||||
*/
|
||||
class DocumentRef
|
||||
{
|
||||
// --------------------------------------------------------------------------------------------
|
||||
friend class Document;
|
||||
|
||||
private:
|
||||
|
||||
// --------------------------------------------------------------------------------------------
|
||||
typedef CSimpleIniA IrcDocument;
|
||||
|
||||
// --------------------------------------------------------------------------------------------
|
||||
typedef unsigned int Counter;
|
||||
|
||||
// --------------------------------------------------------------------------------------------
|
||||
IrcDocument* m_Ptr; /* The document reader, writer and manager instance. */
|
||||
Counter* m_Ref; /* Reference count to the managed instance. */
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Grab a strong reference to a document instance.
|
||||
*/
|
||||
void Grab()
|
||||
{
|
||||
if (m_Ptr)
|
||||
{
|
||||
++(*m_Ref);
|
||||
}
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Drop a strong reference to a document instance.
|
||||
*/
|
||||
void Drop()
|
||||
{
|
||||
if (m_Ptr && --(*m_Ref) == 0)
|
||||
{
|
||||
delete m_Ptr;
|
||||
delete m_Ref;
|
||||
m_Ptr = NULL;
|
||||
m_Ref = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Base constructor.
|
||||
*/
|
||||
DocumentRef(bool utf8, bool multikey, bool multiline)
|
||||
: m_Ptr(new IrcDocument(utf8, multikey, multiline)), m_Ref(new Counter(1))
|
||||
{
|
||||
/* ... */
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Default constructor (null).
|
||||
*/
|
||||
DocumentRef()
|
||||
: m_Ptr(NULL), m_Ref(NULL)
|
||||
{
|
||||
/* ... */
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Copy constructor.
|
||||
*/
|
||||
DocumentRef(const DocumentRef & o)
|
||||
: m_Ptr(o.m_Ptr), m_Ref(o.m_Ref)
|
||||
|
||||
{
|
||||
Grab();
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Destructor.
|
||||
*/
|
||||
~DocumentRef()
|
||||
{
|
||||
Drop();
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Copy assignment operator.
|
||||
*/
|
||||
DocumentRef & operator = (const DocumentRef & o)
|
||||
{
|
||||
if (m_Ptr != o.m_Ptr)
|
||||
{
|
||||
Drop();
|
||||
m_Ptr = o.m_Ptr;
|
||||
m_Ref = o.m_Ref;
|
||||
Grab();
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Perform an equality comparison between two document instances.
|
||||
*/
|
||||
bool operator == (const DocumentRef & o) const
|
||||
{
|
||||
return (m_Ptr == o.m_Ptr);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Perform an inequality comparison between two document instances.
|
||||
*/
|
||||
bool operator != (const DocumentRef & o) const
|
||||
{
|
||||
return (m_Ptr != o.m_Ptr);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Implicit conversion to boolean for use in boolean operations.
|
||||
*/
|
||||
operator bool () const
|
||||
{
|
||||
return m_Ptr;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Member operator for dereferencing the managed pointer.
|
||||
*/
|
||||
IrcDocument * operator -> () const
|
||||
{
|
||||
assert(m_Ptr != NULL);
|
||||
return m_Ptr;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Indirection operator for obtaining a reference of the managed pointer.
|
||||
*/
|
||||
IrcDocument & operator * () const
|
||||
{
|
||||
assert(m_Ptr != NULL);
|
||||
return *m_Ptr;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Retrieve the number of active references to the managed instance.
|
||||
*/
|
||||
Counter Count() const
|
||||
{
|
||||
return (m_Ptr && m_Ref) ? (*m_Ref) : 0;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------
|
||||
* Class that can access and iterate a series of entries in the INI document.
|
||||
*/
|
||||
class Entries
|
||||
{
|
||||
// --------------------------------------------------------------------------------------------
|
||||
friend class Document;
|
||||
|
||||
protected:
|
||||
|
||||
// --------------------------------------------------------------------------------------------
|
||||
typedef CSimpleIniA IrcDocument;
|
||||
|
||||
// --------------------------------------------------------------------------------------------
|
||||
typedef IrcDocument::TNamesDepend Container;
|
||||
|
||||
// --------------------------------------------------------------------------------------------
|
||||
typedef Container::iterator Iterator;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Default constructor.
|
||||
*/
|
||||
Entries(const DocumentRef & ini, Container & list)
|
||||
: m_Doc(ini), m_List(), m_Elem()
|
||||
{
|
||||
m_List.swap(list);
|
||||
Reset();
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
// ---------------------------------------------------------------------------------------------
|
||||
DocumentRef m_Doc; /* The document that contains the elements. */
|
||||
Container m_List; /* The list of elements to iterate. */
|
||||
Iterator m_Elem; /* The currently processed element. */
|
||||
|
||||
public:
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Default constructor. (null)
|
||||
*/
|
||||
Entries()
|
||||
: m_Doc(), m_List(), m_Elem(m_List.end())
|
||||
{
|
||||
/* ... */
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Copy constructor.
|
||||
*/
|
||||
Entries(const Entries & o)
|
||||
: m_Doc(o.m_Doc), m_List(o.m_List), m_Elem()
|
||||
{
|
||||
Reset();
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Destructor.
|
||||
*/
|
||||
~Entries()
|
||||
{
|
||||
/* ... */
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Copy assignment operator.
|
||||
*/
|
||||
Entries & operator = (const Entries & o)
|
||||
{
|
||||
m_Doc = o.m_Doc;
|
||||
m_List = o.m_List;
|
||||
Reset();
|
||||
return *this;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Used by the script engine to compare two instances of this type.
|
||||
*/
|
||||
Int32 Cmp(const Entries & o) const;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Used by the script engine to convert an instance of this type to a string.
|
||||
*/
|
||||
CSStr ToString() const;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Return whether the current element is valid and can be accessed.
|
||||
*/
|
||||
bool IsValid() const
|
||||
{
|
||||
return !(m_List.empty() || m_Elem == m_List.end());
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Return whether the entry list is empty.
|
||||
*/
|
||||
bool IsEmpty() const
|
||||
{
|
||||
return m_List.empty();
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Return the number of active references to this document instance.
|
||||
*/
|
||||
Uint32 GetRefCount() const
|
||||
{
|
||||
return m_Doc.Count();
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Return the total entries in the list.
|
||||
*/
|
||||
Int32 GetSize() const
|
||||
{
|
||||
return (Int32)m_List.size();
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Reset the internal iterator to the first element.
|
||||
*/
|
||||
void Reset()
|
||||
{
|
||||
if (m_List.empty())
|
||||
m_Elem = m_List.end();
|
||||
else
|
||||
m_Elem = m_List.begin();
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Go to the next element.
|
||||
*/
|
||||
void Next();
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Go to the previous element.
|
||||
*/
|
||||
void Prev();
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Advance a certain number of elements.
|
||||
*/
|
||||
void Advance(Int32 n);
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Retreat a certain number of elements.
|
||||
*/
|
||||
void Retreat(Int32 n);
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Sort the entries using the default options.
|
||||
*/
|
||||
void Sort()
|
||||
{
|
||||
if (!m_List.empty())
|
||||
m_List.sort(IrcDocument::Entry::KeyOrder());
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Sort the entries by name of key only.
|
||||
*/
|
||||
void SortByKeyOrder()
|
||||
{
|
||||
if (!m_List.empty())
|
||||
m_List.sort(IrcDocument::Entry::KeyOrder());
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Sort the entries by their load order and then name of key.
|
||||
*/
|
||||
void SortByLoadOrder()
|
||||
{
|
||||
if (!m_List.empty())
|
||||
m_List.sort(IrcDocument::Entry::LoadOrder());
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Sort the entries by their load order but empty name always goes first.
|
||||
*/
|
||||
void SortByLoadOrderEmptyFirst()
|
||||
{
|
||||
if (!m_List.empty())
|
||||
m_List.sort(IrcDocument::Entry::LoadOrderEmptyFirst());
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Retrieve the string value of the current element item.
|
||||
*/
|
||||
CSStr GetItem() const;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Retrieve the string value of the current element comment.
|
||||
*/
|
||||
CSStr GetComment() const;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Retrieve the order of the current element.
|
||||
*/
|
||||
Int32 GetOrder() const;
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------
|
||||
* Class that can read/write and alter the contents of INI files.
|
||||
*/
|
||||
class Document
|
||||
{
|
||||
protected:
|
||||
|
||||
// --------------------------------------------------------------------------------------------
|
||||
typedef CSimpleIniA IrcDocument;
|
||||
|
||||
// --------------------------------------------------------------------------------------------
|
||||
typedef IrcDocument::TNamesDepend Container;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Copy constructor. (disabled)
|
||||
*/
|
||||
Document(const Document & o);
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Copy assignment operator. (disabled)
|
||||
*/
|
||||
Document & operator = (const Document & o);
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Validate the document reference.
|
||||
*/
|
||||
bool Validate() const
|
||||
{
|
||||
if (m_Doc)
|
||||
return true;
|
||||
SqThrow("Invalid INI document reference");
|
||||
return false;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
// ---------------------------------------------------------------------------------------------
|
||||
DocumentRef m_Doc; /* The main INI document instance. */
|
||||
|
||||
public:
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Default constructor.
|
||||
*/
|
||||
Document();
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Explicit constructor.
|
||||
*/
|
||||
Document(bool utf8, bool multikey, bool multiline);
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Destructor.
|
||||
*/
|
||||
~Document();
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Used by the script engine to compare two instances of this type.
|
||||
*/
|
||||
Int32 Cmp(const Document & o) const;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Used by the script engine to convert an instance of this type to a string.
|
||||
*/
|
||||
CSStr ToString() const;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* See whether this instance references a valid INI document.
|
||||
*/
|
||||
bool IsValid() const
|
||||
{
|
||||
return m_Doc;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* See whether any data has been loaded into this document.
|
||||
*/
|
||||
bool IsEmpty() const
|
||||
{
|
||||
return m_Doc->IsEmpty();
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Return the number of active references to this document instance.
|
||||
*/
|
||||
Uint32 GetRefCount() const
|
||||
{
|
||||
return m_Doc.Count();
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Deallocate all memory stored by this document.
|
||||
*/
|
||||
void Reset() const
|
||||
{
|
||||
m_Doc->Reset();
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* See whether the INI data is treated as unicode.
|
||||
*/
|
||||
bool GetUnicode() const
|
||||
{
|
||||
return m_Doc->IsUnicode();
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Set whether the INI data should be treated as unicode.
|
||||
*/
|
||||
void SetUnicode(bool toggle)
|
||||
{
|
||||
m_Doc->SetUnicode(toggle);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* See whether multiple identical keys be permitted in the file.
|
||||
*/
|
||||
bool GetMultiKey() const
|
||||
{
|
||||
return m_Doc->IsMultiKey();
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Set whether multiple identical keys be permitted in the file.
|
||||
*/
|
||||
void SetMultiKey(bool toggle)
|
||||
{
|
||||
m_Doc->SetMultiKey(toggle);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* See whether data values are permitted to span multiple lines in the file.
|
||||
*/
|
||||
bool GetMultiLine() const
|
||||
{
|
||||
return m_Doc->IsMultiLine();
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Set whether data values are permitted to span multiple lines in the file.
|
||||
*/
|
||||
void SetMultiLine(bool toggle)
|
||||
{
|
||||
m_Doc->SetMultiLine(toggle);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* See whether spaces are added around the equals sign when writing key/value pairs out.
|
||||
*/
|
||||
bool GetSpaces() const
|
||||
{
|
||||
return m_Doc->UsingSpaces();
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Set whether spaces are added around the equals sign when writing key/value pairs out.
|
||||
*/
|
||||
void SetSpaces(bool toggle)
|
||||
{
|
||||
m_Doc->SetSpaces(toggle);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Load an INI file from disk into memory.
|
||||
*/
|
||||
void LoadFile(CSStr filepath);
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Load INI file data direct from a string.
|
||||
*/
|
||||
void LoadData(CSStr source)
|
||||
{
|
||||
LoadData(source, -1);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Load INI file data direct from a string.
|
||||
*/
|
||||
void LoadData(CSStr source, Int32 size);
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Save an INI file from memory to disk.
|
||||
*/
|
||||
void SaveFile(CSStr filepath)
|
||||
{
|
||||
SaveFile(filepath, true);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Save an INI file from memory to disk.
|
||||
*/
|
||||
void SaveFile(CSStr filepath, bool signature);
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Save the INI data to a string.
|
||||
*/
|
||||
Object SaveData(bool signature);
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Retrieve all section names.
|
||||
*/
|
||||
Entries GetAllSections() const;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Retrieve all unique key names in a section.
|
||||
*/
|
||||
Entries GetAllKeys(CSStr section) const;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Retrieve all values for a specific key.
|
||||
*/
|
||||
Entries GetAllValues(CSStr section, CSStr key) const;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Query the number of keys in a specific section.
|
||||
*/
|
||||
Int32 GetSectionSize(CSStr section) const;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* See whether a certain key has multiple instances.
|
||||
*/
|
||||
bool HasMultipleKeys(CSStr section, CSStr key) const;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Retrieve the value for a specific key.
|
||||
*/
|
||||
CCStr GetValue(CSStr section, CSStr key, CSStr def) const;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Retrieve a numeric value for a specific key.
|
||||
*/
|
||||
SQInteger GetInteger(CSStr section, CSStr key, SQInteger def) const;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Retrieve a numeric value for a specific key.
|
||||
*/
|
||||
SQFloat GetFloat(CSStr section, CSStr key, SQFloat def) const;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Retrieve a boolean value for a specific key.
|
||||
*/
|
||||
bool GetBoolean(CSStr section, CSStr key, bool def) const;
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Add or update a section or value.
|
||||
*/
|
||||
void SetValue(CSStr section, CSStr key, CSStr value)
|
||||
{
|
||||
SetValue(section, key, value, false, NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Add or update a section or value.
|
||||
*/
|
||||
void SetValue(CSStr section, CSStr key, CSStr value, bool force)
|
||||
{
|
||||
SetValue(section, key, value, force, NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Add or update a section or value.
|
||||
*/
|
||||
void SetValue(CSStr section, CSStr key, CSStr value, bool force, CSStr comment);
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Add or update a numeric value.
|
||||
*/
|
||||
void SetInteger(CSStr section, CSStr key, SQInteger value)
|
||||
{
|
||||
SetInteger(section, key, value, false, false, NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Add or update a numeric value.
|
||||
*/
|
||||
void SetInteger(CSStr section, CSStr key, SQInteger value, bool hex)
|
||||
{
|
||||
SetInteger(section, key, value, hex, false, NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Add or update a numeric value.
|
||||
*/
|
||||
void SetInteger(CSStr section, CSStr key, SQInteger value, bool hex, bool force)
|
||||
{
|
||||
SetInteger(section, key, value, hex, force, NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Add or update a numeric value.
|
||||
*/
|
||||
void SetInteger(CSStr section, CSStr key, SQInteger value, bool hex, bool force, CSStr comment);
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Add or update a double value.
|
||||
*/
|
||||
void SetFloat(CSStr section, CSStr key, SQFloat value)
|
||||
{
|
||||
SetFloat(section, key, value, false, NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Add or update a double value.
|
||||
*/
|
||||
void SetFloat(CSStr section, CSStr key, SQFloat value, bool force)
|
||||
{
|
||||
SetFloat(section, key, value, force, NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Add or update a double value.
|
||||
*/
|
||||
void SetFloat(CSStr section, CSStr key, SQFloat value, bool force, CSStr comment);
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Add or update a double value.
|
||||
*/
|
||||
void SetBoolean(CSStr section, CSStr key, bool value)
|
||||
{
|
||||
SetBoolean(section, key, value, false, NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Add or update a double value.
|
||||
*/
|
||||
void SetBoolean(CSStr section, CSStr key, bool value, bool force)
|
||||
{
|
||||
SetBoolean(section, key, value, force, NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Add or update a boolean value.
|
||||
*/
|
||||
void SetBoolean(CSStr section, CSStr key, bool value, bool force, CSStr comment);
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Delete an entire section, or a key from a section.
|
||||
*/
|
||||
bool DeleteValue(CSStr section)
|
||||
{
|
||||
return DeleteValue(section, NULL, NULL, false);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Delete an entire section, or a key from a section.
|
||||
*/
|
||||
bool DeleteValue(CSStr section, CSStr key)
|
||||
{
|
||||
return DeleteValue(section, key, NULL, false);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Delete an entire section, or a key from a section.
|
||||
*/
|
||||
bool DeleteValue(CSStr section, CSStr key, CSStr value)
|
||||
{
|
||||
return DeleteValue(section, key, value, false);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Delete an entire section, or a key from a section.
|
||||
*/
|
||||
bool DeleteValue(CSStr section, CSStr key, CSStr value, bool empty);
|
||||
};
|
||||
|
||||
} // Namespace:: INI
|
||||
} // Namespace:: SqMod
|
||||
|
||||
#endif // _LIBRARY_INI_HPP_
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -78,15 +78,22 @@ void Register_Numeric(HSQUIRRELVM vm)
|
||||
/* Properties */
|
||||
.Prop(_SC("Str"), &SLongInt::GetCStr, &SLongInt::SetStr)
|
||||
.Prop(_SC("Num"), &SLongInt::GetSNum, &SLongInt::SetNum)
|
||||
/* Metamethods */
|
||||
/* Core Metamethods */
|
||||
.Func(_SC("_tostring"), &SLongInt::ToString)
|
||||
.Func(_SC("_typename"), &SLongInt::Typename)
|
||||
.Func(_SC("_cmp"), &SLongInt::Cmp)
|
||||
/* Metamethods */
|
||||
.Func< SLongInt (SLongInt::*)(const SLongInt &) const >(_SC("_add"), &SLongInt::operator +)
|
||||
.Func< SLongInt (SLongInt::*)(const SLongInt &) const >(_SC("_sub"), &SLongInt::operator -)
|
||||
.Func< SLongInt (SLongInt::*)(const SLongInt &) const >(_SC("_mul"), &SLongInt::operator *)
|
||||
.Func< SLongInt (SLongInt::*)(const SLongInt &) const >(_SC("_div"), &SLongInt::operator /)
|
||||
.Func< SLongInt (SLongInt::*)(const SLongInt &) const >(_SC("_modulo"), &SLongInt::operator %)
|
||||
.Func< SLongInt (SLongInt::*)(void) const >(_SC("_unm"), &SLongInt::operator -)
|
||||
/* Functions */
|
||||
.Func(_SC("GetStr"), &SLongInt::GetCStr)
|
||||
.Func(_SC("SetStr"), &SLongInt::SetStr)
|
||||
.Func(_SC("GetNum"), &SLongInt::GetSNum)
|
||||
.Func(_SC("SetNum"), &SLongInt::SetNum)
|
||||
/* Overloads */
|
||||
.Overload< void (SLongInt::*)(void) >(_SC("Random"), &SLongInt::Random)
|
||||
.Overload< void (SLongInt::*)(SLongInt::Type) >(_SC("Random"), &SLongInt::Random)
|
||||
@ -101,15 +108,22 @@ void Register_Numeric(HSQUIRRELVM vm)
|
||||
/* Properties */
|
||||
.Prop(_SC("Str"), &ULongInt::GetCStr, &ULongInt::SetStr)
|
||||
.Prop(_SC("Num"), &ULongInt::GetSNum, &ULongInt::SetNum)
|
||||
/* Metamethods */
|
||||
/* Core Metamethods */
|
||||
.Func(_SC("_tostring"), &ULongInt::ToString)
|
||||
.Func(_SC("_typename"), &ULongInt::Typename)
|
||||
.Func(_SC("_cmp"), &ULongInt::Cmp)
|
||||
/* Metamethods */
|
||||
.Func< ULongInt (ULongInt::*)(const ULongInt &) const >(_SC("_add"), &ULongInt::operator +)
|
||||
.Func< ULongInt (ULongInt::*)(const ULongInt &) const >(_SC("_sub"), &ULongInt::operator -)
|
||||
.Func< ULongInt (ULongInt::*)(const ULongInt &) const >(_SC("_mul"), &ULongInt::operator *)
|
||||
.Func< ULongInt (ULongInt::*)(const ULongInt &) const >(_SC("_div"), &ULongInt::operator /)
|
||||
.Func< ULongInt (ULongInt::*)(const ULongInt &) const >(_SC("_modulo"), &ULongInt::operator %)
|
||||
.Func< ULongInt (ULongInt::*)(void) const >(_SC("_unm"), &ULongInt::operator -)
|
||||
/* Functions */
|
||||
.Func(_SC("GetStr"), &ULongInt::GetCStr)
|
||||
.Func(_SC("SetStr"), &ULongInt::SetStr)
|
||||
.Func(_SC("GetNum"), &ULongInt::GetSNum)
|
||||
.Func(_SC("SetNum"), &ULongInt::SetNum)
|
||||
/* Overloads */
|
||||
.Overload< void (ULongInt::*)(void) >(_SC("Random"), &ULongInt::Random)
|
||||
.Overload< void (ULongInt::*)(ULongInt::Type) >(_SC("Random"), &ULongInt::Random)
|
||||
|
@ -173,6 +173,14 @@ public:
|
||||
*/
|
||||
CSStr ToString();
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
*
|
||||
*/
|
||||
CSStr Typename() const
|
||||
{
|
||||
return _SC("SLongInt");
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
*
|
||||
*/
|
||||
@ -384,6 +392,14 @@ public:
|
||||
*/
|
||||
CSStr ToString();
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
*
|
||||
*/
|
||||
CSStr Typename() const
|
||||
{
|
||||
return _SC("ULongInt");
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
*
|
||||
*/
|
||||
|
@ -307,7 +307,7 @@ static CSStr RandomString(Int32 len, SQChar n)
|
||||
}
|
||||
Buffer b(len+1);
|
||||
SStr s = b.Get< SQChar >();
|
||||
for (Int32 n = 0; n <= len; ++n, ++s)
|
||||
for (Int32 i = 0; i <= len; ++i, ++s)
|
||||
{
|
||||
*s = g_RGen.Integer< SQChar >(n);
|
||||
}
|
||||
@ -324,7 +324,7 @@ static CSStr RandomString(Int32 len, SQChar m, SQChar n)
|
||||
}
|
||||
Buffer b(len+1);
|
||||
SStr s = b.Get< SQChar >();
|
||||
for (Int32 n = 0; n <= len; ++n, ++s)
|
||||
for (Int32 i = 0; i <= len; ++i, ++s)
|
||||
{
|
||||
*s = g_RGen.IntegerC< SQChar >(m, n);
|
||||
}
|
||||
|
@ -131,6 +131,14 @@ public:
|
||||
*/
|
||||
void SetNow();
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
*
|
||||
*/
|
||||
Int64 GetNum() const
|
||||
{
|
||||
return m_Timestamp;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
*
|
||||
*/
|
||||
|
@ -0,0 +1,41 @@
|
||||
#ifndef _LIBRARY_UTILS_HPP_
|
||||
#define _LIBRARY_UTILS_HPP_
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
#include "Base/Shared.hpp"
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
namespace SqMod {
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------
|
||||
*
|
||||
*/
|
||||
class Blob
|
||||
{
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
*
|
||||
*/
|
||||
Blob(const Blob &);
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
*
|
||||
*/
|
||||
Blob & operator = (const Blob &);
|
||||
|
||||
public:
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
*
|
||||
*/
|
||||
Blob();
|
||||
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
*
|
||||
*/
|
||||
~Blob();
|
||||
|
||||
};
|
||||
|
||||
} // Namespace:: SqMod
|
||||
|
||||
#endif // _LIBRARY_UTILS_HPP_
|
@ -1,325 +0,0 @@
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
#include "Library/XML.hpp"
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
namespace SqMod {
|
||||
namespace XML {
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void XmlParseResult::Check() const
|
||||
{
|
||||
if (m_Result.status != status_ok)
|
||||
SqThrow("Xml parse error [%s]", m_Result.description());
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
XmlNode XmlText::GetData() const
|
||||
{
|
||||
return XmlNode(m_Doc, m_Text.data());
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
XmlNode XmlDocument::GetNode() const
|
||||
{
|
||||
if (m_Doc)
|
||||
return XmlNode(m_Doc, m_Doc->document_element());
|
||||
return XmlNode();
|
||||
}
|
||||
|
||||
} // Namespace:: XML
|
||||
|
||||
// ================================================================================================
|
||||
void Register_XML(HSQUIRRELVM vm)
|
||||
{
|
||||
using namespace XML;
|
||||
|
||||
Table xmlns(vm);
|
||||
|
||||
xmlns.Bind(_SC("ParseResult"), Class< XmlParseResult >(vm, _SC("SqXmlParseResult"))
|
||||
/* Constructors */
|
||||
.Ctor()
|
||||
.Ctor< const XmlParseResult & >()
|
||||
/* Core Metamethods */
|
||||
.Func(_SC("_cmp"), &XmlParseResult::Cmp)
|
||||
.Func(_SC("_tostring"), &XmlParseResult::ToString)
|
||||
/* Properties */
|
||||
.Prop(_SC("Valid"), &XmlParseResult::IsValid)
|
||||
.Prop(_SC("References"), &XmlParseResult::GetRefCount)
|
||||
.Prop(_SC("Ok"), &XmlParseResult::IsOk)
|
||||
.Prop(_SC("Status"), &XmlParseResult::GetStatus)
|
||||
.Prop(_SC("Offset"), &XmlParseResult::GetOffset)
|
||||
.Prop(_SC("Encoding"), &XmlParseResult::GetEncoding)
|
||||
.Prop(_SC("Description"), &XmlParseResult::GetDescription)
|
||||
/* Functions */
|
||||
.Func(_SC("Check"), &XmlParseResult::Check)
|
||||
);
|
||||
|
||||
xmlns.Bind(_SC("Attribute"), Class< XmlAttribute >(vm, _SC("SqXmlAttribute"))
|
||||
/* Constructors */
|
||||
.Ctor()
|
||||
.Ctor< const XmlAttribute & >()
|
||||
/* Core Metamethods */
|
||||
.Func(_SC("_cmp"), &XmlAttribute::Cmp)
|
||||
.Func(_SC("_tostring"), &XmlAttribute::ToString)
|
||||
/* Properties */
|
||||
.Prop(_SC("Valid"), &XmlAttribute::IsValid)
|
||||
.Prop(_SC("References"), &XmlAttribute::GetRefCount)
|
||||
.Prop(_SC("Empty"), &XmlAttribute::IsEmpty)
|
||||
.Prop(_SC("Hash"), &XmlAttribute::GetHashValue)
|
||||
.Prop(_SC("Name"), &XmlAttribute::GetName, &XmlAttribute::SetName)
|
||||
.Prop(_SC("Value"), &XmlAttribute::GetValue, &XmlAttribute::SetValue)
|
||||
.Prop(_SC("Int"), &XmlAttribute::GetInt, &XmlAttribute::SetInt)
|
||||
.Prop(_SC("Uint"), &XmlAttribute::GetUint, &XmlAttribute::SetUint)
|
||||
.Prop(_SC("Float"), &XmlAttribute::GetFloat, &XmlAttribute::SetFloat)
|
||||
.Prop(_SC("Double"), &XmlAttribute::GetDouble, &XmlAttribute::SetDouble)
|
||||
.Prop(_SC("Long"), &XmlAttribute::GetLong, &XmlAttribute::SetLong)
|
||||
.Prop(_SC("Ulong"), &XmlAttribute::GetUlong, &XmlAttribute::SetUlong)
|
||||
.Prop(_SC("Bool"), &XmlAttribute::GetBool, &XmlAttribute::SetBool)
|
||||
.Prop(_SC("Next"), &XmlAttribute::NextAttribute)
|
||||
.Prop(_SC("Prev"), &XmlAttribute::PrevAttribute)
|
||||
/* Functions */
|
||||
.Func(_SC("SetName"), &XmlAttribute::ApplyName)
|
||||
.Func(_SC("SetValue"), &XmlAttribute::ApplyValue)
|
||||
.Func(_SC("AsString"), &XmlAttribute::AsString)
|
||||
.Func(_SC("AsInt"), &XmlAttribute::AsInt)
|
||||
.Func(_SC("AsUint"), &XmlAttribute::AsUint)
|
||||
.Func(_SC("AsFloat"), &XmlAttribute::AsFloat)
|
||||
.Func(_SC("AsDouble"), &XmlAttribute::AsDouble)
|
||||
.Func(_SC("AsLong"), &XmlAttribute::AsLong)
|
||||
.Func(_SC("AsUlong"), &XmlAttribute::AsUlong)
|
||||
.Func(_SC("AsBool"), &XmlAttribute::AsBool)
|
||||
.Func(_SC("SetString"), &XmlAttribute::ApplyString)
|
||||
.Func(_SC("SetInt"), &XmlAttribute::ApplyInt)
|
||||
.Func(_SC("SetUint"), &XmlAttribute::ApplyUint)
|
||||
.Func(_SC("SetFloat"), &XmlAttribute::ApplyFloat)
|
||||
.Func(_SC("SetDouble"), &XmlAttribute::ApplyDouble)
|
||||
.Func(_SC("SetLong"), &XmlAttribute::ApplyLong)
|
||||
.Func(_SC("SetUlong"), &XmlAttribute::ApplyUlong)
|
||||
.Func(_SC("SetBool"), &XmlAttribute::ApplyBool)
|
||||
);
|
||||
|
||||
xmlns.Bind(_SC("Text"), Class< XmlText >(vm, _SC("SqXmlText"))
|
||||
/* Constructors */
|
||||
.Ctor()
|
||||
.Ctor< const XmlText & >()
|
||||
/* Core Metamethods */
|
||||
.Func(_SC("_cmp"), &XmlText::Cmp)
|
||||
.Func(_SC("_tostring"), &XmlText::ToString)
|
||||
/* Properties */
|
||||
.Prop(_SC("Valid"), &XmlText::IsValid)
|
||||
.Prop(_SC("References"), &XmlText::GetRefCount)
|
||||
.Prop(_SC("Empty"), &XmlText::IsEmpty)
|
||||
.Prop(_SC("Value"), &XmlText::GetValue)
|
||||
.Prop(_SC("Int"), &XmlText::GetInt, &XmlText::SetInt)
|
||||
.Prop(_SC("Uint"), &XmlText::GetUint, &XmlText::SetUint)
|
||||
.Prop(_SC("Float"), &XmlText::GetFloat, &XmlText::SetFloat)
|
||||
.Prop(_SC("Double"), &XmlText::GetDouble, &XmlText::SetDouble)
|
||||
.Prop(_SC("Long"), &XmlText::GetLong, &XmlText::SetLong)
|
||||
.Prop(_SC("Ulong"), &XmlText::GetUlong, &XmlText::SetUlong)
|
||||
.Prop(_SC("Bool"), &XmlText::GetBool, &XmlText::SetBool)
|
||||
.Prop(_SC("Data"), &XmlText::GetData)
|
||||
/* Functions */
|
||||
.Func(_SC("AsString"), &XmlText::AsString)
|
||||
.Func(_SC("AsInt"), &XmlText::AsInt)
|
||||
.Func(_SC("AsUint"), &XmlText::AsUint)
|
||||
.Func(_SC("AsFloat"), &XmlText::AsFloat)
|
||||
.Func(_SC("AsDouble"), &XmlText::AsDouble)
|
||||
.Func(_SC("AsLong"), &XmlText::AsLong)
|
||||
.Func(_SC("AsUlong"), &XmlText::AsUlong)
|
||||
.Func(_SC("AsBool"), &XmlText::AsBool)
|
||||
.Func(_SC("SetString"), &XmlText::ApplyString)
|
||||
.Func(_SC("SetInt"), &XmlText::ApplyInt)
|
||||
.Func(_SC("SetUint"), &XmlText::ApplyUint)
|
||||
.Func(_SC("SetFloat"), &XmlText::ApplyFloat)
|
||||
.Func(_SC("SetDouble"), &XmlText::ApplyDouble)
|
||||
.Func(_SC("SetLong"), &XmlText::ApplyLong)
|
||||
.Func(_SC("SetUlong"), &XmlText::ApplyUlong)
|
||||
.Func(_SC("SetBool"), &XmlText::ApplyBool)
|
||||
);
|
||||
|
||||
xmlns.Bind(_SC("Node"), Class< XmlNode >(vm, _SC("SqXmlNode"))
|
||||
/* Constructors */
|
||||
.Ctor()
|
||||
.Ctor< const XmlNode & >()
|
||||
/* Core Metamethods */
|
||||
.Func(_SC("_cmp"), &XmlNode::Cmp)
|
||||
.Func(_SC("_tostring"), &XmlNode::ToString)
|
||||
/* Properties */
|
||||
.Prop(_SC("Valid"), &XmlNode::IsValid)
|
||||
.Prop(_SC("References"), &XmlNode::GetRefCount)
|
||||
.Prop(_SC("Empty"), &XmlNode::IsEmpty)
|
||||
.Prop(_SC("Hash"), &XmlNode::GetHashValue)
|
||||
.Prop(_SC("OffsetDebug"), &XmlNode::GetOffsetDebug)
|
||||
.Prop(_SC("Type"), &XmlNode::GetType)
|
||||
.Prop(_SC("Name"), &XmlNode::GetName, &XmlNode::SetName)
|
||||
.Prop(_SC("Value"), &XmlNode::GetValue, &XmlNode::SetValue)
|
||||
.Prop(_SC("FirstAttr"), &XmlNode::GetFirstAttr)
|
||||
.Prop(_SC("LastAttr"), &XmlNode::GetLastAttr)
|
||||
.Prop(_SC("FirstChild"), &XmlNode::GetFirstChild)
|
||||
.Prop(_SC("LastChild"), &XmlNode::GetLastChild)
|
||||
.Prop(_SC("NextSibling"), &XmlNode::GetNextSibling)
|
||||
.Prop(_SC("PrevSibling"), &XmlNode::GetPrevSibling)
|
||||
.Prop(_SC("Parent"), &XmlNode::GetParent)
|
||||
.Prop(_SC("Root"), &XmlNode::GetRoot)
|
||||
.Prop(_SC("Text"), &XmlNode::GetText)
|
||||
.Prop(_SC("ChildValue"), &XmlNode::GetChildValue)
|
||||
/* Functions */
|
||||
.Overload< XmlParseResult (XmlNode::*)(CSStr) >(_SC("AppendBuffer"), &XmlNode::AppendBuffer)
|
||||
.Overload< XmlParseResult (XmlNode::*)(CSStr, Uint32) >(_SC("AppendBuffer"), &XmlNode::AppendBuffer)
|
||||
.Overload< XmlParseResult (XmlNode::*)(CSStr, Uint32, Int32) >(_SC("AppendBuffer"), &XmlNode::AppendBuffer)
|
||||
.Func(_SC("SetName"), &XmlNode::ApplyName)
|
||||
.Func(_SC("SetValue"), &XmlNode::ApplyValue)
|
||||
.Func(_SC("GetChild"), &XmlNode::Child)
|
||||
.Func(_SC("GetAttr"), &XmlNode::Attribute)
|
||||
.Func(_SC("GetAttribute"), &XmlNode::Attribute)
|
||||
.Func(_SC("GetAttrFrom"), &XmlNode::AttributeFrom)
|
||||
.Func(_SC("GetAttributeFrom"), &XmlNode::AttributeFrom)
|
||||
.Func(_SC("GetNextSibling"), &XmlNode::NextSibling)
|
||||
.Func(_SC("GetPrevSibling"), &XmlNode::PrevSibling)
|
||||
.Func(_SC("GetChildValue"), &XmlNode::ChildValue)
|
||||
.Func(_SC("AppendAttr"), &XmlNode::AppendAttr)
|
||||
.Func(_SC("PrependAttr"), &XmlNode::PrependAttr)
|
||||
.Func(_SC("InsertAttrAfter"), &XmlNode::InsertAttrAfter)
|
||||
.Func(_SC("InsertAttrBefore"), &XmlNode::InsertAttrBefore)
|
||||
.Func(_SC("AppendAttrCopy"), &XmlNode::AppendAttrCopy)
|
||||
.Func(_SC("PrependAttrCopy"), &XmlNode::PrependAttrCopy)
|
||||
.Func(_SC("InsertAttrCopyAfter"), &XmlNode::InsertAttrCopyAfter)
|
||||
.Func(_SC("InsertAttrCopyBefore"), &XmlNode::InsertAttrCopyBefore)
|
||||
.Func(_SC("AppendChild"), &XmlNode::AppendChild)
|
||||
.Func(_SC("PrependChild"), &XmlNode::PrependChild)
|
||||
.Func(_SC("AppendChildNode"), &XmlNode::AppendChildNode)
|
||||
.Func(_SC("PrependChildNode"), &XmlNode::PrependChildNode)
|
||||
.Func(_SC("AppendChildType"), &XmlNode::AppendChildType)
|
||||
.Func(_SC("PrependChildType"), &XmlNode::PrependChildType)
|
||||
.Func(_SC("InsertChildAfter"), &XmlNode::InsertChildAfter)
|
||||
.Func(_SC("InsertChildBefore"), &XmlNode::InsertChildBefore)
|
||||
.Func(_SC("InsertChildTypeAfter"), &XmlNode::InsertChildTypeAfter)
|
||||
.Func(_SC("InsertChildTypeBefore"), &XmlNode::InsertChildTypeBefore)
|
||||
.Func(_SC("AppendCopy"), &XmlNode::AppendCopy)
|
||||
.Func(_SC("PrependCopy"), &XmlNode::PrependCopy)
|
||||
.Func(_SC("InsertCopyAfter"), &XmlNode::InsertCopyAfter)
|
||||
.Func(_SC("InsertCopyBefore"), &XmlNode::InsertCopyBefore)
|
||||
.Func(_SC("AppendMove"), &XmlNode::AppendMove)
|
||||
.Func(_SC("PrependMove"), &XmlNode::PrependMove)
|
||||
.Func(_SC("InsertMoveAfter"), &XmlNode::InsertMoveAfter)
|
||||
.Func(_SC("InsertMoveBefore"), &XmlNode::InsertMoveBefore)
|
||||
.Func(_SC("RemoveAttr"), &XmlNode::RemoveAttr)
|
||||
.Func(_SC("RemoveAttrInst"), &XmlNode::RemoveAttrInst)
|
||||
.Func(_SC("RemoveChild"), &XmlNode::RemoveChild)
|
||||
.Func(_SC("RemoveChildInst"), &XmlNode::RemoveChildInst)
|
||||
.Overload< XmlNode (XmlNode::*)(CSStr, CSStr) const >(_SC("FindChildByAttr"), &XmlNode::FindChildByAttr)
|
||||
.Overload< XmlNode (XmlNode::*)(CSStr, CSStr, CSStr) const >(_SC("FindChildByAttr"), &XmlNode::FindChildByAttr)
|
||||
.Func(_SC("FindElemByPath"), &XmlNode::FindElemByPath)
|
||||
);
|
||||
|
||||
xmlns.Bind(_SC("Document"), Class< XmlDocument, NoCopy< XmlDocument > >(vm, _SC("SqXmlDocument"))
|
||||
/* Constructors */
|
||||
.Ctor()
|
||||
/* Core Metamethods */
|
||||
.Func(_SC("_cmp"), &XmlDocument::Cmp)
|
||||
.Func(_SC("_tostring"), &XmlDocument::ToString)
|
||||
/* Properties */
|
||||
.Prop(_SC("Valid"), &XmlDocument::IsValid)
|
||||
.Prop(_SC("References"), &XmlDocument::GetRefCount)
|
||||
.Prop(_SC("Node"), &XmlDocument::GetNode)
|
||||
/* Functions */
|
||||
.Overload< void (XmlDocument::*)(void) >(_SC("Reset"), &XmlDocument::Reset)
|
||||
.Overload< void (XmlDocument::*)(const XmlDocument &) >(_SC("Reset"), &XmlDocument::Reset)
|
||||
.Overload< XmlParseResult (XmlDocument::*)(CSStr) >(_SC("LoadString"), &XmlDocument::LoadString)
|
||||
.Overload< XmlParseResult (XmlDocument::*)(CSStr, Uint32) >(_SC("LoadString"), &XmlDocument::LoadString)
|
||||
.Overload< XmlParseResult (XmlDocument::*)(CSStr) >(_SC("LoadFile"), &XmlDocument::LoadFile)
|
||||
.Overload< XmlParseResult (XmlDocument::*)(CSStr, Uint32) >(_SC("LoadFile"), &XmlDocument::LoadFile)
|
||||
.Overload< XmlParseResult (XmlDocument::*)(CSStr, Uint32, Int32) >(_SC("LoadFile"), &XmlDocument::LoadFile)
|
||||
.Overload< void (XmlDocument::*)(CSStr) >(_SC("SaveFile"), &XmlDocument::SaveFile)
|
||||
.Overload< void (XmlDocument::*)(CSStr, CSStr) >(_SC("SaveFile"), &XmlDocument::SaveFile)
|
||||
.Overload< void (XmlDocument::*)(CSStr, CSStr, Uint32) >(_SC("SaveFile"), &XmlDocument::SaveFile)
|
||||
.Overload< void (XmlDocument::*)(CSStr, CSStr, Uint32, Int32) >(_SC("SaveFile"), &XmlDocument::SaveFile)
|
||||
);
|
||||
|
||||
RootTable(vm).Bind(_SC("SqXml"), xmlns);
|
||||
|
||||
ConstTable(vm).Enum(_SC("SqXmlNodeType"), Enumeration(vm)
|
||||
.Const(_SC("Null"), Int32(node_null))
|
||||
.Const(_SC("Document"), Int32(node_document))
|
||||
.Const(_SC("Element"), Int32(node_element))
|
||||
.Const(_SC("PCData"), Int32(node_pcdata))
|
||||
.Const(_SC("CData"), Int32(node_cdata))
|
||||
.Const(_SC("Comment"), Int32(node_comment))
|
||||
.Const(_SC("Pi"), Int32(node_pi))
|
||||
.Const(_SC("Declaration"), Int32(node_declaration))
|
||||
.Const(_SC("Doctype"), Int32(node_doctype))
|
||||
);
|
||||
|
||||
ConstTable(vm).Enum(_SC("SqXmlParse"), Enumeration(vm)
|
||||
.Const(_SC("Minimal"), Int32(parse_minimal))
|
||||
.Const(_SC("Default"), Int32(parse_default))
|
||||
.Const(_SC("Full"), Int32(parse_full))
|
||||
.Const(_SC("Pi"), Int32(parse_pi))
|
||||
.Const(_SC("Comments"), Int32(parse_comments))
|
||||
.Const(_SC("CData"), Int32(parse_cdata))
|
||||
.Const(_SC("WSPCData"), Int32(parse_ws_pcdata))
|
||||
.Const(_SC("Escapes"), Int32(parse_escapes))
|
||||
.Const(_SC("EOL"), Int32(parse_eol))
|
||||
.Const(_SC("WConvAttribute"), Int32(parse_wconv_attribute))
|
||||
.Const(_SC("WNormAttribute"), Int32(parse_wnorm_attribute))
|
||||
.Const(_SC("Declaration"), Int32(parse_declaration))
|
||||
.Const(_SC("Doctype"), Int32(parse_doctype))
|
||||
.Const(_SC("WSPCDataSingle"), Int32(parse_ws_pcdata_single))
|
||||
.Const(_SC("TrimPCData"), Int32(parse_trim_pcdata))
|
||||
.Const(_SC("Fragment"), Int32(parse_fragment))
|
||||
.Const(_SC("EmbedPCData"), Int32(parse_embed_pcdata))
|
||||
);
|
||||
|
||||
ConstTable(vm).Enum(_SC("SqXmlEncoding"), Enumeration(vm)
|
||||
.Const(_SC("Auto"), Int32(encoding_auto))
|
||||
.Const(_SC("Utf8"), Int32(encoding_utf8))
|
||||
.Const(_SC("Utf16LE"), Int32(encoding_utf16_le))
|
||||
.Const(_SC("Utf16BE"), Int32(encoding_utf16_be))
|
||||
.Const(_SC("Utf16"), Int32(encoding_utf16))
|
||||
.Const(_SC("Utf32LE"), Int32(encoding_utf32_le))
|
||||
.Const(_SC("Utf32BE"), Int32(encoding_utf32_be))
|
||||
.Const(_SC("Utf32"), Int32(encoding_utf32))
|
||||
.Const(_SC("WChar"), Int32(encoding_wchar))
|
||||
.Const(_SC("Latin1"), Int32(encoding_latin1))
|
||||
);
|
||||
|
||||
ConstTable(vm).Enum(_SC("SqXmlFormat"), Enumeration(vm)
|
||||
.Const(_SC("Indent"), Int32(format_indent))
|
||||
.Const(_SC("WriteBOM"), Int32(format_write_bom))
|
||||
.Const(_SC("Raw"), Int32(format_raw))
|
||||
.Const(_SC("NoDeclaration"), Int32(format_no_declaration))
|
||||
.Const(_SC("NoEscapes"), Int32(format_no_escapes))
|
||||
.Const(_SC("SaveFileText"), Int32(format_save_file_text))
|
||||
.Const(_SC("IndentAttributes"), Int32(format_indent_attributes))
|
||||
.Const(_SC("Default"), Int32(format_default))
|
||||
);
|
||||
|
||||
ConstTable(vm).Enum(_SC("SqXmlParseStatus"), Enumeration(vm)
|
||||
.Const(_SC("Ok"), Int32(status_ok))
|
||||
.Const(_SC("FileNotFound"), Int32(status_file_not_found))
|
||||
.Const(_SC("IOError"), Int32(status_io_error))
|
||||
.Const(_SC("OutOfMemory"), Int32(status_out_of_memory))
|
||||
.Const(_SC("InternalError"), Int32(status_internal_error))
|
||||
.Const(_SC("UnrecognizedTag"), Int32(status_unrecognized_tag))
|
||||
.Const(_SC("BadPi"), Int32(status_bad_pi))
|
||||
.Const(_SC("BadComment"), Int32(status_bad_comment))
|
||||
.Const(_SC("BadCData"), Int32(status_bad_cdata))
|
||||
.Const(_SC("BadDoctype"), Int32(status_bad_doctype))
|
||||
.Const(_SC("BadPCData"), Int32(status_bad_pcdata))
|
||||
.Const(_SC("BadStartElement"), Int32(status_bad_start_element))
|
||||
.Const(_SC("BadAttribute"), Int32(status_bad_attribute))
|
||||
.Const(_SC("BadEndElement"), Int32(status_bad_end_element))
|
||||
.Const(_SC("EndElementMismatch"), Int32(status_end_element_mismatch))
|
||||
.Const(_SC("AppendInvalidRoot"), Int32(status_append_invalid_root))
|
||||
.Const(_SC("NoDocumentElement"), Int32(status_no_document_element))
|
||||
);
|
||||
ConstTable(vm).Enum(_SC("SqXmlXpathValueType"), Enumeration(vm)
|
||||
.Const(_SC("None"), Int32(xpath_type_none))
|
||||
.Const(_SC("NodeSet"), Int32(xpath_type_node_set))
|
||||
.Const(_SC("Number"), Int32(xpath_type_number))
|
||||
.Const(_SC("String"), Int32(xpath_type_string))
|
||||
.Const(_SC("Boolean"), Int32(xpath_type_boolean))
|
||||
);
|
||||
}
|
||||
|
||||
} // Namespace:: SqMod
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user