Example #1
0
        /**
         * Converts an IntPtr to a struct of type T.
         */
        public static void PtrToStruct(IntPtr ptr, out T t)
        {
#if ENABLE_IL2CPP
#if UNITY_2018_1_OR_NEWER
            unsafe {
                Unity.Collections.LowLevel.Unsafe.UnsafeUtility.CopyPtrToStructure((void *)ptr, out t);
            }
#else
#error UnityModules Only supports IL2CPP on versions of Unity 2018.1 or greater.
#endif
#else
            if (_container == null)
            {
                _container = new StructContainer();
            }

            try
            {
                Marshal.PtrToStructure(ptr, _container);
                t = _container.value;
            }
            catch (Exception e)
            {
                UnityEngine.Debug.LogException(e);
                t = default(T);
            }
#endif
        }
Example #2
0
        public void TestSimpleStructUpdate()
        {
            var nodeContainer = new NodeContainer();
            var container     = new StructContainer {
                Struct = new SimpleStruct {
                    Name = "Test", Value = 1
                }
            };
            var containerNode     = nodeContainer.GetOrCreateNode(container);
            var memberNode        = containerNode[nameof(StructContainer.Struct)];
            var targetNode        = memberNode.Target;
            var structMember1Node = targetNode[nameof(SimpleStruct.Name)];
            var structMember2Node = targetNode[nameof(SimpleStruct.Value)];

            memberNode.Update(new SimpleStruct {
                Name = "Test2", Value = 2
            });

            Assert.Equal("Test2", container.Struct.Name);
            Assert.Equal(2, container.Struct.Value);
            Assert.Equal(targetNode, memberNode.Target);
            Assert.Equal(structMember1Node, memberNode.Target[nameof(SimpleStruct.Name)]);
            Assert.Equal(structMember2Node, memberNode.Target[nameof(SimpleStruct.Value)]);
            structMember1Node = memberNode.Target[nameof(SimpleStruct.Name)];
            Helper.TestMemberNode(memberNode.Target, structMember1Node, container.Struct, container.Struct.Name, nameof(SimpleStruct.Name), false);
            structMember2Node = memberNode.Target[nameof(SimpleStruct.Value)];
            Helper.TestMemberNode(memberNode.Target, structMember2Node, container.Struct, container.Struct.Value, nameof(SimpleStruct.Value), false);
        }
Example #3
0
        public void TestSimpleStructMemberUpdate()
        {
            var nodeContainer = new NodeContainer();
            var container     = new StructContainer {
                Struct = new SimpleStruct {
                    Name = "Test", Value = 1
                }
            };
            var containerNode     = nodeContainer.GetOrCreateNode(container);
            var memberNode        = containerNode[nameof(StructContainer.Struct)];
            var targetNode        = memberNode.Target;
            var structMember1Node = targetNode[nameof(SimpleStruct.Name)];
            var structMember2Node = targetNode[nameof(SimpleStruct.Value)];

            Helper.TestNonCollectionObjectNode(containerNode, container, 1);
            Helper.TestMemberNode(containerNode, memberNode, container, container.Struct, nameof(StructContainer.Struct), true);
            Helper.TestNonNullObjectReference(memberNode.TargetReference, container.Struct, false);
            Helper.TestMemberNode(memberNode.Target, structMember1Node, container.Struct, container.Struct.Name, nameof(SimpleStruct.Name), false);

            structMember1Node.Update("Test2");
            Assert.Equal("Test2", container.Struct.Name);
            Assert.Equal(targetNode, memberNode.Target);
            Assert.Equal(structMember1Node, memberNode.Target[nameof(SimpleStruct.Name)]);
            Assert.Equal(structMember2Node, memberNode.Target[nameof(SimpleStruct.Value)]);
            Helper.TestMemberNode(memberNode.Target, structMember1Node, container.Struct, container.Struct.Name, nameof(SimpleStruct.Name), false);
            Helper.TestMemberNode(memberNode.Target, memberNode.Target.Members.First(), container.Struct, container.Struct.Name, nameof(SimpleStruct.Name), false);
        }
            public override bool Equals(object obj)
            {
                // problem if cast is invalid
                StructContainer other = (StructContainer)obj;

                return(Container.Equals(other.Container) && (ValueType == other.ValueType));
            }
Example #5
0
        /**
         * Copies a struct of type T into the array pointed to by arrayPtr at the
         * offset index specified by index.  This is an unsafe operation that assumes
         * there is enough space allocated in the array to accommodate the struct.
         */
        public static void CopyIntoArray(IntPtr arrayPtr, ref T t, int index)
        {
            if (_container == null)
            {
                _container = new StructContainer();
            }

            _container.value = t;
            Marshal.StructureToPtr(_container, new IntPtr(arrayPtr.ToInt64() + _sizeofT * index), false);
        }
Example #6
0
        public void TestSimpleStructUpdate()
        {
            var nodeContainer = new NodeContainer();
            var container = new StructContainer { Struct = new SimpleStruct { Name = "Test", Value = 1 } };
            var containerNode = nodeContainer.GetOrCreateNode(container);
            var memberNode = containerNode.Children.First();
            memberNode.Content.Update(new SimpleStruct { Name = "Test2", Value = 2 });

            Assert.AreEqual("Test2", container.Struct.Name);
            Assert.AreEqual(2, container.Struct.Value);
            var structMember1Node = memberNode.Children.First();
            Helper.TestMemberContentNode(memberNode, structMember1Node, container.Struct, container.Struct.Name, nameof(SimpleStruct.Name), false);
            var structMember2Node = memberNode.Children.Last();
            Helper.TestMemberContentNode(memberNode, structMember2Node, container.Struct, container.Struct.Value, nameof(SimpleStruct.Value), false);
        }
Example #7
0
        public void TestSimpleStruct()
        {
            var nodeContainer = new NodeContainer();
            var container = new StructContainer { Struct = new SimpleStruct { Name = "Test", Value = 1 } };
            var containerNode = nodeContainer.GetOrCreateNode(container);
            Helper.TestObjectContentNode(containerNode, container, 1);

            var memberNode = containerNode.Children.First();
            Helper.TestMemberContentNode(containerNode, memberNode, container, container.Struct, nameof(StructContainer.Struct), false);
            Helper.TestStructContentNode(memberNode, container.Struct, 2);
            var structMember1Node = memberNode.Children.First();
            Helper.TestMemberContentNode(memberNode, structMember1Node, container.Struct, container.Struct.Name, nameof(SimpleStruct.Name), false);
            var structMember2Node = memberNode.Children.Last();
            Helper.TestMemberContentNode(memberNode, structMember2Node, container.Struct, container.Struct.Value, nameof(SimpleStruct.Value), false);
        }
Example #8
0
        /**
         * Converts an IntPtr to a struct of type T.
         */
        public static void PtrToStruct(IntPtr ptr, out T t)
        {
            if (_container == null)
            {
                _container = new StructContainer();
            }

            try {
                Marshal.PtrToStructure(ptr, _container);
                t = _container.value;
            } catch (Exception e) {
                Logger.Log("Problem converting structure " + typeof(T) + " from ptr " + ptr + " : " + e.Message);
                t = default(T);
            }
        }
Example #9
0
        public void TestSimpleStructUpdate()
        {
            var nodeContainer = new NodeContainer();
            var container = new StructContainer { Struct = new SimpleStruct { Name = "Test", Value = 1 } };
            var containerNode = nodeContainer.GetOrCreateNode(container);
            var memberNode = containerNode.Children.First();
            memberNode.Content.Update(new SimpleStruct { Name = "Test2", Value = 2 });

            Assert.AreEqual("Test2", container.Struct.Name);
            Assert.AreEqual(2, container.Struct.Value);
            var structMember1Node = memberNode.Children.First();
            Helper.TestMemberContentNode(memberNode, structMember1Node, container.Struct, container.Struct.Name, nameof(SimpleStruct.Name), false);
            var structMember2Node = memberNode.Children.Last();
            Helper.TestMemberContentNode(memberNode, structMember2Node, container.Struct, container.Struct.Value, nameof(SimpleStruct.Value), false);
        }
Example #10
0
        public void TestSimpleStruct()
        {
            var nodeContainer = new NodeContainer();
            var container = new StructContainer { Struct = new SimpleStruct { Name = "Test", Value = 1 } };
            var containerNode = nodeContainer.GetOrCreateNode(container);
            Helper.TestNonCollectionObjectContentNode(containerNode, container, 1);

            var memberNode = containerNode.Children.First();
            Helper.TestMemberContentNode(containerNode, memberNode, container, container.Struct, nameof(StructContainer.Struct), false);
            Helper.TestStructContentNode(memberNode, container.Struct, 2);
            var structMember1Node = memberNode.Children.First();
            Helper.TestMemberContentNode(memberNode, structMember1Node, container.Struct, container.Struct.Name, nameof(SimpleStruct.Name), false);
            var structMember2Node = memberNode.Children.Last();
            Helper.TestMemberContentNode(memberNode, structMember2Node, container.Struct, container.Struct.Value, nameof(SimpleStruct.Value), false);
        }
Example #11
0
        public void TestSimpleStruct()
        {
            var nodeContainer = new NodeContainer();
            var container     = new StructContainer {
                Struct = new SimpleStruct {
                    Name = "Test", Value = 1
                }
            };
            var containerNode = nodeContainer.GetOrCreateNode(container);

            Helper.TestNonCollectionObjectNode(containerNode, container, 1);

            var memberNode = containerNode[nameof(StructContainer.Struct)];

            Helper.TestMemberNode(containerNode, memberNode, container, container.Struct, nameof(StructContainer.Struct), true);
            Helper.TestNonNullObjectReference(memberNode.TargetReference, container.Struct, false);
            var structMember1Node = memberNode.Target[nameof(SimpleStruct.Name)];

            Helper.TestMemberNode(memberNode.Target, structMember1Node, container.Struct, container.Struct.Name, nameof(SimpleStruct.Name), false);
            var structMember2Node = memberNode.Target[nameof(SimpleStruct.Value)];

            Helper.TestMemberNode(memberNode.Target, structMember2Node, container.Struct, container.Struct.Value, nameof(SimpleStruct.Value), false);
        }
Example #12
0
        public void TestSimpleStructMemberUpdate()
        {
            var nodeContainer = new NodeContainer();
            var container     = new StructContainer {
                Struct = new SimpleStruct {
                    Name = "Test", Value = 1
                }
            };
            var containerNode = nodeContainer.GetOrCreateNode(container);

            Helper.TestNonCollectionObjectContentNode(containerNode, container, 1);

            var memberNode = containerNode.Children.First();

            Helper.TestMemberContentNode(containerNode, memberNode, container, container.Struct, nameof(StructContainer.Struct), false);
            Helper.TestStructContentNode(memberNode, container.Struct, 2);
            var structMember1Node = memberNode.Children.First();

            Helper.TestMemberContentNode(memberNode, structMember1Node, container.Struct, container.Struct.Name, nameof(SimpleStruct.Name), false);
            structMember1Node.Content.Update("Test2");
            Assert.AreEqual("Test2", container.Struct.Name);
            Helper.TestMemberContentNode(memberNode, structMember1Node, container.Struct, container.Struct.Name, nameof(SimpleStruct.Name), false);
            Helper.TestMemberContentNode(memberNode, memberNode.Children.First(), container.Struct, container.Struct.Name, nameof(SimpleStruct.Name), false);
        }
Example #13
0
        public static void Compiles_But_Rider_Shows_Error()
        {
            var structContainer = new StructContainer(null);

            Assert.Null(structContainer.ValueTypeProperty.AsNullable());
        }
 public StructContainer(StructContainer c)
 {
     // no need to check for 'c' since it can't be null
     Container = c.Container;
     ValueType = c.ValueType;
 }