2
0

SerializableArray.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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 SerializableProperty.FieldType elementType;
  9. private Type internalElementType;
  10. private Array referencedArray;
  11. public SerializableProperty.FieldType ElementType
  12. {
  13. get { return elementType; }
  14. }
  15. // Constructed from native code
  16. private SerializableArray(Array array, Type internalElementType)
  17. {
  18. referencedArray = array;
  19. this.internalElementType = internalElementType;
  20. elementType = SerializableProperty.DetermineFieldType(internalElementType);
  21. }
  22. public SerializableProperty GetProperty(int elementIdx)
  23. {
  24. SerializableProperty.Getter getter = () => referencedArray.GetValue(elementIdx);
  25. SerializableProperty.Setter setter = (object value) => referencedArray.SetValue(value, elementIdx);
  26. SerializableProperty property = Internal_CreateProperty(mCachedPtr);
  27. property.Construct(ElementType, internalElementType, getter, setter);
  28. return property;
  29. }
  30. public int GetLength()
  31. {
  32. return referencedArray.GetLength(0); // TODO - Support multi-rank arrays
  33. }
  34. [MethodImpl(MethodImplOptions.InternalCall)]
  35. private static extern SerializableProperty Internal_CreateProperty(IntPtr nativeInstance);
  36. }
  37. }