Example #1
0
        private static int OnDuplcateUserData(int serial_number, IntPtr pNativeUserData)
        {
            int      rc = 0;
            UserData ud = FromSerialNumber(serial_number);

            if (ud != null)
            {
                try
                {
                    Type     t      = ud.GetType();
                    UserData new_ud = System.Activator.CreateInstance(t) as UserData;
                    if (new_ud != null)
                    {
                        new_ud.m_serial_number  = UserData.m_next_serial_number++;
                        new_ud.m_pNativePointer = pNativeUserData;
                        UserData.StoreInRuntimeList(new_ud);
                        new_ud.OnDuplicate(ud);
                        rc = new_ud.m_serial_number;
                    }
                }
                catch (Exception ex)
                {
                    Runtime.HostUtils.ExceptionReport(ex);
                }
            }
            return(rc);
        }
Example #2
0
        /// <summary>
        /// If the userdata is already in a different UserDataList, it
        /// will be removed from that list and added to this list.
        /// </summary>
        /// <param name="userdata">Data element.</param>
        /// <returns>Whether this operation succeeded.</returns>
        public bool Add(UserData userdata)
        {
            if (!(userdata is SharedUserDictionary))
            {
                Type t = userdata.GetType();
                System.Reflection.ConstructorInfo constructor = t.GetConstructor(System.Type.EmptyTypes);
                if (!t.IsPublic || constructor == null)
                {
                    throw new ArgumentException("userdata must be a public class and have a parameterless constructor");
                }
            }
            IntPtr     pOnObject      = m_parent.ConstPointer();
            IntPtr     pUserData      = userdata.NonConstPointer(true);
            const bool detachIfNeeded = true;
            bool       rc             = UnsafeNativeMethods.ON_Object_AttachUserData(pOnObject, pUserData, detachIfNeeded);

            if (rc)
            {
                UserData.StoreInRuntimeList(userdata);
            }
            return(rc);
        }