public bool Depart () { int old; int c; CSnziState s; do { old = root; Decode (old, out c, out s); } while (Interlocked.CompareExchange (ref root, Encode (c - 1, s), old) != old); return c != 0 && s != CSnziState.Closed; } #endregion