- Timestamp:
- 11/24/15 18:32:55 (9 years ago)
- Location:
- branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Core/StaticCache.cs
r13375 r13387 26 26 using Google.ProtocolBuffers; 27 27 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 28 using System.Drawing; 28 29 29 30 namespace HeuristicLab.Persistence { … … 39 40 40 41 internal StaticCache() { 41 Initialize(); 42 guid2Transformer = new Dictionary<Guid, ITransformer>(); 43 transformer2Guid = new Dictionary<ITransformer, Guid>(); 44 guid2Type = new Dictionary<Guid, Type>(); 45 type2Guid = new Dictionary<Type, Guid>(); 46 typeInfos = new Dictionary<Type, TypeInfo>(); 47 extensionRegistry = ExtensionRegistry.CreateInstance(); 48 49 foreach (var transformer in ApplicationManager.Manager.GetInstances<ITransformer>().OrderBy(x => x.Priority)) 50 RegisterTransformer(transformer); 51 52 RegisterType(new Guid("94AD8522-3F55-4580-A6F8-2D2AAEDD4B8C"), typeof(bool)); 53 RegisterType(new Guid("4A1C0FD5-423D-4F96-AB22-A496578C25AC"), typeof(byte)); 54 RegisterType(new Guid("C4B00F0B-FED7-439F-B1B2-8A0048B64882"), typeof(sbyte)); 55 RegisterType(new Guid("9F451811-3DE1-43AB-8B74-D7E03851857B"), typeof(short)); 56 RegisterType(new Guid("46244D54-0145-49F7-9CF3-9CDB7FB5F240"), typeof(ushort)); 57 RegisterType(new Guid("1FDDE40C-09E3-491F-8FBB-32BB3C885E9E"), typeof(char)); 58 RegisterType(new Guid("EE3E0F9C-A5C2-4461-AF36-28BD8F26E6FB"), typeof(int)); 59 RegisterType(new Guid("69476D18-D285-43E9-BC7C-6CC9E9F2321E"), typeof(uint)); 60 RegisterType(new Guid("7C7BC5EC-F001-4BA0-9F85-50DCBAA9AE81"), typeof(long)); 61 RegisterType(new Guid("AC808D5A-63BB-457C-9B92-C9B83DA2B139"), typeof(ulong)); 62 RegisterType(new Guid("BF22653A-026C-4367-BBBA-2125AECF6C08"), typeof(float)); 63 RegisterType(new Guid("8B49821A-3ADC-4715-9DB1-08E2F3CFDF15"), typeof(double)); 64 RegisterType(new Guid("7BB386BF-6FD4-443D-A6C1-387096798C67"), typeof(DateTime)); 65 RegisterType(new Guid("724A2D49-7E7B-455B-BBA9-4214C64E8A21"), typeof(TimeSpan)); 66 RegisterType(new Guid("4DB2ED2B-D9F2-4695-B555-A2CF42740740"), typeof(Color)); 67 RegisterType(new Guid("9BC74087-D5C0-4C39-99B4-D7465F478492"), typeof(Point)); 68 RegisterType(new Guid("E84C326A-7E14-4F28-AEFF-BC16CC671655"), typeof(KeyValuePair<,>)); 69 RegisterType(new Guid("F0280B55-25E8-4981-B309-D675D081402A"), typeof(string)); 70 // Enum? 71 RegisterType(new Guid("859B7E34-3A07-41A3-AE93-79DCE5A1DB2C"), typeof(Type)); 72 RegisterType(new Guid("D15AD28B-203A-460E-815C-F7230C4B1F75"), typeof(bool[])); 73 RegisterType(new Guid("EE318DC4-580D-4DB1-9AAD-988B0E50A3DB"), typeof(byte[])); 74 RegisterType(new Guid("326B9484-361F-46F8-B8A6-46C781A8C51F"), typeof(sbyte[])); 75 RegisterType(new Guid("C854783D-4C91-43C8-A19A-F96012494F8A"), typeof(short[])); 76 RegisterType(new Guid("C47FB329-2A1D-4EB7-AFB1-1CF72AB30E98"), typeof(ushort[])); 77 RegisterType(new Guid("9681D044-B50C-4907-B23E-BDFEBC6C3FFC"), typeof(char[])); 78 RegisterType(new Guid("0FC62D91-D63F-4507-8696-885D4C07285A"), typeof(int[])); 79 RegisterType(new Guid("C43A25A0-9B99-4DA4-9279-7495FE10428E"), typeof(uint[])); 80 RegisterType(new Guid("7AC4DDAC-0E13-428E-BF49-7BE7B76746CB"), typeof(long[])); 81 RegisterType(new Guid("8D9283A7-FE49-4AEA-A09F-D53CF3BE520A"), typeof(ulong[])); 82 RegisterType(new Guid("BB9CFA0B-DD29-4C44-85C6-3A6289C55448"), typeof(float[])); 83 RegisterType(new Guid("3B3AA69E-1641-4202-AE1D-7EEFF60FA355"), typeof(double[])); 84 RegisterType(new Guid("7DF325A6-2553-4915-B7C6-D98191107CB7"), typeof(string[])); 85 foreach (var asm in AppDomain.CurrentDomain.GetAssemblies()) { 86 foreach (var t in asm.GetTypes().Where(x => StorableClassAttribute.IsStorableClass(x))) 87 RegisterType(StorableClassAttribute.GetStorableClassAttribute(t).Guid, t); 88 } 89 90 RegisterExtension(BoolBox.Bool); 91 RegisterExtension(IntBox.Int); 92 RegisterExtension(LongBox.Long); 93 RegisterExtension(UnsignedIntBox.UnsignedInt); 94 RegisterExtension(UnsignedLongBox.UnsignedLong); 95 RegisterExtension(FloatBox.Float); 96 RegisterExtension(DoubleBox.Double); 97 RegisterExtension(StringBox.String); 98 RegisterExtension(BytesBox.Bytes); 99 RegisterExtension(BoolArrayBox.BoolArray); 100 RegisterExtension(IntArrayBox.IntArray); 101 RegisterExtension(LongArrayBox.LongArray); 102 RegisterExtension(UnsignedIntArrayBox.UnsignedIntArray); 103 RegisterExtension(UnsignedLongArrayBox.UnsignedLongArray); 104 RegisterExtension(FloatArrayBox.FloatArray); 105 RegisterExtension(DoubleArrayBox.DoubleArray); 106 RegisterExtension(StringArrayBox.StringArray); 107 RegisterExtension(MatrixBox.Matrix); 108 RegisterExtension(BoolMatrixBox.BoolMatrix); 109 RegisterExtension(IntMatrixBox.IntMatrix); 110 RegisterExtension(DictionaryBox.Dictionary); 42 111 } 43 public void Initialize() { 112 113 public void RegisterTransformer(ITransformer transformer) { 44 114 lock (locker) { 45 guid2Transformer = new Dictionary<Guid, ITransformer>(); 46 transformer2Guid = new Dictionary<ITransformer, Guid>(); 47 guid2Type = new Dictionary<Guid, Type>(); 48 type2Guid = new Dictionary<Type, Guid>(); 49 typeInfos = new Dictionary<Type, TypeInfo>(); 50 extensionRegistry = ExtensionRegistry.CreateInstance(); 51 52 foreach (var transformer in ApplicationManager.Manager.GetInstances<ITransformer>().OrderBy(x => x.Priority)) { 53 guid2Transformer.Add(transformer.Guid, transformer); 54 transformer2Guid.Add(transformer, transformer.Guid); 55 } 56 57 RegisterType(new Guid("94AD8522-3F55-4580-A6F8-2D2AAEDD4B8C"), typeof(bool)); 58 RegisterType(new Guid("4A1C0FD5-423D-4F96-AB22-A496578C25AC"), typeof(byte)); 59 RegisterType(new Guid("C4B00F0B-FED7-439F-B1B2-8A0048B64882"), typeof(sbyte)); 60 RegisterType(new Guid("9F451811-3DE1-43AB-8B74-D7E03851857B"), typeof(short)); 61 RegisterType(new Guid("46244D54-0145-49F7-9CF3-9CDB7FB5F240"), typeof(ushort)); 62 RegisterType(new Guid("1FDDE40C-09E3-491F-8FBB-32BB3C885E9E"), typeof(char)); 63 RegisterType(new Guid("EE3E0F9C-A5C2-4461-AF36-28BD8F26E6FB"), typeof(int)); 64 RegisterType(new Guid("69476D18-D285-43E9-BC7C-6CC9E9F2321E"), typeof(uint)); 65 RegisterType(new Guid("7C7BC5EC-F001-4BA0-9F85-50DCBAA9AE81"), typeof(long)); 66 RegisterType(new Guid("AC808D5A-63BB-457C-9B92-C9B83DA2B139"), typeof(ulong)); 67 RegisterType(new Guid("BF22653A-026C-4367-BBBA-2125AECF6C08"), typeof(float)); 68 RegisterType(new Guid("8B49821A-3ADC-4715-9DB1-08E2F3CFDF15"), typeof(double)); 69 RegisterType(new Guid("7BB386BF-6FD4-443D-A6C1-387096798C67"), typeof(DateTime)); 70 RegisterType(new Guid("724A2D49-7E7B-455B-BBA9-4214C64E8A21"), typeof(TimeSpan)); 71 foreach (var asm in AppDomain.CurrentDomain.GetAssemblies()) { 72 foreach (var t in asm.GetTypes().Where(x => StorableClassAttribute.IsStorableClass(x))) 73 RegisterType(StorableClassAttribute.GetStorableClassAttribute(t).Guid, t); 74 } 75 76 RegisterExtension(BoolBox.Bool); 77 RegisterExtension(IntBox.Int); 78 RegisterExtension(LongBox.Long); 79 RegisterExtension(UnsignedIntBox.UnsignedInt); 80 RegisterExtension(UnsignedLongBox.UnsignedLong); 81 RegisterExtension(FloatBox.Float); 82 RegisterExtension(DoubleBox.Double); 83 RegisterExtension(StringBox.String); 84 RegisterExtension(BytesBox.Bytes); 85 RegisterExtension(BoolArrayBox.BoolArray); 86 RegisterExtension(IntArrayBox.IntArray); 87 RegisterExtension(LongArrayBox.LongArray); 88 RegisterExtension(UnsignedIntArrayBox.UnsignedIntArray); 89 RegisterExtension(UnsignedLongArrayBox.UnsignedLongArray); 90 RegisterExtension(FloatArrayBox.FloatArray); 91 RegisterExtension(DoubleArrayBox.DoubleArray); 92 RegisterExtension(StringArrayBox.StringArray); 93 RegisterExtension(MatrixBox.Matrix); 94 RegisterExtension(BoolMatrixBox.BoolMatrix); 95 RegisterExtension(IntMatrixBox.IntMatrix); 96 RegisterExtension(DictionaryBox.Dictionary); 115 guid2Transformer.Add(transformer.Guid, transformer); 116 transformer2Guid.Add(transformer, transformer.Guid); 97 117 } 98 118 } 99 100 119 public void RegisterType(Guid guid, Type type) { 101 120 lock (locker) { … … 105 124 } 106 125 public void RegisterExtension<TExtension>(GeneratedExtensionBase<TExtension> extension) { 107 extensionRegistry.Add(extension); 126 lock (locker) { 127 extensionRegistry.Add(extension); 128 } 108 129 } 109 130 -
branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Transformers/Transformers.cs
r13386 r13387 329 329 } 330 330 331 [Transformer("BA55C7A6-C91E-4351-A889-E4A7E647F16D", 21 3)]331 [Transformer("BA55C7A6-C91E-4351-A889-E4A7E647F16D", 212)] 332 332 internal sealed class DateTimeTransformer : LongBoxTransformer<DateTime> { 333 333 protected override long ToBoxType(DateTime value, Mapper mapper) { return value.Ticks; } … … 335 335 } 336 336 337 [Transformer("0C91441B-2D97-432B-B493-D6EC483FC5AD", 21 4)]337 [Transformer("0C91441B-2D97-432B-B493-D6EC483FC5AD", 213)] 338 338 internal sealed class TimeSpanTransformer : LongBoxTransformer<TimeSpan> { 339 339 protected override long ToBoxType(TimeSpan value, Mapper mapper) { return value.Ticks; } 340 340 protected override TimeSpan ToValueType(long value, Type type, Mapper mapper) { return new TimeSpan(value); } 341 341 } 342 [Transformer("0B540EAC-79AB-40CF-8277-D2C81135FEB6", 217)] 342 343 [Transformer("0B540EAC-79AB-40CF-8277-D2C81135FEB6", 214)] 343 344 internal sealed class ColorTransformers : IntBoxTransformer<Color> { 344 345 protected override int ToBoxType(Color value, Mapper mapper) { return value.ToArgb(); } 345 346 protected override Color ToValueType(int value, Type type, Mapper mapper) { return Color.FromArgb(value); } 346 347 } 348 349 [Transformer("2E6D4A40-B4BE-425F-8E35-2D7C00054639", 215)] 350 internal sealed class PointTransformer : IntArrayBoxTransformer<Point> { 351 protected override IEnumerable<int> ToBoxType(Point value, Mapper mapper) { return new int[] { value.X, value.Y }; } 352 protected override Point ToValueType(IEnumerable<int> value, Type type, Mapper mapper) { return new Point(value.ElementAt(0), value.ElementAt(1)); } 353 } 354 355 [Transformer("97B5CFC8-CDFA-4EB5-B4CD-5B3CFA5CD844", 216)] 356 internal sealed class KeyValuePairTransformer : UnsignedIntArrayBoxTransformer<object> { 357 public override bool CanTransformType(Type type) { 358 return type.IsGenericType && (type.GetGenericTypeDefinition() == typeof(KeyValuePair<,>)); 359 } 360 protected override IEnumerable<uint> ToBoxType(object value, Mapper mapper) { 361 var type = value.GetType(); 362 var pair = new uint[2]; 363 pair[0] = mapper.GetBoxId(type.GetProperty("Key").GetValue(value)); 364 pair[1] = mapper.GetBoxId(type.GetProperty("Value").GetValue(value)); 365 return pair; 366 } 367 protected override object ToValueType(IEnumerable<uint> value, Type type, Mapper mapper) { 368 var key = mapper.GetObject(value.ElementAt(0)); 369 var val = mapper.GetObject(value.ElementAt(1)); 370 return Activator.CreateInstance(type, key, val); 371 } 372 } 347 373 #endregion 348 374 349 375 #region String 350 [Transformer("E75A594C-0034-4DAB-B28E-8F84F9F6DE8D", 21 5)]376 [Transformer("E75A594C-0034-4DAB-B28E-8F84F9F6DE8D", 217)] 351 377 internal sealed class StringTransformer : UnsignedIntBoxTransformer<string> { 352 378 protected override uint ToBoxType(string value, Mapper mapper) { return mapper.GetStringId(value); } … … 356 382 357 383 #region Enum 358 [Transformer("93FF076B-BC4B-4C39-8C40-15E004468C98", 21 6)]384 [Transformer("93FF076B-BC4B-4C39-8C40-15E004468C98", 218)] 359 385 internal sealed class EnumTransformer : UnsignedIntBoxTransformer<object> { 360 386 public override bool CanTransformType(Type type) { … … 371 397 372 398 #region Type 373 [Transformer("8D17FD28-383B-44E9-9BBF-B19D351C5E38", 21 8)]399 [Transformer("8D17FD28-383B-44E9-9BBF-B19D351C5E38", 219)] 374 400 internal sealed class TypeTransformer : UnsignedIntBoxTransformer<Type> { 375 401 public override bool CanTransformType(Type type) { … … 381 407 #endregion 382 408 383 #region PrimitiveArray Types409 #region Array Types 384 410 [Transformer("F25A73B2-6B67-4493-BD59-B836AF4455D1", 300)] 385 411 internal sealed class BoolArrayTransformer : BoolArrayBoxTransformer<bool[]> { … … 459 485 protected override string[] ToValueType(IEnumerable<string> value, Type type, Mapper mapper) { return value.ToArray(); } 460 486 } 487 488 [Transformer("C83F0B5A-68D8-4271-81F9-FF259FC6F126", 400)] 489 internal sealed class GenericArrayTransformer : UnsignedIntArrayBoxTransformer<object> { 490 public override bool CanTransformType(Type type) { 491 return type.IsArray; 492 } 493 protected override IEnumerable<uint> ToBoxType(object value, Mapper mapper) { 494 var arr = (object[])value; 495 return arr.Select(x => mapper.GetBoxId(x)); 496 } 497 protected override object ToValueType(IEnumerable<uint> value, Type type, Mapper mapper) { 498 return value.Select(x => mapper.GetObject(x)).ToArray(); 499 } 500 } 461 501 #endregion 462 502 }
Note: See TracChangeset
for help on using the changeset viewer.