From 05041bf4d942a96ce627f2b799be45a285a535fb Mon Sep 17 00:00:00 2001
From: Anders Blomdell <anders.blomdell@control.lth.se>
Date: Thu, 16 May 2013 20:30:36 +0200
Subject: [PATCH] Added StreamWriter and StreamReader to python library.
 Updated wiki_example to use StreamReader.

---
 .bzrignore                               |  6 +++++
 Makefile                                 |  2 +-
 examples/Makefile                        |  3 ++-
 examples/wiki_example/example_decoder.py | 23 +-----------------
 lib/python/labcomm/StreamReader.py       | 23 ++++++++++++++++++
 lib/python/labcomm/StreamWriter.py       | 19 +++++++++++++++
 lib/python/labcomm/__init__.py           |  3 +++
 test/test_encoder_decoder.py             | 30 ++----------------------
 8 files changed, 57 insertions(+), 52 deletions(-)
 create mode 100644 lib/python/labcomm/StreamReader.py
 create mode 100644 lib/python/labcomm/StreamWriter.py

diff --git a/.bzrignore b/.bzrignore
index 06ec666..dc2d51e 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -25,3 +25,9 @@ example.h
 example.py
 examples/wiki_example/example.encoded
 example.encoded
+examples/simple/*.class
+examples/simple/encoded_data
+examples/simple/example_decoder
+examples/simple/example_encoder
+lib/c/test/test_labcomm_basic_type_encoding
+lib/c/test/test_labcomm_generated_encoding
diff --git a/Makefile b/Makefile
index 4bb6ec7..e9388b0 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-SUBDIRS=compiler lib examples test
+SUBDIRS=compiler lib test examples
 export LABCOMM_JAR=$(shell pwd)/compiler/labComm.jar
 export LABCOMM=java -jar $(LABCOMM_JAR) 
 
diff --git a/examples/Makefile b/examples/Makefile
index a8a26d7..f9a5511 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -2,7 +2,8 @@ all:
 	echo To be done...
 
 test:
-	echo To be done...
+	echo More to be done...
+	cd simple ; sh compile.sh && sh run.sh
 
 clean:
 	echo To be done...
diff --git a/examples/wiki_example/example_decoder.py b/examples/wiki_example/example_decoder.py
index 3d40cf4..d729145 100755
--- a/examples/wiki_example/example_decoder.py
+++ b/examples/wiki_example/example_decoder.py
@@ -3,29 +3,8 @@
 import labcomm
 import sys
 
-class FileReader:
-    def __init__(self, name):
-        self.f = open(name)
-        pass
-
-    def start(self, decoder, version):
-        other_version = decoder.decode_string()
-        if version != other_version:
-            raise Exception("LabComm version mismatch %s != %s" %
-                            (version, other_version))
-        pass
-
-    def read(self, count):
-        s = self.f.read(count)
-        if len(s) == 0:
-            raise Exception("EOF")
-        return s
-
-    def mark(self, value, decl):
-        pass
-        
 if __name__ == "__main__":
-    d = labcomm.Decoder(FileReader(sys.argv[1]))
+    d = labcomm.Decoder(labcomm.StreamReader(open(sys.argv[1])))
 
     while True:
         try:
diff --git a/lib/python/labcomm/StreamReader.py b/lib/python/labcomm/StreamReader.py
new file mode 100644
index 0000000..08c97ab
--- /dev/null
+++ b/lib/python/labcomm/StreamReader.py
@@ -0,0 +1,23 @@
+class StreamReader:
+
+    def __init__(self, stream):
+        self.stream = stream
+        pass
+
+    def start(self, decoder, version):
+        other_version = decoder.decode_string()
+        if version != other_version:
+            raise Exception("LabComm version mismatch %s != %s" %
+                            (version, other_version))
+        pass
+
+    def read(self, count):
+        result = self.stream.read(count)
+        if len(result) == 0:
+            raise EOFError()
+        return result
+
+    def mark(self, value, decl):
+        pass
+        
+    pass
diff --git a/lib/python/labcomm/StreamWriter.py b/lib/python/labcomm/StreamWriter.py
new file mode 100644
index 0000000..ae57c96
--- /dev/null
+++ b/lib/python/labcomm/StreamWriter.py
@@ -0,0 +1,19 @@
+class StreamWriter:
+    
+    def __init__(self, stream):
+        self.stream = stream
+        pass
+            
+    def start(self, encoder, version):
+        encoder.encode_string(version)
+        pass
+    
+    def write(self, data):
+        self.stream.write(data)
+        pass
+
+    def mark(self):
+        self.stream.flush()
+        pass
+
+    pass
diff --git a/lib/python/labcomm/__init__.py b/lib/python/labcomm/__init__.py
index 563171e..52a5911 100644
--- a/lib/python/labcomm/__init__.py
+++ b/lib/python/labcomm/__init__.py
@@ -1,5 +1,8 @@
 import labcomm.LabComm
     
+from labcomm.StreamReader import StreamReader
+from labcomm.StreamWriter import StreamWriter
+
 Decoder = labcomm.LabComm.Decoder
 Encoder = labcomm.LabComm.Encoder
 
diff --git a/test/test_encoder_decoder.py b/test/test_encoder_decoder.py
index 6d8d4bc..acd08e5 100755
--- a/test/test_encoder_decoder.py
+++ b/test/test_encoder_decoder.py
@@ -127,18 +127,7 @@ class Test:
         self.next = threading.Semaphore(0)
         decoder = threading.Thread(target=self.decode, args=(p.stdout,))
         decoder.start()
-        class Writer:
-            def start(self, encoder, version):
-                encoder.encode_string(version)
-                pass
-            def write(self, data):
-                p.stdin.write(data)
-                pass
-            def mark(self):
-                p.stdin.flush()
-                pass
-            pass
-        encoder = labcomm.Encoder(Writer())
+        encoder = labcomm.Encoder(labcomm.StreamWriter(p.stdin))
         for name,signature in self.signatures:
             encoder.add_decl(signature)
             pass
@@ -164,22 +153,7 @@ class Test:
         pass
 
     def decode(self, f):
-        class Reader:
-            def start(self, decoder, version):
-                other_version = decoder.decode_string()
-                if version != other_version:
-                    raise Exception("LabComm version mismatch %s != %s" %
-                                    (version, other_version))
-                pass
-            def read(self, count):
-                result = f.read(count)
-                if len(result) == 0:
-                    raise EOFError()
-                return result
-            def mark(self, value, decl):
-                pass
-            pass
-        decoder = labcomm.Decoder(Reader())
+        decoder = labcomm.Decoder(labcomm.StreamReader(f))
         try:
             while True:
                 value,decl = decoder.decode()
-- 
GitLab