Browse Source

Added VectorBuffer read/write to AngelScript API.

Lasse Öörni 11 years ago
parent
commit
4d8b3b8bae
2 changed files with 17 additions and 3 deletions
  1. 16 1
      Source/Urho3D/Script/APITemplates.h
  2. 1 2
      Source/Urho3D/Script/IOAPI.cpp

+ 16 - 1
Source/Urho3D/Script/APITemplates.h

@@ -30,6 +30,7 @@
 #include "../IO/File.h"
 #include "../IO/File.h"
 #include "../Container/HashSet.h"
 #include "../Container/HashSet.h"
 #include "../IO/Log.h"
 #include "../IO/Log.h"
+#include "../IO/VectorBuffer.h"
 #include "../Scene/Node.h"
 #include "../Scene/Node.h"
 #include "../Resource/Resource.h"
 #include "../Resource/Resource.h"
 #include "../Script/Script.h"
 #include "../Script/Script.h"
@@ -231,6 +232,12 @@ template <class T> unsigned SerializerWrite(CScriptArray* arr, T* ptr)
     return bytesToWrite ? ptr->Write(arr->At(0), bytesToWrite) : 0;
     return bytesToWrite ? ptr->Write(arr->At(0), bytesToWrite) : 0;
 }
 }
 
 
+/// Template function for writing a VectorBuffer to a serializer.
+template <class T> bool SerializerWriteVectorBuffer(VectorBuffer* src, T* ptr)
+{
+    return ptr->Write(src->GetData(), src->GetSize()) == src->GetSize();
+}
+
 /// Template function for registering a class derived from Serializer.
 /// Template function for registering a class derived from Serializer.
 template <class T> void RegisterSerializer(asIScriptEngine* engine, const char* className)
 template <class T> void RegisterSerializer(asIScriptEngine* engine, const char* className)
 {
 {
@@ -261,12 +268,13 @@ template <class T> void RegisterSerializer(asIScriptEngine* engine, const char*
     engine->RegisterObjectMethod(className, "bool WriteStringHash(const StringHash&in)", asMETHODPR(T, WriteStringHash, (const StringHash&), bool), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "bool WriteStringHash(const StringHash&in)", asMETHODPR(T, WriteStringHash, (const StringHash&), bool), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "bool WriteVariant(const Variant&in)", asMETHODPR(T, WriteVariant, (const Variant&), bool), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "bool WriteVariant(const Variant&in)", asMETHODPR(T, WriteVariant, (const Variant&), bool), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "bool WriteVariantMap(const VariantMap&in)", asMETHODPR(T, WriteVariantMap, (const VariantMap&), bool), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "bool WriteVariantMap(const VariantMap&in)", asMETHODPR(T, WriteVariantMap, (const VariantMap&), bool), asCALL_THISCALL);
+    engine->RegisterObjectMethod(className, "bool WriteVectorBuffer(const VectorBuffer&in)", asFUNCTION(SerializerWriteVectorBuffer<T>), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod(className, "bool WriteVLE(uint)", asMETHODPR(T, WriteVLE, (unsigned), bool), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "bool WriteVLE(uint)", asMETHODPR(T, WriteVLE, (unsigned), bool), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "bool WriteNetID(uint)", asMETHODPR(T, WriteNetID, (unsigned), bool), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "bool WriteNetID(uint)", asMETHODPR(T, WriteNetID, (unsigned), bool), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "bool WriteLine(const String&in)", asMETHODPR(T, WriteLine, (const String&), bool), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "bool WriteLine(const String&in)", asMETHODPR(T, WriteLine, (const String&), bool), asCALL_THISCALL);
 }
 }
 
 
-/// Template function for reading from a serializer into an array.
+/// Template function for reading from a deserializer into an array.
 template <class T> CScriptArray* DeserializerRead(unsigned size, T* ptr)
 template <class T> CScriptArray* DeserializerRead(unsigned size, T* ptr)
 {
 {
     PODVector<unsigned char> vector(size);
     PODVector<unsigned char> vector(size);
@@ -275,6 +283,12 @@ template <class T> CScriptArray* DeserializerRead(unsigned size, T* ptr)
     return VectorToArray(vector, "Array<uint8>");
     return VectorToArray(vector, "Array<uint8>");
 }
 }
 
 
+/// Template function for reading from a deserializer into a VectorBuffer.
+template <class T> VectorBuffer DeserializerReadVectorBuffer(unsigned size, T* ptr)
+{
+    return VectorBuffer(*ptr, size);
+}
+
 /// Template function for registering a class derived from Deserializer.
 /// Template function for registering a class derived from Deserializer.
 template <class T> void RegisterDeserializer(asIScriptEngine* engine, const char* className)
 template <class T> void RegisterDeserializer(asIScriptEngine* engine, const char* className)
 {
 {
@@ -305,6 +319,7 @@ template <class T> void RegisterDeserializer(asIScriptEngine* engine, const char
     engine->RegisterObjectMethod(className, "StringHash ReadStringHash()", asMETHODPR(T, ReadStringHash, (), StringHash), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "StringHash ReadStringHash()", asMETHODPR(T, ReadStringHash, (), StringHash), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "Variant ReadVariant()", asMETHODPR(T, ReadVariant, (), Variant), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "Variant ReadVariant()", asMETHODPR(T, ReadVariant, (), Variant), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "VariantMap ReadVariantMap()", asMETHODPR(T, ReadVariantMap, (), VariantMap), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "VariantMap ReadVariantMap()", asMETHODPR(T, ReadVariantMap, (), VariantMap), asCALL_THISCALL);
+    engine->RegisterObjectMethod(className, "VectorBuffer ReadVectorBuffer(uint)", asFUNCTION(DeserializerReadVectorBuffer<T>), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod(className, "uint ReadVLE()", asMETHODPR(T, ReadVLE, (), unsigned), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "uint ReadVLE()", asMETHODPR(T, ReadVLE, (), unsigned), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "uint ReadNetID()", asMETHODPR(T, ReadNetID, (), unsigned), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "uint ReadNetID()", asMETHODPR(T, ReadNetID, (), unsigned), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "String ReadLine()", asMETHODPR(T, ReadLine, (), String), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "String ReadLine()", asMETHODPR(T, ReadLine, (), String), asCALL_THISCALL);

+ 1 - 2
Source/Urho3D/Script/IOAPI.cpp

@@ -27,7 +27,6 @@
 #include "../IO/Log.h"
 #include "../IO/Log.h"
 #include "../IO/PackageFile.h"
 #include "../IO/PackageFile.h"
 #include "../Core/ProcessUtils.h"
 #include "../Core/ProcessUtils.h"
-#include "../IO/VectorBuffer.h"
 
 
 namespace Urho3D
 namespace Urho3D
 {
 {
@@ -282,6 +281,7 @@ static void RegisterSerialization(asIScriptEngine* engine)
     engine->RegisterGlobalProperty("const uint SCAN_DIRS", (void*)&SCAN_DIRS);
     engine->RegisterGlobalProperty("const uint SCAN_DIRS", (void*)&SCAN_DIRS);
     engine->RegisterGlobalProperty("const uint SCAN_HIDDEN", (void*)&SCAN_HIDDEN);
     engine->RegisterGlobalProperty("const uint SCAN_HIDDEN", (void*)&SCAN_HIDDEN);
 
 
+    engine->RegisterObjectType("VectorBuffer", sizeof(VectorBuffer), asOBJ_VALUE | asOBJ_APP_CLASS_CDK);
     engine->RegisterObjectType("Serializer", 0, asOBJ_REF);
     engine->RegisterObjectType("Serializer", 0, asOBJ_REF);
     engine->RegisterObjectBehaviour("Serializer", asBEHAVE_ADDREF, "void f()", asFUNCTION(FakeAddRef), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("Serializer", asBEHAVE_ADDREF, "void f()", asFUNCTION(FakeAddRef), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("Serializer", asBEHAVE_RELEASE, "void f()", asFUNCTION(FakeReleaseRef), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("Serializer", asBEHAVE_RELEASE, "void f()", asFUNCTION(FakeReleaseRef), asCALL_CDECL_OBJLAST);
@@ -303,7 +303,6 @@ static void RegisterSerialization(asIScriptEngine* engine)
     RegisterSerializer<File>(engine, "File");
     RegisterSerializer<File>(engine, "File");
     RegisterDeserializer<File>(engine, "File");
     RegisterDeserializer<File>(engine, "File");
 
 
-    engine->RegisterObjectType("VectorBuffer", sizeof(VectorBuffer), asOBJ_VALUE | asOBJ_APP_CLASS_CDK);
     engine->RegisterObjectBehaviour("VectorBuffer", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(ConstructVectorBuffer), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("VectorBuffer", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(ConstructVectorBuffer), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("VectorBuffer", asBEHAVE_CONSTRUCT, "void f(const VectorBuffer&in)", asFUNCTION(ConstructVectorBufferCopy), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("VectorBuffer", asBEHAVE_CONSTRUCT, "void f(const VectorBuffer&in)", asFUNCTION(ConstructVectorBufferCopy), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("VectorBuffer", asBEHAVE_CONSTRUCT, "void f(Deserializer@+, uint)", asFUNCTION(ConstructVectorBufferFromStream), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("VectorBuffer", asBEHAVE_CONSTRUCT, "void f(Deserializer@+, uint)", asFUNCTION(ConstructVectorBufferFromStream), asCALL_CDECL_OBJLAST);