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,12 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+ using System.IO;
4
+
5
+ namespace Cauterize
6
+ {
7
+ public interface ICauterizeTypeFormatter
8
+ {
9
+ object Deserialize(Stream serializationStream, Type t);
10
+ void Serialize(Stream serializationStream, object obj);
11
+ }
12
+ }
@@ -0,0 +1,50 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+ using System.ComponentModel;
4
+ using System.Reflection;
5
+ using System.Text;
6
+
7
+ namespace Cauterize
8
+ {
9
+ [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field,
10
+ Inherited = true, AllowMultiple = false)]
11
+ [ImmutableObject(true)]
12
+ public sealed class OrderAttribute : Attribute {
13
+ private readonly int _order;
14
+ public int Order { get { return _order; } }
15
+ public OrderAttribute(int order) {_order = order;}
16
+ public static IEnumerable<PropertyInfo> GetSortedProperties(Type t)
17
+ {
18
+ var propComp = new Comparison<PropertyInfo>(CompareProps);
19
+ var propList = new List<PropertyInfo>(t.GetProperties());
20
+
21
+ propList.Sort(propComp);
22
+
23
+ return propList;
24
+ }
25
+
26
+ public static PropertyInfo GetPropertyByOrder(Type t, int order)
27
+ {
28
+ foreach (var prop in t.GetProperties())
29
+ {
30
+ var orderAttr = ((OrderAttribute)prop.GetCustomAttributes(typeof(OrderAttribute), false)[0]);
31
+
32
+ if (orderAttr.Order == order)
33
+ {
34
+ return prop;
35
+ }
36
+ }
37
+
38
+ return null;
39
+ }
40
+
41
+ private static int CompareProps(PropertyInfo a, PropertyInfo b)
42
+ {
43
+ OrderAttribute _a = (OrderAttribute)a.GetCustomAttributes(typeof(OrderAttribute), false)[0];
44
+ OrderAttribute _b = (OrderAttribute)b.GetCustomAttributes(typeof(OrderAttribute), false)[0];
45
+
46
+ return _a.Order - _b.Order;
47
+ }
48
+ }
49
+ }
50
+
@@ -0,0 +1,134 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+ using System.Text;
4
+
5
+ namespace Cauterize
6
+ {
7
+ public class PrimitiveSupport
8
+ {
9
+ static public int TypeToByteSize(Type t)
10
+ {
11
+ if (t == typeof(Byte) || t == typeof(SByte))
12
+ {
13
+ return 1;
14
+ }
15
+ else if (t == typeof (UInt16) || t == typeof (Int16))
16
+ {
17
+ return 2;
18
+ }
19
+ else if (t == typeof (UInt32) || t == typeof (Int32))
20
+ {
21
+ return 4;
22
+ }
23
+ else if (t == typeof (UInt64) || t == typeof (Int64))
24
+ {
25
+ return 8;
26
+ }
27
+ else
28
+ {
29
+ throw new Exception("Invalid type to get byte size");
30
+ }
31
+ }
32
+
33
+ static public int TypeToInt(object value)
34
+ {
35
+ if (value is Int32)
36
+ {
37
+ return (int) value;
38
+ }
39
+ else if (value is Int16)
40
+ {
41
+ return (Int16)value;
42
+ }
43
+ else if (value is Byte)
44
+ {
45
+ return (Byte) value;
46
+ }
47
+ else if (value is UInt32)
48
+ {
49
+ return (int)(UInt32) value;
50
+ }
51
+ else if (value is UInt16)
52
+ {
53
+ return (UInt16) value;
54
+ }
55
+ else if (value is SByte)
56
+ {
57
+ return (SByte) value;
58
+ }
59
+ else if (value == null)
60
+ {
61
+ return 0;
62
+ }
63
+ else
64
+ {
65
+ throw new Exception("invalid array size type");
66
+ }
67
+ }
68
+
69
+ static public object IntToType(Type t, int value)
70
+ {
71
+ if (t == typeof(Int32))
72
+ {
73
+ return value;
74
+ }
75
+ else if (t == typeof(Int16))
76
+ {
77
+ return (Int16)value;
78
+ }
79
+ else if (t == typeof(Byte))
80
+ {
81
+ return (Byte)value;
82
+ }
83
+ else if (t == typeof (UInt32))
84
+ {
85
+ return (UInt32) value;
86
+ }
87
+ else if (t == typeof (UInt16))
88
+ {
89
+ return (UInt16) value;
90
+ }
91
+ else if (t == typeof (SByte))
92
+ {
93
+ return (SByte) value;
94
+ }
95
+ else
96
+ {
97
+ throw new Exception("Invalid type for array size type");
98
+ }
99
+
100
+ }
101
+
102
+ static public object TypeFromBytes(Type t, byte[] bytes)
103
+ {
104
+ if (t == typeof (Byte))
105
+ {
106
+ return bytes[0];
107
+ }
108
+ else if (t == typeof (SByte))
109
+ {
110
+ return (SByte) bytes[0];
111
+ }
112
+ else
113
+ {
114
+ return typeof(BitConverter)
115
+ .GetMethod("To" + t.Name, new Type[] {typeof(byte[]), typeof(int)})
116
+ .Invoke(null,new object[]{bytes, 0});
117
+ }
118
+ }
119
+
120
+ static public byte[] BytesFromValue(object value)
121
+ {
122
+ if (value is Byte || value is SByte)
123
+ {
124
+ return new[] {(byte) value};
125
+ }
126
+ else
127
+ {
128
+ return (byte[]) typeof (BitConverter)
129
+ .GetMethod("GetBytes", new Type[] {value.GetType()})
130
+ .Invoke(null, new object[] {value});
131
+ }
132
+ }
133
+ }
134
+ }
@@ -0,0 +1,24 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+ using System.ComponentModel;
4
+ using System.Reflection;
5
+ using System.Text;
6
+
7
+ namespace Cauterize
8
+ {
9
+ [AttributeUsage(AttributeTargets.Enum, Inherited = true, AllowMultiple = false)]
10
+ [ImmutableObject(true)]
11
+ public sealed class SerializedRepresentationAttribute : Attribute {
12
+ public Type Type { get; private set; }
13
+ public SerializedRepresentationAttribute(Type type)
14
+ {
15
+ Type = type;
16
+ }
17
+ public static Type GetRepresentation(Type t)
18
+ {
19
+ var attrs = t.GetCustomAttributes(typeof(SerializedRepresentationAttribute), false);
20
+ return ((SerializedRepresentationAttribute)attrs[0]).Type;
21
+ }
22
+ }
23
+ }
24
+
@@ -0,0 +1,59 @@
1
+ using System;
2
+ using System.IO;
3
+ using System.Text;
4
+ using System.Collections.Generic;
5
+ using System.Linq;
6
+ using Cauterize;
7
+ using Moq;
8
+ using NUnit.Framework;
9
+
10
+ namespace Cauterize.Test
11
+ {
12
+ public class TestComposite : CauterizeComposite
13
+ {
14
+ [Order(0)]
15
+ public Int16 MyIntSmall { get; set; }
16
+
17
+ [Order(1)]
18
+ public Int32 MyIntNormal { get; set; }
19
+ }
20
+
21
+ [TestFixture]
22
+ public class CauterizeCompositeFormatterTest
23
+ {
24
+ [Test]
25
+ public void TestDeserialize()
26
+ {
27
+ var stream = new MemoryStream();
28
+ var factory = new Mock<CauterizeTypeFormatterFactory>();
29
+ var sf1 = new Mock<ICauterizeTypeFormatter>();
30
+ var sf2 = new Mock<ICauterizeTypeFormatter>();
31
+ factory.Setup(f => f.GetFormatter(It.IsAny<Type>())).Returns((Type t) => t == typeof(Int16) ? sf1.Object : sf2.Object);
32
+ sf1.Setup(sf => sf.Deserialize(stream, typeof (Int16))).Returns((Int16) 5);
33
+ sf2.Setup(sf => sf.Deserialize(stream, typeof (Int32))).Returns(15);
34
+ var formatter = new CauterizeCompositeFormatter(factory.Object);
35
+ var output = (TestComposite) formatter.Deserialize(stream, typeof (TestComposite));
36
+ Assert.AreEqual(15, output.MyIntNormal);
37
+ Assert.AreEqual(5, output.MyIntSmall);
38
+ }
39
+
40
+ [Test]
41
+ public void TestSerialize()
42
+ {
43
+ var stream = new MemoryStream();
44
+ var factory = new Mock<CauterizeTypeFormatterFactory>();
45
+ var sf1 = new Mock<ICauterizeTypeFormatter>();
46
+ var sf2 = new Mock<ICauterizeTypeFormatter>();
47
+ factory.Setup(f => f.GetFormatter(It.IsAny<Type>())).Returns((Type t) => t == typeof(Int16) ? sf1.Object : sf2.Object);
48
+ sf1.Setup(sf => sf.Serialize(stream, (Int16)2));
49
+ sf2.Setup(sf => sf.Serialize(stream, 2222));
50
+ var formatter = new CauterizeCompositeFormatter(factory.Object);
51
+ var testObj = new TestComposite();
52
+ testObj.MyIntNormal = 2222;
53
+ testObj.MyIntSmall = 2;
54
+ formatter.Serialize(stream, testObj);
55
+ sf2.VerifyAll();
56
+ sf1.VerifyAll();
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,110 @@
1
+ using System;
2
+ using System.IO;
3
+ using System.Text;
4
+ using System.Collections.Generic;
5
+ using System.Linq;
6
+ using NUnit.Framework;
7
+
8
+ namespace Cauterize.Test
9
+ {
10
+ [SerializedRepresentation(typeof(SByte))]
11
+ public enum CauterizeEnumTestSmall
12
+ {
13
+ Cets01 = 0,
14
+ Cets02 = 2
15
+ }
16
+
17
+ [SerializedRepresentation(typeof(Int16))]
18
+ public enum CauterizeEnumTestMedium
19
+ {
20
+ Cetm01 = 0,
21
+ Cetm02 = 512
22
+ }
23
+
24
+ [SerializedRepresentation(typeof(Int64))]
25
+ public enum CauterizeEnumTestLarge
26
+ {
27
+ Cetl01 = 0,
28
+ Cetl02 = 131072
29
+ }
30
+
31
+ [TestFixture]
32
+ public class CauterizeEnumFormatterTest
33
+ {
34
+ [Test]
35
+ public void TestDeserialize_Small()
36
+ {
37
+ var bytes = new byte[1];
38
+ bytes[0] = 2;
39
+ var stream = new MemoryStream(bytes);
40
+ var formatter = new CauterizeEnumFormatter();
41
+ Assert.AreEqual(CauterizeEnumTestSmall.Cets02, formatter.Deserialize(stream, typeof (CauterizeEnumTestSmall)));
42
+ }
43
+
44
+ [Test]
45
+ public void TestDeserialize_Medium()
46
+ {
47
+ var bytes = new byte[2];
48
+ bytes[0] = 0;
49
+ bytes[1] = 2;
50
+ var stream = new MemoryStream(bytes);
51
+ var formatter = new CauterizeEnumFormatter();
52
+ Assert.AreEqual(CauterizeEnumTestMedium.Cetm02, formatter.Deserialize(stream, typeof (CauterizeEnumTestMedium)));
53
+ }
54
+
55
+ [Test]
56
+ public void TestDeserialize_Large()
57
+ {
58
+ var bytes = new byte[8];
59
+ bytes[0] = 0;
60
+ bytes[1] = 0;
61
+ bytes[2] = 2;
62
+ bytes[3] = 0;
63
+ bytes[4] = 0;
64
+ bytes[5] = 0;
65
+ bytes[6] = 0;
66
+ bytes[7] = 0;
67
+ var stream = new MemoryStream(bytes);
68
+ var formatter = new CauterizeEnumFormatter();
69
+ Assert.AreEqual(CauterizeEnumTestLarge.Cetl02, formatter.Deserialize(stream, typeof (CauterizeEnumTestLarge)));
70
+ }
71
+
72
+ [Test]
73
+ public void TestSerialize_Small()
74
+ {
75
+ var bytes = new byte[1];
76
+ var stream = new MemoryStream(bytes);
77
+ var formatter = new CauterizeEnumFormatter();
78
+ formatter.Serialize(stream, CauterizeEnumTestSmall.Cets02);
79
+ Assert.AreEqual(2, bytes[0]);
80
+ }
81
+
82
+ [Test]
83
+ public void TestSerialize_Medium()
84
+ {
85
+ var bytes = new byte[2];
86
+ var stream = new MemoryStream(bytes);
87
+ var formatter = new CauterizeEnumFormatter();
88
+ formatter.Serialize(stream, CauterizeEnumTestMedium.Cetm02);
89
+ Assert.AreEqual(0, bytes[0]);
90
+ Assert.AreEqual(2, bytes[1]);
91
+ }
92
+
93
+ [Test]
94
+ public void TestSerialize_Large()
95
+ {
96
+ var bytes = new byte[8];
97
+ var stream = new MemoryStream(bytes);
98
+ var formatter = new CauterizeEnumFormatter();
99
+ formatter.Serialize(stream, CauterizeEnumTestLarge.Cetl02);
100
+ Assert.AreEqual(0, bytes[0]);
101
+ Assert.AreEqual(0, bytes[1]);
102
+ Assert.AreEqual(2, bytes[2]);
103
+ Assert.AreEqual(0, bytes[3]);
104
+ Assert.AreEqual(0, bytes[4]);
105
+ Assert.AreEqual(0, bytes[5]);
106
+ Assert.AreEqual(0, bytes[6]);
107
+ Assert.AreEqual(0, bytes[7]);
108
+ }
109
+ }
110
+ }
@@ -0,0 +1,91 @@
1
+ using System;
2
+ using System.IO;
3
+ using System.Text;
4
+ using System.Collections.Generic;
5
+ using System.Linq;
6
+ using Moq;
7
+ using NUnit.Framework;
8
+ using Cauterize;
9
+
10
+ namespace Cauterize.Test
11
+ {
12
+ class TestFixedArray : CauterizeFixedArrayTyped<long>
13
+ {
14
+ public TestFixedArray()
15
+ {
16
+ Allocate(3);
17
+ }
18
+ public TestFixedArray(long[] data)
19
+ {
20
+ Allocate(data);
21
+ }
22
+ protected override int Size
23
+ {
24
+ get { return 3; }
25
+ }
26
+ }
27
+ [TestFixture]
28
+ public class CauterizeFixedArrayFormatterTest
29
+ {
30
+ [Test]
31
+ public void TestDeserialize()
32
+ {
33
+ var stream = new MemoryStream();
34
+ var factory = new Mock<CauterizeTypeFormatterFactory>();
35
+ var sf = new Mock<ICauterizeTypeFormatter>();
36
+ factory.Setup(f => f.GetFormatter(typeof (Int64))).Returns(sf.Object);
37
+ var counter = 0;
38
+ sf.Setup(f => f.Deserialize(stream, typeof(Int64))).Returns((Stream str, Type t) =>
39
+ {
40
+ var ret = 0;
41
+ if (counter == 1)
42
+ {
43
+ ret = 101;
44
+ }
45
+ else if (counter == 2)
46
+ {
47
+ ret = 321;
48
+ }
49
+ counter++;
50
+ return ret;
51
+ });
52
+ var formatter = new CauterizeFixedArrayFormatter(factory.Object);
53
+ var result = (TestFixedArray) formatter.Deserialize(stream, typeof (TestFixedArray));
54
+ Assert.AreEqual(0, result[0]);
55
+ Assert.AreEqual(101, result[1]);
56
+ Assert.AreEqual(321, result[2]);
57
+ }
58
+
59
+ [Test]
60
+ public void TestSerialize()
61
+ {
62
+ var stream = new MemoryStream();
63
+ var testObj = new TestFixedArray();
64
+ testObj[0] = 4;
65
+ testObj[2] = 8;
66
+ var sf = new Mock<ICauterizeTypeFormatter>();
67
+ var factory = new Mock<CauterizeTypeFormatterFactory>();
68
+ factory.Setup(f => f.GetFormatter(typeof (Int64))).Returns(sf.Object);
69
+ var counter = 0;
70
+ sf.Setup(f => f.Serialize(stream, It.IsAny<Int64>())).Callback((Stream str, object value) =>
71
+ {
72
+ if (counter == 0)
73
+ {
74
+ Assert.AreEqual(4, value);
75
+ }
76
+ else if (counter == 2)
77
+ {
78
+ Assert.AreEqual(8, value);
79
+ }
80
+ else
81
+ {
82
+ Assert.AreEqual(0, value);
83
+ }
84
+ counter++;
85
+ });
86
+ var formatter = new CauterizeFixedArrayFormatter(factory.Object);
87
+ formatter.Serialize(stream, testObj);
88
+ sf.VerifyAll();
89
+ }
90
+ }
91
+ }