protected TValue GetValue(ref KeyWalker key, ulong keyI) { CPNode <TValue> head = Head; if (head != null) { TValue value = default(TValue); if (head.Set(ref key, ref value, ref head, CPMode.Find)) { return(value); } } throw new KeyNotFoundException(Localize.Localized("Key not found: ") + keyI.ToString()); }
public override bool Set(ref KeyWalker key, ref T value, ref CPNode <T> self, CPMode mode) { byte k = key.Buffer[key.Offset]; if (key.Left == 1 && IsPresent(k)) { T newValue = value; int P = GetValueIndex(k); if (P < 0x100 && P < _values.Length) { value = _values[P]; if ((mode & CPMode.Set) != (CPMode)0) { _values[P] = newValue; } } else { value = default(T); if ((mode & CPMode.Set) != (CPMode)0) { Assign(k, newValue); } } return(true); } else if ((mode & CPMode.Create) != (CPMode)0) { if (key.Left == 1) { Assign(k, value); _localCount++; } else { // Must convert back to bitmap or sparse node! ConvertToBOrSNode(ref self, key.Left / 3 + 1); self.Set(ref key, ref value, ref self, mode); } } return(false); }