Manual_IO.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Copyright (c) 2008-2023 the Urho3D project
  2. // License: MIT
  3. #pragma once
  4. #include "../IO/NamedPipe.h"
  5. #include "../IO/PackageFile.h"
  6. #include "../IO/FileSystem.h"
  7. namespace Urho3D
  8. {
  9. // virtual unsigned Deserializer::Read(void* dest, unsigned size) = 0 | File: ../IO/Deserializer.h
  10. template <class T> CScriptArray* Deserializer_Read(unsigned size, T* ptr)
  11. {
  12. Vector<unsigned char> vector(size);
  13. unsigned bytesRead = size ? ptr->Read(&vector[0], size) : 0;
  14. vector.Resize(bytesRead);
  15. return VectorToArray(vector, "Array<uint8>");
  16. }
  17. // VectorBuffer::VectorBuffer(Deserializer& source, unsigned size) | File: .. / IO / VectorBuffer.h
  18. template <class T> VectorBuffer Deserializer_ReadVectorBuffer(unsigned size, T* ptr)
  19. {
  20. return VectorBuffer(*ptr, size);
  21. }
  22. #define REGISTER_MEMBERS_MANUAL_PART_Deserializer() \
  23. /* virtual unsigned Deserializer::Read(void* dest, unsigned size) = 0 | File: ../IO/Deserializer.h */ \
  24. engine->RegisterObjectMethod(className, "Array<uint8>@ Read(uint)", AS_FUNCTION_OBJLAST(Deserializer_Read<T>), AS_CALL_CDECL_OBJLAST); \
  25. \
  26. /* VectorBuffer::VectorBuffer(Deserializer& source, unsigned size) | File: .. / IO / VectorBuffer.h */ \
  27. engine->RegisterObjectMethod(className, "VectorBuffer ReadVectorBuffer(uint)", AS_FUNCTION_OBJLAST(Deserializer_ReadVectorBuffer<T>), AS_CALL_CDECL_OBJLAST);
  28. // ================================================================================
  29. // virtual unsigned Serializer::Write(const void* data, unsigned size) = 0 | File: ../IO/Serializer.h
  30. template <class T> unsigned Serializer_Write(CScriptArray* arr, T* ptr)
  31. {
  32. unsigned bytesToWrite = arr->GetSize();
  33. return bytesToWrite ? ptr->Write(arr->At(0), bytesToWrite) : 0;
  34. }
  35. // virtual unsigned Serializer::Write(const void* data, unsigned size) = 0 | File: ../IO/Serializer.h
  36. template <class T> bool Serializer_Write_VectorBuffer(VectorBuffer* src, T* ptr)
  37. {
  38. return ptr->Write(src->GetData(), src->GetSize()) == src->GetSize();
  39. }
  40. #define REGISTER_MEMBERS_MANUAL_PART_Serializer() \
  41. /* virtual unsigned Serializer::Write(const void* data, unsigned size) = 0 | File: ../IO/Serializer.h */ \
  42. engine->RegisterObjectMethod(className, "uint Write(Array<uint8>@+)", AS_FUNCTION_OBJLAST(Serializer_Write<T>), AS_CALL_CDECL_OBJLAST); \
  43. engine->RegisterObjectMethod(className, "bool WriteVectorBuffer(const VectorBuffer&in)", AS_FUNCTION_OBJLAST(Serializer_Write_VectorBuffer<T>), AS_CALL_CDECL_OBJLAST);
  44. // ================================================================================
  45. // void FileSystem::ScanDir(Vector<String>& result, const String& pathName, const String& filter, unsigned flags, bool recursive) const | File: ../IO/FileSystem.h
  46. template <class T> CScriptArray* FileSystem_ScanDir(const String& pathName, const String& filter, unsigned flags, bool recursive, T* ptr)
  47. {
  48. Vector<String> result;
  49. ptr->ScanDir(result, pathName, filter, flags, recursive);
  50. return VectorToArray<String>(result, "Array<String>");
  51. }
  52. #define REGISTER_MEMBERS_MANUAL_PART_FileSystem() \
  53. /* void FileSystem::ScanDir(Vector<String>& result, const String& pathName, const String& filter, unsigned flags, bool recursive) const | File: ../IO/FileSystem.h */ \
  54. engine->RegisterObjectMethod(className, "Array<String>@ ScanDir(const String&in, const String&in, uint, bool) const", AS_FUNCTION_OBJLAST(FileSystem_ScanDir<T>), AS_CALL_CDECL_OBJLAST);
  55. }