internal static void SetValue(UrlQueryParameter qp, string value) { Collection changedColl = qp.GetSync(() => { if (qp._set == null) { qp._value = value; return(null); } return(qp._set.GetSync(() => { if ((qp._value == null) ? value == null : value != null && value == qp._value) { return null; } qp._value = value; return qp._set._collection; })); }); if (changedColl != null) { changedColl.OnChange(); } }
public IEnumerable <string> GetAllValues(string key) { ValueSet vs = ValueSet.Get(this, key); if (vs != null) { for (UrlQueryParameter p = vs.First; p != null; p = p._nextValue) { if (p.GetSync(() => p._set == null || !ReferenceEquals(p._set, vs))) { throw new InvalidOperationException("Collection changed"); } yield return(p.ToString()); } } }
internal static void SetKey(UrlQueryParameter qp, string key) { Collection changedColl = qp.GetSync(() => { if (qp._set == null) { qp._key = key; return(null); } return(qp._set.GetSync(() => { if (qp.Key == key) { return null; } if (qp._set._collection == null) { // TODO: Not in collection return null; } return qp._set._collection.GetSync((Collection c) => { if (c._keyComparer.Equals(key, qp.Key)) { // TODO: Modify key } else { // TODO: Ttoal key change } return c; }, qp._set._collection); })); }); if (changedColl != null) { changedColl.OnChange(); } }
internal static bool Remove(UrlQueryParameter qp) { if (qp == null) { return(false); } Collection changedCol = qp.GetSync(() => { if (qp._set == null) { return(null); } return(qp._set.GetSync((ValueSet vs) => { if (vs._collection == null) { if (qp._previousValue == null) { if ((vs._firstParameter = qp._nextValue) == null) { vs._lastParameter = null; } else { qp._nextValue = qp._nextValue._previousValue = null; } } else { if ((qp._previousValue._nextValue = qp._nextValue) == null) { vs._lastParameter = qp._previousValue; } else { qp._nextValue._previousValue = qp._previousValue; qp._nextValue = null; } qp._previousValue = null; } qp._set = null; return null; } vs._collection.GetSync((Collection c) => { if (qp._previousParameter == null) { if ((c._firstParameter = qp._nextParameter) == null) { c._lastParameter = vs._firstParameter = vs._lastParameter = null; c._firstSet = c._lastSet = qp._set = vs._next = vs._previous = null; vs._collection = null; return c; } qp._nextParameter = qp._nextParameter._previousParameter = null; } else { if ((qp._previousParameter._nextParameter = qp._nextParameter) == null) { c._lastParameter = qp._previousParameter; } else { qp._nextParameter._previousParameter = qp._previousParameter; qp._nextParameter = null; } qp._previousParameter = null; } if (qp._previousValue == null) { if ((vs._firstParameter = qp._nextValue) == null) { vs._lastParameter = null; if (vs._previous == null) { (c._firstSet = vs._next)._previous = null; vs._next = null; } else { if ((vs._previous._next = vs._next) == null) { c._lastSet = vs._previous; } else { vs._next._previous = vs._previous; vs._next = null; } vs._previous = null; } vs._collection = null; if (qp._key == null) { qp._key = vs._key; } qp._set = null; } else { qp._nextValue = qp._nextValue._previousValue = null; } } else { if ((qp._previousValue._nextValue = qp._nextValue) == null) { vs._lastParameter = qp._previousValue; } else { qp._nextValue._previousValue = qp._previousValue; qp._nextValue = null; } qp._previousValue = null; } qp._set = null; return c; }, vs._collection); return vs._collection; }, qp._set)); }); if (changedCol == null) { return(false); } changedCol.OnChange(); return(true); }