SerializableList.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using System;
  2. using System.Collections;
  3. using System.Runtime.CompilerServices;
  4. namespace BansheeEngine
  5. {
  6. #pragma warning disable 649
  7. public sealed class SerializableList : ScriptObject
  8. {
  9. private SerializableProperty.FieldType elementType;
  10. private Type internalElementType;
  11. private IList referencedList;
  12. public SerializableProperty.FieldType ElementType
  13. {
  14. get { return elementType; }
  15. }
  16. // Constructed from native code
  17. private SerializableList(IList list, Type internalElementType)
  18. {
  19. referencedList = list;
  20. this.internalElementType = internalElementType;
  21. elementType = SerializableProperty.DetermineFieldType(internalElementType);
  22. }
  23. public SerializableProperty GetProperty(int elementIdx)
  24. {
  25. SerializableProperty.Getter getter = () => referencedList[elementIdx];
  26. SerializableProperty.Setter setter = (object value) => referencedList[elementIdx] = value;
  27. SerializableProperty property = Internal_CreateProperty(mCachedPtr);
  28. property.Construct(ElementType, internalElementType, getter, setter);
  29. return property;
  30. }
  31. public int GetLength()
  32. {
  33. return referencedList.Count;
  34. }
  35. [MethodImpl(MethodImplOptions.InternalCall)]
  36. private static extern SerializableProperty Internal_CreateProperty(IntPtr nativeInstance);
  37. }
  38. }