aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2012-11-14 23:11:45 +0000
committerMike Buland <eichlan@xagasoft.com>2012-11-14 23:11:45 +0000
commit9d86cba840252b451c4b86d9ea16c821b6c97245 (patch)
tree2933bdc33347592633b721ff68840f177692ed96
parent630ae7ac1b172395777a0d4920055751226402f8 (diff)
downloadlibgats-9d86cba840252b451c4b86d9ea16c821b6c97245.tar.gz
libgats-9d86cba840252b451c4b86d9ea16c821b6c97245.tar.bz2
libgats-9d86cba840252b451c4b86d9ea16c821b6c97245.tar.xz
libgats-9d86cba840252b451c4b86d9ea16c821b6c97245.zip
Started a nice, native .net implementation in C#
-rw-r--r--c++-libbu++/src/tests/int.cpp5
-rw-r--r--cs-dotnet/default.bld25
-rw-r--r--cs-dotnet/src/gatsexception.cs12
-rw-r--r--cs-dotnet/src/gatsinteger.cs86
-rw-r--r--cs-dotnet/src/gatsinteger.dllbin0 -> 3072 bytes
-rw-r--r--cs-dotnet/src/gatsobject.cs10
-rw-r--r--cs-dotnet/src/tests/ints.cs16
7 files changed, 152 insertions, 2 deletions
diff --git a/c++-libbu++/src/tests/int.cpp b/c++-libbu++/src/tests/int.cpp
index 25ef831..fc411f4 100644
--- a/c++-libbu++/src/tests/int.cpp
+++ b/c++-libbu++/src/tests/int.cpp
@@ -9,6 +9,7 @@
9 9
10#include <bu/sio.h> 10#include <bu/sio.h>
11#include <bu/membuf.h> 11#include <bu/membuf.h>
12#include <bu/file.h>
12#include <stdlib.h> 13#include <stdlib.h>
13 14
14using namespace Bu; 15using namespace Bu;
@@ -31,12 +32,12 @@ void hexdump( char *dat, int iSize )
31 32
32int main( int argc, char *argv[] ) 33int main( int argc, char *argv[] )
33{ 34{
35 Bu::File mb("test.gats", Bu::File::WriteNew );
34 for( int j = 1; j < argc; j++ ) 36 for( int j = 1; j < argc; j++ )
35 { 37 {
36 int64_t i = strtoll( argv[j], NULL, 10 ); 38 int64_t i = strtoll( argv[j], NULL, 10 );
37 MemBuf mb;
38 Gats::Integer::writePackedInt( mb, i ); 39 Gats::Integer::writePackedInt( mb, i );
39 hexdump( mb.getString().getStr(), mb.getString().getSize() ); 40// hexdump( mb.getString().getStr(), mb.getString().getSize() );
40 } 41 }
41/* 42/*
42 sio << "Before: " << i << sio.nl; 43 sio << "Before: " << i << sio.nl;
diff --git a/cs-dotnet/default.bld b/cs-dotnet/default.bld
new file mode 100644
index 0000000..4bc324e
--- /dev/null
+++ b/cs-dotnet/default.bld
@@ -0,0 +1,25 @@
1
2target "libgats.dll"
3{
4 input files("src/*.cs");
5
6 profile "build"
7 {
8 execute("mcs -pkg:dotnet -target:library -out:${OUTPUT} ${INPUT}");
9 }
10}
11
12for TEST in files("src/tests/*.cs") do
13{
14 target TEST.replace("src/tests/","").replace(".cs",".exe")
15 {
16 input TEST;
17 requires "libgats.dll";
18
19 profile "build"
20 {
21 execute("mcs -pkg:dotnet -lib:. -r:libgats.dll -out:${OUTPUT} ${INPUT}");
22 }
23 }
24}
25
diff --git a/cs-dotnet/src/gatsexception.cs b/cs-dotnet/src/gatsexception.cs
new file mode 100644
index 0000000..ea665d0
--- /dev/null
+++ b/cs-dotnet/src/gatsexception.cs
@@ -0,0 +1,12 @@
1using System;
2
3namespace Com.Xagasoft.Gats
4{
5 public class GatsException : Exception
6 {
7 public GatsException( String sName ) :
8 base( sName )
9 {
10 }
11 }
12}
diff --git a/cs-dotnet/src/gatsinteger.cs b/cs-dotnet/src/gatsinteger.cs
new file mode 100644
index 0000000..cbb552e
--- /dev/null
+++ b/cs-dotnet/src/gatsinteger.cs
@@ -0,0 +1,86 @@
1using System.IO;
2
3namespace Com.Xagasoft.Gats
4{
5 public class GatsInteger : GatsObject
6 {
7 public long Value { get; set; }
8
9 public GatsInteger( long val=0 )
10 {
11 Value = val;
12 }
13
14 public override string ToString()
15 {
16 return Value.ToString();
17 }
18
19 public override void Read( Stream s, byte cType )
20 {
21 Value = ReadPackedInt( s );
22 }
23
24 public override void Write( Stream s )
25 {
26 s.WriteByte( (int)'i' );
27 WritePackedInt( s, Value );
28 }
29
30 public static long ReadPackedInt( Stream s )
31 {
32 int b;
33 long rOut = 0;
34 bool bNeg;
35
36 b = s.ReadByte();
37 if( b == -1 )
38 throw new GatsException("Premature end of stream encountered.");
39 bNeg = (b&0x40) == 0x40;
40 rOut |= ((long)b)&0x3F;
41 int c = 0;
42 while( (b&0x80) == 0x80 )
43 {
44 b = s.ReadByte();
45 if( b == -1 )
46 throw new GatsException("Premature end of stream encountered.");
47 rOut |= (long)(b&0x7F) << (6+7*(c++));
48 }
49 if( bNeg )
50 return -rOut;
51 return rOut;
52 }
53
54 public static void WritePackedInt( Stream s, long iIn )
55 {
56 byte b;
57
58 if( iIn < 0 )
59 {
60 iIn = -iIn;
61 b = (byte)(iIn&0x3F);
62 if( iIn > b )
63 b |= 0x80 | 0x40;
64 else
65 b |= 0x40;
66 }
67 else
68 {
69 b = (byte)(iIn&0x3F);
70 if( iIn > b )
71 b |= 0x80;
72 }
73 s.WriteByte( b );
74 iIn = iIn >> 6;
75
76 while( iIn > 0 )
77 {
78 b = (byte)(iIn&0x7F);
79 if( iIn > b )
80 b |= 0x80;
81 s.WriteByte( b );
82 iIn = iIn >> 7;
83 }
84 }
85 };
86}
diff --git a/cs-dotnet/src/gatsinteger.dll b/cs-dotnet/src/gatsinteger.dll
new file mode 100644
index 0000000..d3c8e79
--- /dev/null
+++ b/cs-dotnet/src/gatsinteger.dll
Binary files differ
diff --git a/cs-dotnet/src/gatsobject.cs b/cs-dotnet/src/gatsobject.cs
new file mode 100644
index 0000000..f782f95
--- /dev/null
+++ b/cs-dotnet/src/gatsobject.cs
@@ -0,0 +1,10 @@
1using System.IO;
2
3namespace Com.Xagasoft.Gats
4{
5 public abstract class GatsObject
6 {
7 public abstract void Read( Stream s, byte cType );
8 public abstract void Write( Stream s );
9 }
10}
diff --git a/cs-dotnet/src/tests/ints.cs b/cs-dotnet/src/tests/ints.cs
new file mode 100644
index 0000000..ea97820
--- /dev/null
+++ b/cs-dotnet/src/tests/ints.cs
@@ -0,0 +1,16 @@
1using System;
2using System.IO;
3using Com.Xagasoft.Gats;
4
5class Ints
6{
7 static void Main()
8 {
9 FileStream file = new FileStream("test.gats", FileMode.Open,
10 FileAccess.Write );
11 long iVal = 0xfffffe;
12 GatsInteger i = new GatsInteger( iVal );
13 i.Write( file );
14 Console.WriteLine("Read int: " + i.Value );
15 }
16}