/// <summary> /// Creates a <see cref="SortedPointBuffer{TKey,TValue}"/> that can hold only exactly the specified <see cref="capacity"/>. /// </summary> /// <param name="capacity">The maximum number of items that can be stored in this class</param> /// <param name="removeDuplicates">specifies if the point buffer should remove duplicate key values upon reading.</param> public SortedPointBuffer(int capacity, bool removeDuplicates) { m_methods = Library.GetKeyValueMethods <TKey, TValue>(); m_removeDuplicates = removeDuplicates; SetCapacity(capacity); m_isReadingMode = false; }
/// <summary> /// Will attempt to reload any type that /// inherits from <see cref="SnapTypeBase"/> in /// any new assemblies. /// </summary> private static void ReloadNewAssemblies() { Type typeCreateSingleValueEncodingBase = typeof(IndividualEncodingDefinitionBase); Type typeCreateDoubleValueEncodingBase = typeof(PairEncodingDefinitionBase); Type typeCreateFilterBase = typeof(MatchFilterDefinitionBase); Type typeCreateSeekFilterBase = typeof(SeekFilterDefinitionBase); Type typeSnapTypeBase = typeof(SnapTypeBase); Type typeKeyValueMethods = typeof(KeyValueMethods); try { Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly assembly in assemblies) { if (!LoadedAssemblies.Contains(assembly)) { LoadedAssemblies.Add(assembly); if (FilterAssemblyNames.Contains(assembly.GetName().Name) || assembly.GetReferencedAssemblies().Any(x => FilterAssemblyNames.Contains(x.Name))) { Log.Publish(MessageLevel.Debug, "Loading Assembly", assembly.GetName().Name); Module[] modules = assembly.GetModules(false); foreach (Module module in modules) { try { Type[] types; try { types = module.GetTypes(); } catch (ReflectionTypeLoadException ex) { Log.Publish(MessageLevel.Debug, "Reflection Load Error Occurred", assembly.GetName().Name, ex.ToString() + Environment.NewLine + String.Join(Environment.NewLine, ex.LoaderExceptions.Select(x => x.ToString()))); types = ex.Types; } foreach (Type assemblyType in types) { try { if ((object)assemblyType != null && !assemblyType.IsAbstract && !assemblyType.ContainsGenericParameters) { if (typeCreateSingleValueEncodingBase.IsAssignableFrom(assemblyType)) { Log.Publish(MessageLevel.Debug, "Loading Individual Encoding Method", assemblyType.AssemblyQualifiedName); Encodings.Register((IndividualEncodingDefinitionBase)Activator.CreateInstance(assemblyType)); } else if (typeCreateDoubleValueEncodingBase.IsAssignableFrom(assemblyType)) { Log.Publish(MessageLevel.Debug, "Loading Pair Encoding Method", assemblyType.AssemblyQualifiedName); Encodings.Register((PairEncodingDefinitionBase)Activator.CreateInstance(assemblyType)); } else if (typeCreateFilterBase.IsAssignableFrom(assemblyType)) { Log.Publish(MessageLevel.Debug, "Loading Match Filter", assemblyType.AssemblyQualifiedName); Filters.Register((MatchFilterDefinitionBase)Activator.CreateInstance(assemblyType)); } else if (typeCreateSeekFilterBase.IsAssignableFrom(assemblyType)) { Log.Publish(MessageLevel.Debug, "Loading Seek Filter", assemblyType.AssemblyQualifiedName); Filters.Register((SeekFilterDefinitionBase)Activator.CreateInstance(assemblyType)); } else if (typeSnapTypeBase.IsAssignableFrom(assemblyType)) { Log.Publish(MessageLevel.Debug, "Loading Snap Type", assemblyType.AssemblyQualifiedName); Register((SnapTypeBase)Activator.CreateInstance(assemblyType)); } else if (typeKeyValueMethods.IsAssignableFrom(assemblyType)) { Log.Publish(MessageLevel.Debug, "Loading Key Value Methods", assemblyType.AssemblyQualifiedName); KeyValueMethods obj = (KeyValueMethods)Activator.CreateInstance(assemblyType); Tuple <Type, Type> ttypes = Tuple.Create(obj.KeyType, obj.ValueType); if (!KeyValueMethodsList.ContainsKey(ttypes)) { KeyValueMethodsList.Add(ttypes, obj); } } } } catch (Exception ex) { Log.Publish(MessageLevel.Critical, "Static Constructor Error", null, null, ex); } } } catch (Exception ex) { Log.Publish(MessageLevel.Critical, "Static Constructor Error", null, null, ex); } } } } } } catch (Exception ex) { Log.Publish(MessageLevel.Critical, "Static Constructor Error", null, null, ex); } }