Ejemplo n.º 1
0
        internal static void ResetColumnCreators()
        {
            s_columnCreators = new Dictionary <string, COLUMN_CREATOR>();

            s_columnCreators["bool"] = (details, columnComponents, initialCapacity) =>
            {
                AdjustColumnComponents(ref columnComponents);

                Value defaultValue = Value.Create(details.Default);
                bool  defaultAsBoolean;
                if (!defaultValue.TryConvert <bool>(out defaultAsBoolean))
                {
                    defaultAsBoolean = false;
                }

                UntypedColumn <bool> utc = new UntypedColumn <bool>(new BooleanColumn(defaultAsBoolean));
                utc.Name = details.Name;
                return(utc);
            };

            s_columnCreators["boolean"] = s_columnCreators["bool"];

            s_columnCreators["byte"]  = (details, columnComponents, initialCapacity) => { AdjustColumnComponents(ref columnComponents); return(Build <byte>(details, columnComponents, initialCapacity)); };
            s_columnCreators["sbyte"] = (details, columnComponents, initialCapacity) => { AdjustColumnComponents(ref columnComponents); return(Build <sbyte>(details, columnComponents, initialCapacity)); };

            s_columnCreators["short"] = (details, columnComponents, initialCapacity) => { AdjustColumnComponents(ref columnComponents); return(Build <short>(details, columnComponents, initialCapacity)); };
            s_columnCreators["int16"] = s_columnCreators["short"];

            s_columnCreators["int"]   = (details, columnComponents, initialCapacity) => { AdjustColumnComponents(ref columnComponents); return(Build <int>(details, columnComponents, initialCapacity)); };
            s_columnCreators["int32"] = s_columnCreators["int"];

            s_columnCreators["long"]  = (details, columnComponents, initialCapacity) => { AdjustColumnComponents(ref columnComponents); return(Build <long>(details, columnComponents, initialCapacity)); };
            s_columnCreators["int64"] = s_columnCreators["long"];

            s_columnCreators["float"]  = (details, columnComponents, initialCapacity) => { AdjustColumnComponents(ref columnComponents); return(Build <float>(details, columnComponents, initialCapacity)); };
            s_columnCreators["single"] = s_columnCreators["float"];

            s_columnCreators["double"] = (details, columnComponents, initialCapacity) => { AdjustColumnComponents(ref columnComponents); return(Build <double>(details, columnComponents, initialCapacity)); };

            s_columnCreators["ushort"] = (details, columnComponents, initialCapacity) => { AdjustColumnComponents(ref columnComponents); return(Build <ushort>(details, columnComponents, initialCapacity)); };
            s_columnCreators["uint16"] = s_columnCreators["ushort"];

            s_columnCreators["uint"]   = (details, columnComponents, initialCapacity) => { AdjustColumnComponents(ref columnComponents); return(Build <uint>(details, columnComponents, initialCapacity)); };
            s_columnCreators["uint32"] = s_columnCreators["uint"];

            s_columnCreators["ulong"]  = (details, columnComponents, initialCapacity) => { AdjustColumnComponents(ref columnComponents); return(Build <ulong>(details, columnComponents, initialCapacity)); };
            s_columnCreators["uint64"] = s_columnCreators["ulong"];

            s_columnCreators["datetime"] = (details, columnComponents, initialCapacity) => { AdjustColumnComponents(ref columnComponents); return(Build <DateTime>(details, columnComponents, initialCapacity)); };

            s_columnCreators["guid"] = (details, columnComponents, initialCapacity) => { AdjustColumnComponents(ref columnComponents); return(Build <Guid>(details, columnComponents, initialCapacity)); };

            s_columnCreators["timespan"] = (details, columnComponents, initialCapacity) => { AdjustColumnComponents(ref columnComponents); return(Build <TimeSpan>(details, columnComponents, initialCapacity)); };

            s_columnCreators["string"]    = (details, columnComponents, initialCapacity) => { AdjustColumnComponents(ref columnComponents); return(BuildByteBlock(details, columnComponents)); };
            s_columnCreators["json"]      = s_columnCreators["string"];
            s_columnCreators["html"]      = s_columnCreators["string"];
            s_columnCreators["stringset"] = s_columnCreators["string"];
        }
Ejemplo n.º 2
0
        public static void RegisterCustomColumns()
        {
            ColumnFactory.AddColumnCreator("color", (details, columnComponents, initialCapacity) =>
            {
                IColumn <ColorColumn.ComparableColor> coreColumn = new ColorColumn();
                IUntypedColumn utc = new UntypedColumn <ColorColumn.ComparableColor>(coreColumn);

                utc.Name = details.Name;

                return(utc);
            });
        }
Ejemplo n.º 3
0
        private static IUntypedColumn BuildByteBlock(ColumnDetails details, string[] typeComponents)
        {
            ByteBlock defaultValue;

            Value.Create(details.Default).TryConvert <ByteBlock>(out defaultValue);

            // Build the raw column
            IColumn <ByteBlock> columnSoFar = new ByteBlockColumn(defaultValue);

            // Wrap the column as requested (the last component is the type itself)
            for (int i = typeComponents.Length - 2; i >= 0; --i)
            {
                string   fullComponent  = typeComponents[i];
                string[] componentParts = fullComponent.Split('[', ']');

                switch (componentParts[0])
                {
                case "sorted":
                    columnSoFar = CreateSortedColumn(columnSoFar, 0);
                    break;

                case "indexed":
                    columnSoFar = new IndexedColumn(columnSoFar, BuildSplitter(componentParts.Length > 1 ? componentParts[1] : "default"));
                    break;

                default:
                    throw new ArribaException(StringExtensions.Format("Column Type Wrapper '{0}' is not currently supported.", typeComponents[i]));
                }
            }

            // De-type the column for generic use
            var utc = new UntypedColumn <ByteBlock>(columnSoFar);

            // Tell it the column name
            utc.Name = details.Name;

            return(utc);
        }
Ejemplo n.º 4
0
        private static IUntypedColumn Build <T>(ColumnDetails details, string[] typeComponents, ushort initialCapacity) where T : struct, IComparable <T>, IEquatable <T>
        {
            // Convert the default for the new column
            Value defaultValue = Value.Create(details.Default);
            T     dAsT;

            if (!defaultValue.TryConvert <T>(out dAsT))
            {
                dAsT = default(T);
            }

            // Build the raw column
            IColumn <T> columnSoFar = new ValueTypeColumn <T>(dAsT, initialCapacity);

            // Wrap the column as requested (the last component is the type itself)
            for (int i = typeComponents.Length - 2; i >= 0; --i)
            {
                switch (typeComponents[i])
                {
                case "sorted":
                    columnSoFar = CreateSortedColumn(columnSoFar, initialCapacity);
                    break;

                default:
                    throw new ArribaException(StringExtensions.Format("Column Type Wrapper '{0}' is not currently supported.", typeComponents[i]));
                }
            }

            // De-type the column for generic use
            var utc = new UntypedColumn <T>(columnSoFar);

            // Tell it the column name
            utc.Name = details.Name;

            return(utc);
        }