MCPcopy Create free account
hub / github.com/deathkiller/jazz2-native / RegisterArray

Function RegisterArray

Sources/Jazz2/Scripting/RegisterArray.cpp:209–306  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

207 }
208
209 void RegisterArray(asIScriptEngine* engine)
210 {
211 std::int32_t r;
212
213 // Register the object type user data clean up
214 engine->SetTypeInfoUserDataCleanupCallback(CleanupTypeInfoArrayCache, ARRAY_CACHE);
215
216 // Register the array type as a template
217 r = engine->RegisterObjectType("array<class T>", 0, asOBJ_REF | asOBJ_GC | asOBJ_TEMPLATE); RETURN_ASSERT(r >= 0);
218
219 // Register a callback for validating the subtype before it is used
220 r = engine->RegisterObjectBehaviour("array<T>", asBEHAVE_TEMPLATE_CALLBACK, "bool f(int&in, bool&out)", asFUNCTION(ScriptArrayTemplateCallback), asCALL_CDECL); RETURN_ASSERT(r >= 0);
221
222 // Templates receive the object type as the first parameter. To the script writer this is hidden
223 r = engine->RegisterObjectBehaviour("array<T>", asBEHAVE_FACTORY, "array<T>@ f(int&in)", asFUNCTIONPR(CScriptArray::Create, (asITypeInfo*), CScriptArray*), asCALL_CDECL); RETURN_ASSERT(r >= 0);
224 r = engine->RegisterObjectBehaviour("array<T>", asBEHAVE_FACTORY, "array<T>@ f(int&in, uint length) explicit", asFUNCTIONPR(CScriptArray::Create, (asITypeInfo*, std::uint32_t), CScriptArray*), asCALL_CDECL); RETURN_ASSERT(r >= 0);
225 r = engine->RegisterObjectBehaviour("array<T>", asBEHAVE_FACTORY, "array<T>@ f(int&in, uint length, const T &in value)", asFUNCTIONPR(CScriptArray::Create, (asITypeInfo*, std::uint32_t, void*), CScriptArray*), asCALL_CDECL); RETURN_ASSERT(r >= 0);
226
227 // Register the factory that will be used for initialization lists
228 r = engine->RegisterObjectBehaviour("array<T>", asBEHAVE_LIST_FACTORY, "array<T>@ f(int&in type, int&in list) {repeat T}", asFUNCTIONPR(CScriptArray::Create, (asITypeInfo*, void*), CScriptArray*), asCALL_CDECL); RETURN_ASSERT(r >= 0);
229
230 // The memory management methods
231 r = engine->RegisterObjectBehaviour("array<T>", asBEHAVE_ADDREF, "void f()", asMETHOD(CScriptArray, AddRef), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
232 r = engine->RegisterObjectBehaviour("array<T>", asBEHAVE_RELEASE, "void f()", asMETHOD(CScriptArray, Release), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
233
234 // The index operator returns the template subtype
235 r = engine->RegisterObjectMethod("array<T>", "T &opIndex(uint index)", asMETHODPR(CScriptArray, At, (std::uint32_t), void*), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
236 r = engine->RegisterObjectMethod("array<T>", "const T &opIndex(uint index) const", asMETHODPR(CScriptArray, At, (std::uint32_t) const, const void*), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
237
238 // The assignment operator
239 r = engine->RegisterObjectMethod("array<T>", "array<T> &opAssign(const array<T>&in)", asMETHOD(CScriptArray, operator=), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
240
241 // Other methods
242 r = engine->RegisterObjectMethod("array<T>", "void insertAt(uint index, const T&in value)", asMETHODPR(CScriptArray, InsertAt, (std::uint32_t, void*), void), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
243 r = engine->RegisterObjectMethod("array<T>", "void insertAt(uint index, const array<T>& arr)", asMETHODPR(CScriptArray, InsertAt, (std::uint32_t, const CScriptArray&), void), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
244 r = engine->RegisterObjectMethod("array<T>", "void insertLast(const T&in value)", asMETHOD(CScriptArray, InsertLast), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
245 r = engine->RegisterObjectMethod("array<T>", "void removeAt(uint index)", asMETHOD(CScriptArray, RemoveAt), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
246 r = engine->RegisterObjectMethod("array<T>", "void removeLast()", asMETHOD(CScriptArray, RemoveLast), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
247 r = engine->RegisterObjectMethod("array<T>", "void removeRange(uint start, uint count)", asMETHOD(CScriptArray, RemoveRange), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
248 // TODO: Should length() and resize() be deprecated as the property accessors do the same thing?
249 // TODO: Register as size() for consistency with other types
250#if AS_USE_ACCESSORS != 1
251 r = engine->RegisterObjectMethod("array<T>", "uint length() const", asMETHOD(CScriptArray, GetSize), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
252#endif
253 r = engine->RegisterObjectMethod("array<T>", "void reserve(uint length)", asMETHOD(CScriptArray, Reserve), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
254 r = engine->RegisterObjectMethod("array<T>", "void resize(uint length)", asMETHODPR(CScriptArray, Resize, (std::uint32_t), void), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
255 r = engine->RegisterObjectMethod("array<T>", "void sortAsc()", asMETHODPR(CScriptArray, SortAsc, (), void), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
256 r = engine->RegisterObjectMethod("array<T>", "void sortAsc(uint startAt, uint count)", asMETHODPR(CScriptArray, SortAsc, (std::uint32_t, std::uint32_t), void), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
257 r = engine->RegisterObjectMethod("array<T>", "void sortDesc()", asMETHODPR(CScriptArray, SortDesc, (), void), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
258 r = engine->RegisterObjectMethod("array<T>", "void sortDesc(uint startAt, uint count)", asMETHODPR(CScriptArray, SortDesc, (std::uint32_t, std::uint32_t), void), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
259 r = engine->RegisterObjectMethod("array<T>", "void reverse()", asMETHOD(CScriptArray, Reverse), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
260 // The token 'if_handle_then_const' tells the engine that if the type T is a handle, then it should refer to a read-only object
261 r = engine->RegisterObjectMethod("array<T>", "int find(const T&in if_handle_then_const value) const", asMETHODPR(CScriptArray, Find, (void*) const, int), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
262 // TODO: It should be "int find(const T&in value, uint startAt = 0) const"
263 r = engine->RegisterObjectMethod("array<T>", "int find(uint startAt, const T&in if_handle_then_const value) const", asMETHODPR(CScriptArray, Find, (std::uint32_t, void*) const, int), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
264 r = engine->RegisterObjectMethod("array<T>", "int findByRef(const T&in if_handle_then_const value) const", asMETHODPR(CScriptArray, FindByRef, (void*) const, int), asCALL_THISCALL); RETURN_ASSERT(r >= 0);
265 // TODO: It should be "int findByRef(const T&in value, uint startAt = 0) const"
266 r = engine->RegisterObjectMethod("array<T>", "int findByRef(uint startAt, const T&in if_handle_then_const value) const", asMETHODPR(CScriptArray, FindByRef, (std::uint32_t, void*) const, int), asCALL_THISCALL); RETURN_ASSERT(r >= 0);

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected