public UnserializeCacheEntry(Env env, Value value)
        {
            CopyRoot root = new CopyRoot(this);

            value = value.copyTree(env, root);

            _valueRef = new SoftReference <Value>(value);
        }
        void free(CopyRoot root)
        {
            if (_freeList == null)
            {
                _freeList = new FreeList <SoftReference <CopyRoot> >(2);
            }

            _freeList.free(new SoftReference <CopyRoot>(root));
        }
        public Value getValue(Env env)
        {
            SoftReference <CopyRoot> copyRef = null;

            if (_freeList != null)
            {
                copyRef = _freeList.allocate();
            }

            if (copyRef != null)
            {
                CopyRoot copy = copyRef.get();

                if (copy != null)
                {
                    copy.allocate(env);

                    return(copy.getRoot());
                }
            }

            Value value = null;

            if (_valueRef != null)
            {
                value = _valueRef.get();
            }

            if (value != null)
            {
                CopyRoot root = new CopyRoot(this);

                root.allocate(env);

                Value copy = value.copyTree(env, root);

                root.setRoot(copy);

                return(copy);
            }
            else
            {
                return(null);
            }
        }
        /**
         * Copy for unserialization.
         *
         * XXX: need to update for references
         */
        protected ArrayCopyValueImpl(Env env, ArrayValue copy, CopyRoot root)
        {
            super(env, copy, root);

            _root = root;
        }
示例#5
0
        public CopyObjectExtValue(Env env, ObjectExtValue copy, CopyRoot root)
        {
            super(env, copy, root);

            _root = root;
        }