Beispiel #1
0
 /// <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;
 }
Beispiel #2
0
        /// <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);
            }
        }