private void RemoveRef(BulletDisposableObject obj)
        {
            if (obj == null)
            {
                throw new ArgumentNullException(nameof(obj));
            }

            if (obj.Owner == null)
            {
                if (UserOwnedObjects.Contains(obj) == false)
                {
                    throw new Exception("Removing object that is not being tracked. " +
                                        "Object info: " + obj.GetType());
                }
                UserOwnedObjects.Remove(obj);
            }
        }
        private void AddRef(BulletDisposableObject obj)
        {
            if (obj == null)
            {
                throw new ArgumentNullException(nameof(obj));
            }

            if (obj.Owner == null)
            {
                if (UserOwnedObjects.Contains(obj))
                {
                    throw new Exception("Adding an object that is already being tracked. " +
                                        "Object info: " + obj.GetType());
                }
                UserOwnedObjects.Add(obj);
            }
        }
		internal static void Remove(BulletDisposableObject obj)
		{
		}
		internal static void Add(BulletDisposableObject obj)
		{
		}
		internal static void Remove(BulletDisposableObject obj)
		{
			Current.RemoveRef(obj);
		}
		internal static void Add(BulletDisposableObject obj)
		{
			Current.AddRef(obj);
		}
 internal HashedOverlappingPairCache(IntPtr native, BulletDisposableObject owner)
 {
     InitializeSubObject(native, owner);
 }