Esempio n. 1
0
        public Ref remove(string key)
        {
            string name = toRefName(key);
            Ref    res  = null;
            int    idx;

            if (0 <= (idx = _packed.find(name)))
            {
                res          = _packed.get(name);
                _packed      = _packed.remove(idx);
                _sizeIsValid = false;
            }
            if (0 <= (idx = _loose.find(name)))
            {
                res          = _loose.get(name);
                _loose       = _loose.remove(idx);
                _sizeIsValid = false;
            }
            if (0 <= (idx = _resolved.find(name)))
            {
                res          = _resolved.get(name);
                _resolved    = _resolved.remove(idx);
                _sizeIsValid = false;
            }
            return(res);
        }
Esempio n. 2
0
        public Ref put(string keyName, Ref value)
        {
            string name = toRefName(keyName);

            if (!name.Equals(value.Name))
            {
                throw new ArgumentException("keyName");
            }

            if (!_resolved.isEmpty())
            {
                // Collapse the resolved list into the loose list so we
                // can discard it and stop joining the two together.
                foreach (Ref @ref in _resolved)
                {
                    _loose = _loose.put(@ref);
                }
                _resolved = RefList <Ref> .emptyList();
            }

            int idx = _loose.find(name);

            if (0 <= idx)
            {
                Ref prior = _loose.get(name);
                _loose = _loose.set(idx, value);
                return(prior);
            }
            else
            {
                Ref prior = get(keyName);
                _loose       = _loose.add(idx, value);
                _sizeIsValid = false;
                return(prior);
            }
        }