SerializableArray.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using System;
  2. using System.Runtime.CompilerServices;
  3. namespace BansheeEngine
  4. {
  5. #pragma warning disable 649
  6. public sealed class SerializableArray : ScriptObject
  7. {
  8. private SerializableField.FieldType elementType;
  9. private Type internalElementType;
  10. private Array referencedArray;
  11. public SerializableField.FieldType ElementType
  12. {
  13. get { return elementType; }
  14. }
  15. internal SerializableArray(Array array)
  16. {
  17. referencedArray = array;
  18. Internal_CreateInstance(this, referencedArray);
  19. }
  20. public SerializableProperty GetProperty(int elementIdx)
  21. {
  22. SerializableProperty.Getter getter = () => referencedArray.GetValue(elementIdx);
  23. SerializableProperty.Setter setter = (object value) => referencedArray.SetValue(value, elementIdx);
  24. return new SerializableProperty(ElementType, internalElementType, getter, setter);
  25. }
  26. public int GetLength()
  27. {
  28. return referencedArray.GetLength(0); // TODO - Support multi-rank arrays
  29. }
  30. [MethodImpl(MethodImplOptions.InternalCall)]
  31. private static extern void Internal_CreateInstance(SerializableArray instance, object obj);
  32. }
  33. }