Improve vector container.

Add basic map container.
This commit is contained in:
Sandu Liviu Catalin
2021-01-31 14:09:37 +02:00
parent 1829668015
commit 0670a8dadf
6 changed files with 546 additions and 99 deletions
+50 -46
View File
@@ -15,53 +15,57 @@ SQMOD_DECL_TYPENAME(SqVectorBool, _SC("SqVectorBool"))
template < class T, class U >
static void Register_Vector(HSQUIRRELVM vm, Table & ns, const SQChar * name)
{
using Vector = SqVector< T >;
using Container = SqVector< T >;
// --------------------------------------------------------------------------------------------
Class< Vector, NoCopy< Vector > > cls(vm, U::Str);
// Constructors
cls.Ctor()
.template Ctor< SQInteger >()
.template Ctor< SQInteger, typename Vector::OptimalArg >()
// Meta-methods
.SquirrelFunc(_SC("_typename"), &U::Fn)
// Properties
.Prop(_SC("Null"), &Vector::IsNull)
.Prop(_SC("Front"), &Vector::Front)
.Prop(_SC("Back"), &Vector::Back)
.Prop(_SC("Empty"), &Vector::Empty)
.Prop(_SC("Size"), &Vector::Size, &Vector::Resize)
.Prop(_SC("Capacity"), &Vector::Capacity, &Vector::Reserve)
// Member Methods
.Func(_SC("Get"), &Vector::Get)
.Func(_SC("Set"), &Vector::Set)
.Func(_SC("Resize"), &Vector::ResizeEx)
.Func(_SC("Reserve"), &Vector::Reserve)
.Func(_SC("Compact"), &Vector::Compact)
.Func(_SC("Clear"), &Vector::Clear)
.Func(_SC("Push"), &Vector::Push)
.Func(_SC("Pop"), &Vector::Pop)
.Func(_SC("EraseAt"), &Vector::EraseAt)
.Func(_SC("EraseFrom"), &Vector::EraseFrom)
.Func(_SC("EraseValue"), &Vector::EraseValue)
.Func(_SC("InsertAt"), &Vector::InsertAt)
.Func(_SC("Insert"), &Vector::Insert)
.Func(_SC("Locate"), &Vector::Locate)
.Func(_SC("LocateFrom"), &Vector::LocateFrom)
.Func(_SC("Count"), &Vector::Count)
.Func(_SC("Equal"), &Vector::Equal)
.Func(_SC("Each"), &Vector::Each)
.Func(_SC("EachRange"), &Vector::EachRange)
.Func(_SC("While"), &Vector::While)
.Func(_SC("WhileRange"), &Vector::WhileRange)
.Func(_SC("AsArray"), &Vector::AsArray)
.Func(_SC("Reverse"), &Vector::Reverse)
.Func(_SC("Generate"), &Vector::Generate)
.Func(_SC("GenerateSome"), &Vector::GenerateSome)
.Func(_SC("GenerateFrom"), &Vector::GenerateFrom);
// --------------------------------------------------------------------------------------------
ns.Bind(name, cls);
// Bind it to the root table with a `Sq` prefix
RootTable(vm).Bind(fmt::format("Sq{}", name).c_str(), cls);
ns.Bind(name,
Class< Container, NoCopy< Container > >(vm, U::Str)
// Constructors
.Ctor()
.template Ctor< SQInteger >()
.template Ctor< SQInteger, typename Container::OptimalArg >()
// Meta-methods
.SquirrelFunc(_SC("_typename"), &U::Fn)
// Properties
.Prop(_SC("Null"), &Container::IsNull)
.Prop(_SC("Front"), &Container::Front)
.Prop(_SC("Back"), &Container::Back)
.Prop(_SC("Empty"), &Container::Empty)
.Prop(_SC("Size"), &Container::Size, &Container::Resize)
.Prop(_SC("Capacity"), &Container::Capacity, &Container::Reserve)
.Prop(_SC("Sorted"), &Container::IsSorted)
// Member Methods
.Func(_SC("Get"), &Container::Get)
.Func(_SC("Set"), &Container::Set)
.Func(_SC("Resize"), &Container::ResizeEx)
.Func(_SC("Reserve"), &Container::Reserve)
.Func(_SC("Compact"), &Container::Compact)
.Func(_SC("Clear"), &Container::Clear)
.Func(_SC("Push"), &Container::Push)
.Func(_SC("Append"), &Container::Push)
.Func(_SC("Extend"), &Container::Extend)
.Func(_SC("Pop"), &Container::Pop)
.Func(_SC("EraseAt"), &Container::EraseAt)
.Func(_SC("EraseFrom"), &Container::EraseFrom)
.Func(_SC("EraseValue"), &Container::EraseValue)
.Func(_SC("InsertAt"), &Container::InsertAt)
.Func(_SC("Insert"), &Container::Insert)
.Func(_SC("Locate"), &Container::Locate)
.Func(_SC("LocateFrom"), &Container::LocateFrom)
.Func(_SC("Count"), &Container::Count)
.Func(_SC("Equal"), &Container::Equal)
.Func(_SC("Slice"), &Container::Slice)
.Func(_SC("Each"), &Container::Each)
.Func(_SC("EachRange"), &Container::EachRange)
.Func(_SC("While"), &Container::While)
.Func(_SC("WhileRange"), &Container::WhileRange)
.Func(_SC("AsArray"), &Container::AsArray)
.Func(_SC("Reverse"), &Container::Reverse)
.Func(_SC("Generate"), &Container::Generate)
.Func(_SC("GenerateSome"), &Container::GenerateSome)
.Func(_SC("GenerateFrom"), &Container::GenerateFrom)
.Func(_SC("Sort"), &Container::Sort)
.Func(_SC("Shuffle"), &Container::Shuffle)
);
}
// ================================================================================================