cauterize 0.0.1.pre1 → 0.0.1.pre5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. data/.gitignore +5 -0
  2. data/.rspec +1 -1
  3. data/Gemfile +1 -1
  4. data/README.md +0 -2
  5. data/Rakefile +19 -3
  6. data/bin/cauterize +14 -6
  7. data/example/Cauterize +22 -10
  8. data/example/build.sh +15 -2
  9. data/lib/cauterize/base_type.rb +2 -5
  10. data/lib/cauterize/builders.rb +1 -3
  11. data/lib/cauterize/builders/c/buildable.rb +3 -2
  12. data/lib/cauterize/builders/c/builtin.rb +46 -0
  13. data/lib/cauterize/builders/c/enumeration.rb +23 -2
  14. data/lib/cauterize/builders/c/fixed_array.rb +16 -7
  15. data/lib/cauterize/builders/c/group.rb +32 -3
  16. data/lib/cauterize/builders/c/scalar.rb +5 -0
  17. data/lib/cauterize/builders/c/variable_array.rb +1 -1
  18. data/lib/cauterize/builders/cs/buildable.rb +59 -0
  19. data/lib/cauterize/builders/cs/builtin.rb +23 -0
  20. data/lib/cauterize/builders/cs/composite.rb +21 -0
  21. data/lib/cauterize/builders/cs/csarray.rb +32 -0
  22. data/lib/cauterize/builders/cs/enumeration.rb +21 -0
  23. data/lib/cauterize/builders/cs/fixed_array.rb +25 -0
  24. data/lib/cauterize/builders/cs/group.rb +33 -0
  25. data/lib/cauterize/builders/cs/scalar.rb +10 -0
  26. data/lib/cauterize/builders/cs/variable_array.rb +34 -0
  27. data/lib/cauterize/builtin.rb +52 -0
  28. data/lib/cauterize/c_builder.rb +15 -1
  29. data/lib/cauterize/cauterize.rb +44 -13
  30. data/lib/cauterize/composite.rb +3 -3
  31. data/lib/cauterize/cs_builder.rb +53 -0
  32. data/lib/cauterize/enumeration.rb +20 -3
  33. data/lib/cauterize/fixed_array.rb +3 -3
  34. data/lib/cauterize/formatter.rb +7 -3
  35. data/lib/cauterize/group.rb +5 -8
  36. data/lib/cauterize/scalar.rb +16 -7
  37. data/lib/cauterize/variable_array.rb +6 -6
  38. data/lib/cauterize/version.rb +1 -1
  39. data/spec/base_type_spec.rb +133 -125
  40. data/spec/builders/c/buildable_spec.rb +18 -18
  41. data/spec/builders/c/builtin_spec.rb +22 -0
  42. data/spec/builders/c/composite_spec.rb +37 -33
  43. data/spec/builders/c/enumeration_spec.rb +84 -21
  44. data/spec/builders/c/fixed_array_spec.rb +6 -6
  45. data/spec/builders/c/group_spec.rb +97 -90
  46. data/spec/builders/c/scalar_spec.rb +24 -6
  47. data/spec/builders/c/variable_array_spec.rb +37 -37
  48. data/spec/builders/cs/buildable_spec.rb +8 -0
  49. data/spec/builders/cs/composite_spec.rb +32 -0
  50. data/spec/builders/cs/enumeration_spec.rb +33 -0
  51. data/spec/builders/cs/fixed_array_spec.rb +40 -0
  52. data/spec/builders/cs/group_spec.rb +56 -0
  53. data/spec/builders/cs/scalar_spec.rb +7 -0
  54. data/spec/builders/cs/variable_array_spec.rb +46 -0
  55. data/spec/builders_spec.rb +38 -38
  56. data/spec/builtin_spec.rb +46 -0
  57. data/spec/c_builder_spec.rb +116 -102
  58. data/spec/cauterize_spec.rb +8 -1
  59. data/spec/composite_spec.rb +52 -48
  60. data/spec/cs_builder_spec.rb +113 -0
  61. data/spec/enumeration_spec.rb +55 -16
  62. data/spec/fixed_array_spec.rb +7 -9
  63. data/spec/group_spec.rb +81 -76
  64. data/spec/scalar_spec.rb +20 -10
  65. data/spec/spec_helper.rb +103 -94
  66. data/spec/support/shared_examples_for_c_buildables.rb +68 -64
  67. data/spec/variable_array_spec.rb +12 -17
  68. data/{c → support/c}/src/cauterize.c +8 -7
  69. data/support/c/src/cauterize.h +59 -0
  70. data/{c → support/c}/src/cauterize_debug.h +0 -0
  71. data/support/c/src/cauterize_util.h +49 -0
  72. data/{c → support/c}/test/greatest.h +0 -0
  73. data/{c → support/c}/test/test.c +0 -0
  74. data/support/cs/src/CauterizeCompositeFormatter.cs +34 -0
  75. data/support/cs/src/CauterizeContainerFormatter.cs +18 -0
  76. data/support/cs/src/CauterizeEnumFormatter.cs +67 -0
  77. data/support/cs/src/CauterizeException.cs +15 -0
  78. data/support/cs/src/CauterizeFixedArrayFormatter.cs +39 -0
  79. data/support/cs/src/CauterizeFormatter.cs +40 -0
  80. data/support/cs/src/CauterizeGroupFormatter.cs +46 -0
  81. data/support/cs/src/CauterizePrimitiveFormatter.cs +33 -0
  82. data/support/cs/src/CauterizeTypeFormatterFactory.cs +39 -0
  83. data/support/cs/src/CauterizeTypes.cs +107 -0
  84. data/support/cs/src/CauterizeVariableArrayFormatter.cs +49 -0
  85. data/support/cs/src/ICauterizeTypeFormatter.cs +12 -0
  86. data/support/cs/src/OrderAttribute.cs +50 -0
  87. data/support/cs/src/PrimitiveSupport.cs +134 -0
  88. data/support/cs/src/SerializedRepresentationAttribute.cs +24 -0
  89. data/support/cs/test/CauterizeCompositeFormatterTest.cs +59 -0
  90. data/support/cs/test/CauterizeEnumFormatterTest.cs +110 -0
  91. data/support/cs/test/CauterizeFixedArrayFormatterTest.cs +91 -0
  92. data/support/cs/test/CauterizeFormatterTest.cs +40 -0
  93. data/support/cs/test/CauterizeGroupFormatterTest.cs +147 -0
  94. data/support/cs/test/CauterizeIntegrationTest.cs +129 -0
  95. data/support/cs/test/CauterizePrimitiveFormatterTest.cs +98 -0
  96. data/support/cs/test/CauterizeTypeFormatterFactoryTest.cs +73 -0
  97. data/support/cs/test/CauterizeVariableArrayFormatterTest.cs +130 -0
  98. data/support/cs/test/OrderAttributeTest.cs +39 -0
  99. data/support/cs/test/SerializedRepresentationAttributeTest.cs +39 -0
  100. metadata +68 -10
  101. data/c/src/cauterize.h +0 -46
  102. data/c/src/cauterize_util.h +0 -7
@@ -0,0 +1,18 @@
1
+ using System;
2
+ using System.IO;
3
+
4
+ namespace Cauterize
5
+ {
6
+ public abstract class CauterizeContainerFormatter : ICauterizeTypeFormatter
7
+ {
8
+ protected CauterizeTypeFormatterFactory _typeFormatterFactory;
9
+
10
+ public CauterizeContainerFormatter(CauterizeTypeFormatterFactory factory)
11
+ {
12
+ _typeFormatterFactory = factory;
13
+ }
14
+
15
+ public abstract object Deserialize(Stream serializationStream, Type t);
16
+ public abstract void Serialize(Stream serializationStream, object obj);
17
+ }
18
+ }
@@ -0,0 +1,67 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+ using System.IO;
4
+ using System.Text;
5
+
6
+ namespace Cauterize
7
+ {
8
+ public class CauterizeEnumFormatter : ICauterizeTypeFormatter
9
+ {
10
+ public object Deserialize(Stream serializationStream, Type t)
11
+ {
12
+ var numBytes = GetNumBytesForEnum(t);
13
+ var bytes = new byte[numBytes];
14
+ serializationStream.Read(bytes, 0, numBytes);
15
+ if (!BitConverter.IsLittleEndian)
16
+ {
17
+ Array.Reverse(bytes);
18
+ }
19
+ Int64 intValue = 0;
20
+ switch (numBytes)
21
+ {
22
+ case 8: intValue = BitConverter.ToInt64(bytes, 0);
23
+ break;
24
+ case 4: intValue = BitConverter.ToInt32(bytes, 0);
25
+ break;
26
+ case 2: intValue = BitConverter.ToInt16(bytes, 0);
27
+ break;
28
+ case 1: intValue = (Int32)bytes[0];
29
+ break;
30
+ }
31
+ return Enum.ToObject(t, intValue);
32
+ }
33
+
34
+ public void Serialize(Stream serializationStream, object obj)
35
+ {
36
+ var longValue = Convert.ToInt64(obj);
37
+ var bytes = BitConverter.GetBytes(longValue);
38
+ if (!BitConverter.IsLittleEndian)
39
+ {
40
+ Array.Reverse(bytes);
41
+ }
42
+ serializationStream.Write(bytes, 0, GetNumBytesForEnum(obj.GetType()));
43
+ }
44
+
45
+ private int GetNumBytesForEnum(Type t)
46
+ {
47
+ var type = SerializedRepresentationAttribute.GetRepresentation(t);
48
+ if (type == typeof(SByte) || type == typeof(Byte))
49
+ {
50
+ return 1;
51
+ }
52
+ else if (type == typeof(Int16) || type == typeof(UInt16))
53
+ {
54
+ return 2;
55
+ }
56
+ else if (type == typeof(Int32) || type == typeof(UInt32))
57
+ {
58
+ return 4;
59
+ }
60
+ else if (type == typeof(Int64) || type == typeof(UInt64))
61
+ {
62
+ return 8;
63
+ }
64
+ return 0;
65
+ }
66
+ }
67
+ }
@@ -0,0 +1,15 @@
1
+ using System;
2
+
3
+ namespace Cauterize
4
+ {
5
+ public class CauterizeException : Exception
6
+ {
7
+ public CauterizeException(string message) : base(message)
8
+ {
9
+ }
10
+
11
+ public CauterizeException(string message, Exception innerException) : base(message, innerException)
12
+ {
13
+ }
14
+ }
15
+ }
@@ -0,0 +1,39 @@
1
+ using System;
2
+ using System.IO;
3
+ using System.Reflection;
4
+
5
+ namespace Cauterize
6
+ {
7
+ public class CauterizeFixedArrayFormatter : CauterizeContainerFormatter
8
+ {
9
+ public CauterizeFixedArrayFormatter(CauterizeTypeFormatterFactory factory) : base(factory)
10
+ {
11
+ }
12
+ public override object Deserialize(Stream serializationStream, Type t)
13
+ {
14
+ var ret = t.GetConstructor(new Type[] {}).Invoke(new object[] {});
15
+ var arrayField = t.BaseType.GetField("_data", BindingFlags.NonPublic | BindingFlags.Instance);
16
+ var array = (Array)arrayField.GetValue(ret);
17
+ var arrayType = arrayField.FieldType.GetElementType();
18
+ var subFormatter = _typeFormatterFactory.GetFormatter(arrayType);
19
+ for (var i = 0; i < array.Length; i++)
20
+ {
21
+ array.SetValue(subFormatter.Deserialize(serializationStream, arrayType), i);
22
+ }
23
+ return ret;
24
+ }
25
+
26
+ public override void Serialize(Stream serializationStream, object obj)
27
+ {
28
+ var t = obj.GetType();
29
+ var arrayField = t.BaseType.GetField("_data", BindingFlags.NonPublic | BindingFlags.Instance);
30
+ var array = (Array)arrayField.GetValue(obj);
31
+ var arrayType = arrayField.FieldType.GetElementType();
32
+ var subFormatter = _typeFormatterFactory.GetFormatter(arrayType);
33
+ for (var i = 0; i < array.Length; i++)
34
+ {
35
+ subFormatter.Serialize(serializationStream, array.GetValue(i));
36
+ }
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,40 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+ using System.IO;
4
+ using System.Reflection;
5
+ using System.Runtime.Serialization;
6
+ using System.Text;
7
+
8
+ namespace Cauterize
9
+ {
10
+ public class CauterizeFormatter
11
+ {
12
+ public SerializationBinder Binder { get; set; }
13
+ public StreamingContext Context { get; set; }
14
+ public ISurrogateSelector SurrogateSelector { get; set; }
15
+
16
+ private readonly CauterizeTypeFormatterFactory _formatterFactory;
17
+ public CauterizeFormatter() // only needed for deserialization
18
+ {
19
+ _formatterFactory = new CauterizeTypeFormatterFactory();
20
+ }
21
+
22
+ public CauterizeFormatter(CauterizeTypeFormatterFactory factory)
23
+ {
24
+ _formatterFactory = factory;
25
+ }
26
+
27
+ public virtual T Deserialize<T>(Stream serializationStream)
28
+ {
29
+ var formatter = _formatterFactory.GetFormatter(typeof(T));
30
+ return (T)formatter.Deserialize(serializationStream, typeof(T));
31
+ }
32
+
33
+ public virtual void Serialize(Stream serializationStream, object obj)
34
+ {
35
+ var formatter = _formatterFactory.GetFormatter(obj.GetType());
36
+ formatter.Serialize(serializationStream, obj);
37
+ }
38
+ }
39
+ }
40
+
@@ -0,0 +1,46 @@
1
+ using System;
2
+ using System.IO;
3
+
4
+ namespace Cauterize
5
+ {
6
+ public class CauterizeGroupFormatter : CauterizeContainerFormatter
7
+ {
8
+ public CauterizeGroupFormatter(CauterizeTypeFormatterFactory factory) : base(factory)
9
+ {
10
+ }
11
+ public override object Deserialize(Stream serializationStream, Type t)
12
+ {
13
+ var ret = t.GetConstructor(new Type[] {}).Invoke(new object[] {});
14
+ var typeProp = OrderAttribute.GetPropertyByOrder(t, 0);
15
+ var enumFormatter = _typeFormatterFactory.GetFormatter(typeProp.PropertyType);
16
+ var enumValue = enumFormatter.Deserialize(serializationStream, typeProp.PropertyType);
17
+ typeProp.SetValue(ret, enumValue, null);
18
+ var index = ((int) enumValue) + 1;
19
+ var prop = OrderAttribute.GetPropertyByOrder(t, index);
20
+ if (prop != null)
21
+ {
22
+ var subType = prop.PropertyType;
23
+ var subFormatter = _typeFormatterFactory.GetFormatter(subType);
24
+ var subObj = subFormatter.Deserialize(serializationStream, subType);
25
+ prop.SetValue(ret, subObj, null);
26
+ }
27
+ return ret;
28
+ }
29
+
30
+ public override void Serialize(Stream serializationStream, object obj)
31
+ {
32
+ var typeProp = OrderAttribute.GetPropertyByOrder(obj.GetType(), 0);
33
+ var enumFormatter = _typeFormatterFactory.GetFormatter(typeProp.PropertyType);
34
+ var enumValue = typeProp.GetValue(obj, null);
35
+ enumFormatter.Serialize(serializationStream, enumValue);
36
+ var index = ((int) enumValue) + 1;
37
+ var subProp = OrderAttribute.GetPropertyByOrder(obj.GetType(), index);
38
+ if (subProp != null)
39
+ {
40
+ var subType = subProp.PropertyType;
41
+ var subFormatter = _typeFormatterFactory.GetFormatter(subType);
42
+ subFormatter.Serialize(serializationStream, subProp.GetValue(obj, null));
43
+ }
44
+ }
45
+ }
46
+ }
@@ -0,0 +1,33 @@
1
+ using System;
2
+ using System.ComponentModel;
3
+ using System.IO;
4
+ using System.Runtime.Serialization;
5
+ using System.Text;
6
+
7
+ namespace Cauterize
8
+ {
9
+ public class CauterizePrimitiveFormatter : ICauterizeTypeFormatter
10
+ {
11
+ public object Deserialize(Stream serializationStream, Type t)
12
+ {
13
+ var numBytes = PrimitiveSupport.TypeToByteSize(t);
14
+ var bytes = new byte[numBytes];
15
+ serializationStream.Read(bytes, 0, numBytes);
16
+ if (!BitConverter.IsLittleEndian)
17
+ {
18
+ Array.Reverse(bytes);
19
+ }
20
+ return PrimitiveSupport.TypeFromBytes(t, bytes);
21
+ }
22
+
23
+ public void Serialize(Stream serializationStream, object obj)
24
+ {
25
+ var bytes = PrimitiveSupport.BytesFromValue(obj);
26
+ if (!BitConverter.IsLittleEndian)
27
+ {
28
+ Array.Reverse(bytes);
29
+ }
30
+ serializationStream.Write(bytes, 0, bytes.Length);
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,39 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+ using System.Text;
4
+
5
+ namespace Cauterize
6
+ {
7
+ public class CauterizeTypeFormatterFactory
8
+ {
9
+ public virtual ICauterizeTypeFormatter GetFormatter(Type t)
10
+ {
11
+ ICauterizeTypeFormatter formatter;
12
+ if (t.IsSubclassOf(typeof (CauterizeComposite)))
13
+ {
14
+ formatter = new CauterizeCompositeFormatter(this);
15
+ }
16
+ else if (t.IsSubclassOf(typeof (CauterizeGroup)))
17
+ {
18
+ formatter = new CauterizeGroupFormatter(this);
19
+ }
20
+ else if (t.IsSubclassOf(typeof (CauterizeFixedArray)))
21
+ {
22
+ formatter = new CauterizeFixedArrayFormatter(this);
23
+ }
24
+ else if (t.IsSubclassOf(typeof (CauterizeVariableArray)))
25
+ {
26
+ formatter = new CauterizeVariableArrayFormatter(this);
27
+ }
28
+ else if (t.IsSubclassOf(typeof (Enum)))
29
+ {
30
+ formatter = new CauterizeEnumFormatter();
31
+ }
32
+ else
33
+ {
34
+ formatter = new CauterizePrimitiveFormatter();
35
+ }
36
+ return formatter;
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,107 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+ using System.Text;
4
+
5
+ namespace Cauterize
6
+ {
7
+ public class CauterizeInfo {
8
+ public static string Name;
9
+ public static string GeneratedVersion;
10
+ public static string GeneratedDate;
11
+ }
12
+
13
+ public class CauterizeComposite
14
+ {
15
+ }
16
+
17
+ public class CauterizeGroup
18
+ {
19
+ }
20
+
21
+ public abstract class CauterizeFixedArray
22
+ {
23
+ }
24
+
25
+ public abstract class CauterizeFixedArrayTyped<T> : CauterizeFixedArray
26
+ {
27
+ private T[] _data;
28
+
29
+ protected abstract int Size { get; }
30
+
31
+ protected void Allocate(T[] data)
32
+ {
33
+ Allocate(data.Length);
34
+ Array.Copy(data, _data, data.Length);
35
+ }
36
+
37
+ protected void Allocate(int size)
38
+ {
39
+ if (size != Size)
40
+ {
41
+ throw new CauterizeException("arrays for " + GetType() + " must be size " + Size);
42
+ }
43
+ _data = new T[size];
44
+ }
45
+
46
+ public static implicit operator T[](CauterizeFixedArrayTyped<T> array)
47
+ {
48
+ return array._data;
49
+ }
50
+
51
+ // implicit conversion won't cover slicing
52
+ public T this[int i]
53
+ {
54
+ get { return _data[i]; }
55
+ set { _data[i] = value; }
56
+ }
57
+
58
+ public T[] GetArray()
59
+ {
60
+ return _data;
61
+ }
62
+ }
63
+
64
+ public abstract class CauterizeVariableArray
65
+ {
66
+ }
67
+
68
+ public abstract class CauterizeVariableArrayTyped<T> : CauterizeVariableArray
69
+ {
70
+ private T[] _data;
71
+
72
+ protected abstract int MaxSize { get; }
73
+
74
+ protected void Allocate(T[] data)
75
+ {
76
+ Allocate(data.Length);
77
+ Array.Copy(data, _data, data.Length);
78
+ }
79
+
80
+ protected void Allocate(int size)
81
+ {
82
+ if (size > MaxSize)
83
+ {
84
+ throw new CauterizeException("arrays for " + GetType() + " must be smaller than " + MaxSize);
85
+ }
86
+ _data = new T[size];
87
+ }
88
+
89
+ public static implicit operator T[](CauterizeVariableArrayTyped<T> array)
90
+ {
91
+ return array._data;
92
+ }
93
+
94
+ // implicit conversion won't cover slicing
95
+ public T this[int i]
96
+ {
97
+ get { return _data[i]; }
98
+ set { _data[i] = value; }
99
+ }
100
+
101
+ public T[] GetArray()
102
+ {
103
+ return _data;
104
+ }
105
+ }
106
+ }
107
+
@@ -0,0 +1,49 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+ using System.IO;
4
+ using System.Reflection;
5
+
6
+ namespace Cauterize
7
+ {
8
+ public class CauterizeVariableArrayFormatter : CauterizeContainerFormatter
9
+ {
10
+ public CauterizeVariableArrayFormatter(CauterizeTypeFormatterFactory factory) : base(factory)
11
+ {
12
+ }
13
+
14
+
15
+ public override object Deserialize(Stream serializationStream, Type t)
16
+ {
17
+ var sizeType = (Type) t.GetField("SizeType").GetValue(null);
18
+ var sizeFormatter = _typeFormatterFactory.GetFormatter(sizeType);
19
+ var rawSize = sizeFormatter.Deserialize(serializationStream, sizeType);
20
+ var arraySize = PrimitiveSupport.TypeToInt(rawSize);
21
+ var ret = t.GetConstructor(new Type[] {typeof (int)}).Invoke(new object[] {arraySize});
22
+ var arrayField = t.BaseType.GetField("_data", BindingFlags.NonPublic | BindingFlags.Instance);
23
+ var array = (Array)arrayField.GetValue(ret);
24
+ var arrayType = arrayField.FieldType.GetElementType();
25
+ var subFormatter = _typeFormatterFactory.GetFormatter(arrayType);
26
+ for (var i = 0; i < arraySize; i++)
27
+ {
28
+ array.SetValue(subFormatter.Deserialize(serializationStream, arrayType), i);
29
+ }
30
+ return ret;
31
+ }
32
+
33
+ public override void Serialize(Stream serializationStream, object obj)
34
+ {
35
+ var t = obj.GetType();
36
+ var arrayField = t.BaseType.GetField("_data", BindingFlags.NonPublic | BindingFlags.Instance);
37
+ var array = (Array)arrayField.GetValue(obj);
38
+ var sizeType = (Type) t.GetField("SizeType").GetValue(null);
39
+ var sizeFormatter = _typeFormatterFactory.GetFormatter(sizeType);
40
+ sizeFormatter.Serialize(serializationStream, PrimitiveSupport.IntToType(sizeType, array.Length));
41
+ var arrayType = arrayField.FieldType.GetElementType();
42
+ var subFormatter = _typeFormatterFactory.GetFormatter(arrayType);
43
+ for (var i = 0; i < array.Length; i++)
44
+ {
45
+ subFormatter.Serialize(serializationStream, array.GetValue(i));
46
+ }
47
+ }
48
+ }
49
+ }