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"]; }
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); }); }
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); }
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); }