diff options
| author | Mike Buland <eichlan@xagasoft.com> | 2012-11-15 19:22:26 +0000 |
|---|---|---|
| committer | Mike Buland <eichlan@xagasoft.com> | 2012-11-15 19:22:26 +0000 |
| commit | b9b5a5fc16e21387b3350260d2139b293bbcd2b0 (patch) | |
| tree | f7d7203af2efe8f41bbeeb8fcdd649c4ec3390c0 /cs-dotnet | |
| parent | f1e413e914b9f03607194757848bab1ed4f401a3 (diff) | |
| download | libgats-b9b5a5fc16e21387b3350260d2139b293bbcd2b0.tar.gz libgats-b9b5a5fc16e21387b3350260d2139b293bbcd2b0.tar.bz2 libgats-b9b5a5fc16e21387b3350260d2139b293bbcd2b0.tar.xz libgats-b9b5a5fc16e21387b3350260d2139b293bbcd2b0.zip | |
Much overriding was done, but GatsList works great. And just like a standard
.net list.
Diffstat (limited to 'cs-dotnet')
| -rw-r--r-- | cs-dotnet/src/gatslist.cs | 135 | ||||
| -rw-r--r-- | cs-dotnet/src/gatsobject.cs | 2 | ||||
| -rw-r--r-- | cs-dotnet/src/gatsstring.cs | 7 | ||||
| -rw-r--r-- | cs-dotnet/src/tests/lists.cs | 43 |
4 files changed, 185 insertions, 2 deletions
diff --git a/cs-dotnet/src/gatslist.cs b/cs-dotnet/src/gatslist.cs new file mode 100644 index 0000000..d111bac --- /dev/null +++ b/cs-dotnet/src/gatslist.cs | |||
| @@ -0,0 +1,135 @@ | |||
| 1 | using System; | ||
| 2 | using System.IO; | ||
| 3 | using System.Text; | ||
| 4 | using System.Collections; | ||
| 5 | using System.Collections.Generic; | ||
| 6 | |||
| 7 | namespace Com.Xagasoft.Gats | ||
| 8 | { | ||
| 9 | public class GatsList : GatsObject, IList<GatsObject>, | ||
| 10 | ICollection<GatsObject>, IEnumerable<GatsObject> | ||
| 11 | // IReadOnlyList<GatsObject>, IReadOnlyCollection<GatsObject>, | ||
| 12 | // These two are in .net 4.5, not 4.0, mono can't use them. | ||
| 13 | { | ||
| 14 | private List<GatsObject> Value = new List<GatsObject>(); | ||
| 15 | |||
| 16 | public GatsList() | ||
| 17 | { | ||
| 18 | } | ||
| 19 | |||
| 20 | public override string ToString() | ||
| 21 | { | ||
| 22 | StringBuilder bld = new StringBuilder(); | ||
| 23 | bld.Append("["); | ||
| 24 | for( int j = 0; j < Value.Count-1; j++ ) | ||
| 25 | { | ||
| 26 | bld.Append( Value[j] ); | ||
| 27 | bld.Append(", "); | ||
| 28 | } | ||
| 29 | bld.Append( Value[Value.Count-1] ); | ||
| 30 | bld.Append("]"); | ||
| 31 | return bld.ToString(); | ||
| 32 | } | ||
| 33 | |||
| 34 | public override void Read( Stream s, char type ) | ||
| 35 | { | ||
| 36 | for(;;) | ||
| 37 | { | ||
| 38 | GatsObject obj = GatsObject.Read( s ); | ||
| 39 | if( obj == null ) | ||
| 40 | break; | ||
| 41 | Value.Add( obj ); | ||
| 42 | } | ||
| 43 | } | ||
| 44 | |||
| 45 | public override void Write( Stream s ) | ||
| 46 | { | ||
| 47 | s.WriteByte( (int)'l' ); | ||
| 48 | foreach( GatsObject obj in Value ) | ||
| 49 | { | ||
| 50 | obj.Write( s ); | ||
| 51 | } | ||
| 52 | s.WriteByte( (int)'e' ); | ||
| 53 | } | ||
| 54 | |||
| 55 | // | ||
| 56 | // List interface overrides under here. | ||
| 57 | // | ||
| 58 | public int IndexOf( GatsObject obj ) | ||
| 59 | { | ||
| 60 | return Value.IndexOf( obj ); | ||
| 61 | } | ||
| 62 | |||
| 63 | public void Insert( int idx, GatsObject obj ) | ||
| 64 | { | ||
| 65 | Value.Insert( idx, obj ); | ||
| 66 | } | ||
| 67 | |||
| 68 | public void RemoveAt( int idx ) | ||
| 69 | { | ||
| 70 | Value.RemoveAt( idx ); | ||
| 71 | } | ||
| 72 | |||
| 73 | public GatsObject this[int idx] { | ||
| 74 | get { return this.Value[idx]; } | ||
| 75 | set { this.Value[idx] = value; } | ||
| 76 | } | ||
| 77 | |||
| 78 | public int Count { | ||
| 79 | get { return this.Value.Count; } | ||
| 80 | } | ||
| 81 | |||
| 82 | public bool IsReadOnly { | ||
| 83 | get { return false; } // this.Value.IsReadOnly; } | ||
| 84 | } | ||
| 85 | |||
| 86 | public void Add( GatsObject obj ) | ||
| 87 | { | ||
| 88 | Value.Add( obj ); | ||
| 89 | } | ||
| 90 | |||
| 91 | public void Clear() | ||
| 92 | { | ||
| 93 | Value.Clear(); | ||
| 94 | } | ||
| 95 | |||
| 96 | public bool Contains( GatsObject obj ) | ||
| 97 | { | ||
| 98 | return Value.Contains( obj ); | ||
| 99 | } | ||
| 100 | |||
| 101 | public void CopyTo( GatsObject[] result, int count ) | ||
| 102 | { | ||
| 103 | Value.CopyTo( result, count ); | ||
| 104 | } | ||
| 105 | |||
| 106 | public bool Remove( GatsObject obj ) | ||
| 107 | { | ||
| 108 | return Value.Remove( obj ); | ||
| 109 | } | ||
| 110 | |||
| 111 | IEnumerator<GatsObject> IEnumerable<GatsObject>.GetEnumerator() | ||
| 112 | { | ||
| 113 | return Value.GetEnumerator(); | ||
| 114 | } | ||
| 115 | |||
| 116 | IEnumerator IEnumerable.GetEnumerator() | ||
| 117 | { | ||
| 118 | return Value.GetEnumerator(); | ||
| 119 | } | ||
| 120 | |||
| 121 | public bool IsFixedSize { | ||
| 122 | get { return false; } // this.Value.IsFixedSize; } | ||
| 123 | } | ||
| 124 | |||
| 125 | public bool IsSynchronized { | ||
| 126 | get { return false; } // this.Value.IsSynchronized; } | ||
| 127 | } | ||
| 128 | |||
| 129 | public object SyncRoot { | ||
| 130 | get { return null; } // this.Value.SyncRoot; } | ||
| 131 | } | ||
| 132 | |||
| 133 | } | ||
| 134 | } | ||
| 135 | |||
diff --git a/cs-dotnet/src/gatsobject.cs b/cs-dotnet/src/gatsobject.cs index a48a464..5e76a6c 100644 --- a/cs-dotnet/src/gatsobject.cs +++ b/cs-dotnet/src/gatsobject.cs | |||
| @@ -30,7 +30,7 @@ namespace Com.Xagasoft.Gats | |||
| 30 | break; | 30 | break; |
| 31 | 31 | ||
| 32 | case 'l': | 32 | case 'l': |
| 33 | // goRet = new GatsList(); | 33 | goRet = new GatsList(); |
| 34 | break; | 34 | break; |
| 35 | 35 | ||
| 36 | case 'd': | 36 | case 'd': |
diff --git a/cs-dotnet/src/gatsstring.cs b/cs-dotnet/src/gatsstring.cs index 30b0afb..47b63ed 100644 --- a/cs-dotnet/src/gatsstring.cs +++ b/cs-dotnet/src/gatsstring.cs | |||
| @@ -15,9 +15,14 @@ namespace Com.Xagasoft.Gats | |||
| 15 | Value = val; | 15 | Value = val; |
| 16 | } | 16 | } |
| 17 | 17 | ||
| 18 | public GatsString( string val ) | ||
| 19 | { | ||
| 20 | Value = System.Text.Encoding.UTF8.GetBytes( val ); | ||
| 21 | } | ||
| 22 | |||
| 18 | public override string ToString() | 23 | public override string ToString() |
| 19 | { | 24 | { |
| 20 | return Value.ToString(); | 25 | return System.Text.Encoding.UTF8.GetString( Value ); |
| 21 | } | 26 | } |
| 22 | 27 | ||
| 23 | public override void Read( Stream s, char cType ) | 28 | public override void Read( Stream s, char cType ) |
diff --git a/cs-dotnet/src/tests/lists.cs b/cs-dotnet/src/tests/lists.cs new file mode 100644 index 0000000..8d12bf9 --- /dev/null +++ b/cs-dotnet/src/tests/lists.cs | |||
| @@ -0,0 +1,43 @@ | |||
| 1 | using System; | ||
| 2 | using System.IO; | ||
| 3 | using Com.Xagasoft.Gats; | ||
| 4 | |||
| 5 | public class Test | ||
| 6 | { | ||
| 7 | public static void Write( GatsObject o, Stream s ) | ||
| 8 | { | ||
| 9 | o.Write( s ); | ||
| 10 | Console.WriteLine("Wrote: " + o ); | ||
| 11 | } | ||
| 12 | |||
| 13 | public static void Read( Stream s ) | ||
| 14 | { | ||
| 15 | GatsObject o = GatsObject.Read( s ); | ||
| 16 | Console.WriteLine("Read type: " + o.GetType() ); | ||
| 17 | Console.WriteLine("Read vlaue: " + o ); | ||
| 18 | } | ||
| 19 | |||
| 20 | public static void Main() | ||
| 21 | { | ||
| 22 | MemoryStream ms = new MemoryStream(); | ||
| 23 | GatsList l = new GatsList(); | ||
| 24 | l.Add( new GatsFloat( Math.PI ) ); | ||
| 25 | l.Add( new GatsInteger( 1337 ) ); | ||
| 26 | l.Add( new GatsString("Hello") ); | ||
| 27 | Write( l, ms ); | ||
| 28 | ms.Seek( 0, SeekOrigin.Begin ); | ||
| 29 | Read( ms ); | ||
| 30 | /* | ||
| 31 | try | ||
| 32 | { | ||
| 33 | FileStream fs = new FileStream("float.gats", FileMode.Open, | ||
| 34 | FileAccess.Read ); | ||
| 35 | Read( fs ); | ||
| 36 | } | ||
| 37 | catch( Exception e ) | ||
| 38 | { | ||
| 39 | Console.WriteLine("Can't test files: " + e.Message ); | ||
| 40 | } | ||
| 41 | */ | ||
| 42 | } | ||
| 43 | } | ||
