Fixed TryGet... Methods

master
Harald Wolff 2019-11-29 16:02:52 +01:00
parent 4caa582b82
commit 31064d8175
7 changed files with 35 additions and 41 deletions

View File

@ -66,11 +66,14 @@ namespace ln.types.btree
}
}
}
public Boolean TryGet(K key,ref V value)
public Boolean TryGet(K key, out V value)
{
TreeNode node = Find(key);
if (object.ReferenceEquals(node, null))
{
value = default(V);
return false;
}
value = node.Value;
return true;

View File

@ -20,8 +20,7 @@ namespace ln.types.btree
{
get
{
IEnumerable<V> values = null;
if (TryGet(key,ref values))
if (TryGet(key,out IEnumerable<V> values))
{
return values;
}
@ -47,8 +46,7 @@ namespace ln.types.btree
public bool TryAdd(K key,V value)
{
List<V> values = null;
if (!bTree.TryGet(key,ref values))
if (!bTree.TryGet(key, out List<V> values))
{
values = new List<V>();
bTree.Add(key, values);
@ -56,13 +54,14 @@ namespace ln.types.btree
values.Add(value);
return true;
}
public bool TryGet(K key,ref IEnumerable<V> values)
public bool TryGet(K key,out IEnumerable<V> values)
{
List<V> _values = null;
if ((!bTree.TryGet(key, ref _values)) || (_values.Count == 0))
if ((!bTree.TryGet(key, out List<V> v)) || (v.Count == 0))
{
values = v;
return false;
values = _values;
}
values = v;
return true;
}
public bool TryRemove(K key)
@ -71,8 +70,7 @@ namespace ln.types.btree
}
public bool TryRemove(K key,V value)
{
List<V> values = null;
if (bTree.TryGet(key, ref values))
if (bTree.TryGet(key, out List<V> values))
{
bool success = values.Remove(value);
if (values.Count == 0)
@ -83,8 +81,7 @@ namespace ln.types.btree
}
public bool ContainsKey(K key)
{
List<V> _values = null;
if (!bTree.TryGet(key, ref _values))
if (!bTree.TryGet(key, out List<V> _values))
return false;
return _values.Count > 0;
}
@ -101,8 +98,7 @@ namespace ln.types.btree
public int Count(K key)
{
List<V> _values = null;
if ((!bTree.TryGet(key, ref _values)) || (_values.Count == 0))
if ((!bTree.TryGet(key, out List<V> _values)) || (_values.Count == 0))
return 0;
return _values.Count;
}

View File

@ -50,7 +50,7 @@ namespace ln.types.btree
public void Remove(V v) => tree.Remove(KeyMapping(v));
public bool TryRemove(V v) => tree.TryRemove(KeyMapping(v));
public bool TryGet(K key, ref V v) => tree.TryGet(key, ref v);
public bool TryGet(K key, out V v) => tree.TryGet(key, out v);
public void RemoveKey(K key) => tree.Remove(key);
public bool Contains(V v) => tree.ContainsKey(KeyMapping(v));

9
cache/Cache.cs vendored
View File

@ -45,8 +45,7 @@ namespace ln.types.cache
public bool TryGet(K key,out V value)
{
value = default(V);
return values.TryGet(key, ref value);
return values.TryGet(key, out value);
}
public void Forget()
@ -60,8 +59,7 @@ namespace ln.types.cache
{
lock (this)
{
LinkedListItem<K> item = null;
if (itemTree.TryGet(key,ref item))
if (itemTree.TryGet(key,out LinkedListItem<K> item))
Forget(item);
}
}
@ -80,8 +78,7 @@ namespace ln.types.cache
{
lock (this)
{
LinkedListItem<K> item = null;
if (!itemTree.TryGet(key, ref item))
if (!itemTree.TryGet(key, out LinkedListItem<K> item))
{
item = new LinkedListItem<K>(key);
values.Add(key,value);

View File

@ -22,19 +22,19 @@ namespace ln.types.odb.ng.mappings
Func<Mapper, Document, object> createObjectHook;
Func<FieldInfo, bool> filterFieldsHook;
public ClassMapping(Type type)
{
Logging.Log(LogLevel.DEBUG, "Constructing ClassMapping for {0}",type);
private ClassMapping() { }
MappedType = type;
AddFields(type);
}
public ClassMapping(Type type) : this(type, null, null) { }
public ClassMapping(Type type, Func<Mapper, Document, object> createObjectHook, Func<FieldInfo, bool> filterFieldsHook)
:this(type)
{
Logging.Log(LogLevel.DEBUG, "Constructing ClassMapping for {0}", type);
MappedType = type;
this.createObjectHook = createObjectHook;
this.filterFieldsHook = filterFieldsHook;
AddFields(type);
}
private void AddFields(Type type)
@ -42,7 +42,7 @@ namespace ln.types.odb.ng.mappings
foreach (FieldInfo fieldinfo in type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public))
{
if ((filterFieldsHook == null) || filterFieldsHook(fieldinfo))
mappedFields.Add(fieldinfo);
mappedFields.Add(fieldinfo);
}
if ((type != null) && !type.IsValueType && (!typeof(object).Equals(type.BaseType)))
@ -63,7 +63,7 @@ namespace ln.types.odb.ng.mappings
{
if (IsReferenceType)
{
if (mapper.IdentityCache.TryGetValue(document.ID, out object o, () => Activator.CreateInstance(MappedType, true)))
if (mapper.IdentityCache.TryGetValue(document.ID, out object o, () => (createObjectHook != null) ? createObjectHook(mapper, document) : Activator.CreateInstance(MappedType, true) ))
return o;
}

View File

@ -73,6 +73,9 @@ namespace ln.types.odb.ng.storage.fs
storages.Add(storageName, storage);
}
if (!storages[storageName].IsOpen)
storages[storageName].Open();
return storages[storageName];
}
}

View File

@ -88,8 +88,7 @@ namespace ln.types.odb.ng.storage
}
else
{
SegmentedFile.Segment existing = null;
if (usedSegments.TryGet(segment.ID, ref existing))
if (usedSegments.TryGet(segment.ID, out SegmentedFile.Segment existing))
{
if (existing.TimeStamp < segment.TimeStamp)
{
@ -197,9 +196,7 @@ namespace ln.types.odb.ng.storage
{
lock (this)
{
SegmentedFile.Segment segment = null;
if (!usedSegments.TryGet(documentID,ref segment))
if (!usedSegments.TryGet(documentID,out SegmentedFile.Segment segment))
throw new KeyNotFoundException();
return LoadDocument(segment);
@ -249,8 +246,7 @@ namespace ln.types.odb.ng.storage
indexRoot.Replace(document.ID, document);
SegmentedFile.Segment previousSegment = null;
if (usedSegments.TryGet(document.ID,ref previousSegment))
if (usedSegments.TryGet(document.ID,out SegmentedFile.Segment previousSegment))
{
usedSegments.RemoveKey(document.ID);
@ -271,8 +267,7 @@ namespace ln.types.odb.ng.storage
{
lock (this)
{
SegmentedFile.Segment segment = null;
if (usedSegments.TryGet(documentID, ref segment))
if (usedSegments.TryGet(documentID, out SegmentedFile.Segment segment))
{
usedSegments.RemoveKey(documentID);