aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2012-11-09 17:20:11 +0000
committerMike Buland <eichlan@xagasoft.com>2012-11-09 17:20:11 +0000
commitd534a56d95bca7bdd812be024d9eacba4734e2b7 (patch)
treef9b98ee2b80e645a7b54e7934882be6c9f73c165
parent61ccc86fdf06f12cb72a8b7e65286f812cf62154 (diff)
downloadlibgats-d534a56d95bca7bdd812be024d9eacba4734e2b7.tar.gz
libgats-d534a56d95bca7bdd812be024d9eacba4734e2b7.tar.bz2
libgats-d534a56d95bca7bdd812be024d9eacba4734e2b7.tar.xz
libgats-d534a56d95bca7bdd812be024d9eacba4734e2b7.zip
Many changes: tabconv'd the C++ code, added a license, BSD, and docs.
-rw-r--r--LICENSE28
-rw-r--r--README.md115
-rw-r--r--c++-libbu++/default.bld100
-rw-r--r--c++-libbu++/mingw.bld110
-rw-r--r--c++-libbu++/src/boolean.cpp47
-rw-r--r--c++-libbu++/src/boolean.h43
-rw-r--r--c++-libbu++/src/dictionary.cpp373
-rw-r--r--c++-libbu++/src/dictionary.h107
-rw-r--r--c++-libbu++/src/float.cpp193
-rw-r--r--c++-libbu++/src/float.h37
-rw-r--r--c++-libbu++/src/gatsc/main.cpp99
-rw-r--r--c++-libbu++/src/gatscon/clientthread.cpp43
-rw-r--r--c++-libbu++/src/gatscon/clientthread.h29
-rw-r--r--c++-libbu++/src/gatscon/clientwidget.cpp95
-rw-r--r--c++-libbu++/src/gatscon/clientwidget.h23
-rw-r--r--c++-libbu++/src/gatscon/connectdlg.cpp15
-rw-r--r--c++-libbu++/src/gatscon/connectdlg.h17
-rw-r--r--c++-libbu++/src/gatscon/filewidget.cpp75
-rw-r--r--c++-libbu++/src/gatscon/filewidget.h23
-rw-r--r--c++-libbu++/src/gatscon/gatstotree.cpp115
-rw-r--r--c++-libbu++/src/gatscon/gatstotree.h21
-rw-r--r--c++-libbu++/src/gatscon/iobase.cpp7
-rw-r--r--c++-libbu++/src/gatscon/iobase.h9
-rw-r--r--c++-libbu++/src/gatscon/main.cpp15
-rw-r--r--c++-libbu++/src/gatscon/mainwnd.cpp149
-rw-r--r--c++-libbu++/src/gatscon/mainwnd.h31
-rw-r--r--c++-libbu++/src/gatscon/proxythread.cpp113
-rw-r--r--c++-libbu++/src/gatscon/proxythread.h55
-rw-r--r--c++-libbu++/src/gatscon/proxywidget.cpp169
-rw-r--r--c++-libbu++/src/gatscon/proxywidget.h31
-rw-r--r--c++-libbu++/src/gatscon/setupproxydlg.cpp17
-rw-r--r--c++-libbu++/src/gatscon/setupproxydlg.h19
-rw-r--r--c++-libbu++/src/gatscon/treetogats.cpp89
-rw-r--r--c++-libbu++/src/gatscon/treetogats.h9
-rw-r--r--c++-libbu++/src/gatsstream.cpp165
-rw-r--r--c++-libbu++/src/gatsstream.h97
-rw-r--r--c++-libbu++/src/integer.cpp21
-rw-r--r--c++-libbu++/src/integer.h147
-rw-r--r--c++-libbu++/src/list.cpp139
-rw-r--r--c++-libbu++/src/list.h95
-rw-r--r--c++-libbu++/src/null.cpp15
-rw-r--r--c++-libbu++/src/null.h27
-rw-r--r--c++-libbu++/src/object.cpp503
-rw-r--r--c++-libbu++/src/object.h83
-rw-r--r--c++-libbu++/src/protocolgats.cpp63
-rw-r--r--c++-libbu++/src/protocolgats.h37
-rw-r--r--c++-libbu++/src/string.cpp47
-rw-r--r--c++-libbu++/src/string.h45
-rw-r--r--c++-libbu++/src/tests/clone.cpp21
-rw-r--r--c++-libbu++/src/tests/dump.cpp41
-rw-r--r--c++-libbu++/src/tests/int.cpp65
-rw-r--r--c++-libbu++/src/types.h7
-rw-r--r--c++-qt/src/boolean.cpp47
-rw-r--r--c++-qt/src/boolean.h47
-rw-r--r--c++-qt/src/dictionary.cpp351
-rw-r--r--c++-qt/src/dictionary.h109
-rw-r--r--c++-qt/src/float.cpp193
-rw-r--r--c++-qt/src/float.h47
-rw-r--r--c++-qt/src/gatsstream.cpp195
-rw-r--r--c++-qt/src/gatsstream.h113
-rw-r--r--c++-qt/src/integer.cpp21
-rw-r--r--c++-qt/src/integer.h151
-rw-r--r--c++-qt/src/list.cpp139
-rw-r--r--c++-qt/src/list.h99
-rw-r--r--c++-qt/src/null.cpp13
-rw-r--r--c++-qt/src/null.h29
-rw-r--r--c++-qt/src/object.cpp463
-rw-r--r--c++-qt/src/object.h83
-rw-r--r--c++-qt/src/string.cpp41
-rw-r--r--c++-qt/src/string.h49
-rw-r--r--c++-qt/src/types.h7
-rw-r--r--c++-qt/tests/echo/main.cpp15
-rw-r--r--c++-qt/tests/echo/mainwnd.cpp39
-rw-r--r--c++-qt/tests/echo/mainwnd.h19
-rw-r--r--java/FileExample.java7
-rw-r--r--java/com/xagasoft/gats/GatsBoolean.java7
-rw-r--r--java/com/xagasoft/gats/GatsDictionary.java7
-rw-r--r--java/com/xagasoft/gats/GatsFloat.java7
-rw-r--r--java/com/xagasoft/gats/GatsInputStream.java7
-rw-r--r--java/com/xagasoft/gats/GatsInteger.java7
-rw-r--r--java/com/xagasoft/gats/GatsList.java7
-rw-r--r--java/com/xagasoft/gats/GatsNull.java7
-rw-r--r--java/com/xagasoft/gats/GatsObject.java7
-rw-r--r--java/com/xagasoft/gats/GatsOutputStream.java7
-rw-r--r--java/com/xagasoft/gats/GatsString.java7
-rw-r--r--java/com/xagasoft/gats/KeyNotFoundException.java7
-rw-r--r--java/com/xagasoft/gats/package-info.java7
-rw-r--r--php/phpgats.php7
-rw-r--r--php/phpgats2.php7
-rwxr-xr-xpython/client.py6
-rw-r--r--python/gats.py6
-rwxr-xr-xpython/server.py6
-rwxr-xr-xpython/test.py6
93 files changed, 3600 insertions, 2838 deletions
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..5eaeb9c
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,28 @@
1Copyright (C) 2007-2012 Xagasoft
2
3All rights reserved.
4
5Redistribution and use in source and binary forms, with or without modification,
6are permitted provided that the following conditions are met:
7
8 - Redistributions of source code must retain the above copyright notice,
9 this list of conditions and the following disclaimer.
10
11 - Redistributions in binary form must reproduce the above copyright notice,
12 this list of conditions and the following disclaimer in the documentation
13 and/or other materials provided with the distribution.
14
15 - Neither the name of Xagasoft nor the names of its contributors
16 may be used to endorse or promote products derived from this software
17 without specific prior written permission.
18
19THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
23ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..f5302a8
--- /dev/null
+++ b/README.md
@@ -0,0 +1,115 @@
1# Generalized Agile Transport System (GATS)
2
3GATS is a data encoding format, as well as a set of libraries for reading and
4writing data in that format. It's a structured format reminiscent of a binary
5json, but with some extra cool features.
6
7 * All numbers (integers and floating point) are stored in an arbitrary
8 precision format which takes up the least amount of space it can.
9 * Unlike textual formats (like json, xml, etc.) floating point numbers are
10 stored exactly, the exact number you write in is the exact number you read
11 out.
12 * All formats stored are machine independent, you can read and write them on
13 any architecture, any endianness and they will always be the same. No more
14 encoding worries.
15 * There are a number of data types you can use to make up data structures:
16 * Dictionaries
17 * Lists
18 * Integers
19 * Floats
20 * Strings (binary 8-bit strings, perfect for UTF-8)
21 * Booleans
22 * Nulls
23
24# License
25
26GATS is distributed under a new-BSD type license. This is fairly permissive,
27but if you require other licensing options feel free to contact us.
28
29# Uses
30
31GATS was originally intended for use in internet protocols, and is great for
32that purpose. Used correctly it allows you to create efficient yet highly
33malleable protocols with very little extra effort.
34
35However, you can certainly use it for other purposes such as serializing data
36for storage, and inter-process communication. In fact, with the different
37language bindings available, sometimes GATS may be one of the easier ways to
38allow, say, a PHP web service to communicate with a custom C++ executable or
39python program.
40
41# Languages/Libraries Supported
42
43At the moment we actively maintain libraries for C++, java, php, and python.
44Other languages and libraries are welcomed. Here's a little info on each
45target directory:
46
47 * ''c++-libbu++'' - The original libgats implementation. Works using libbu++
48 data types and streams. You need to have libbu++ and Xagasoft build in
49 order to build this version.
50 * ''c++-qt'' - A version written using Qt data types. This version builds using
51 qmake, so if you're using Qt you already have everything you need. Also
52 features handy signals & slots to make event driven networking even easier!
53 * ''java'' - A library using the Java native interfaces, everything looks and
54 works exactly how you would expect it should. There is a Xagasoft Build
55 script to build a jar file, but it's simple enough that a single javac
56 command can build it all, or just import the code into your project directly.
57 This java version has been used on desktops and android devices.
58 * ''php'' - There are two libraries for working with php, the first defines a
59 set of classes for fine control over the format, sometimes this is necessary
60 as php's types are a little loose. The second simply uses php native types
61 like array() as data transport. The second option is usually the much easier
62 to use, but doesn't always get the encoding correct for all inputs.
63 * ''python'' - These work like other serialization mechanisms in Python like
64 pickle, json, shelve, and marshal. It exposes the functions load, dump,
65 loads, dumps, and also the handy helpers recv and send for working with
66 sockets. The Python implementation returns and transmits native Python
67 data types, which makes life pretty easy. To use this version simply copy
68 gats.py to your project.
69
70# Basic Operation
71
72The way GATS works is dictated by the format, so it works similarly in every
73implementation, although they each have slightly different mechanics. When
74encoding GATS you always encode each object in it's own "GATS packet." A GATS
75packet has a very simple header which includes the size of the packet to make
76parsing fast and efficient.
77
78Each packet can contain a single root object. It can be any type, but for most
79protocols a dictionary is a great choice for the root object.
80
81The format is designed to make it very easy to work with various encoding,
82packing, and encryption systems. The reader, by default, will skip all leading
83zero bytes that come before a valid GATS packet, and will stop processing
84precisely at the end of a valid GATS packet.
85
86Skipping leading zeros makes it easy to work in environments where padding may
87be required. You can use the simplest of all padding schemes (pad with zeros)
88and it will work seamlessly with GATS.
89
90Since the reader always reads exactly the number of bytes it needs, it's very
91easy to embed GATS packets in other streams, or read them sequentially as fast
92as you can from a socket.
93
94## A Note About Strings
95
96All strings in GATS are simply sequences of 8-bit bytes. There is no
97overarching encoding that is dictated by the format. When using GATS it is
98good to specify how you are encoding your text data, we recommend Unicode.
99There is a possibility that a future version of GATS will include a separate
100Unicode String data type, but for now it's important to remember this.
101
102For this reason, we also recommend making the keys in all dictionaries 7-bit
103UTF-8 compatible ASCII/Latin1. This isn't required of course, but it makes
104things a bit easier.
105
106# Speed vs Size
107
108GATS objects are, on average, smaller than storing in other binary formats, and
109can be much smaller than textual formats by virtue of storing only as many
110bytes as necessary for integers and floats. This also means that GATS requires
111more processing than fixed field binary formats, but interestingly not quite as
112much as text formats like json. The processing we do on floats is actually
113roughly comparable in many ways to text processing, although with fewer steps.
114
115
diff --git a/c++-libbu++/default.bld b/c++-libbu++/default.bld
index 676c63e..5a09a55 100644
--- a/c++-libbu++/default.bld
+++ b/c++-libbu++/default.bld
@@ -3,87 +3,87 @@ execute("mkdir -p tmp");
3 3
4action "default" 4action "default"
5{ 5{
6 build: [targets("header-links"), "libgats.a", "gatsc"]; 6 build: [targets("header-links"), "libgats.a", "gatsc"];
7} 7}
8 8
9action "all" 9action "all"
10{ 10{
11 build: [targets("header-links"), "libgats.a", targets("headers"), 11 build: [targets("header-links"), "libgats.a", targets("headers"),
12 targets()]; 12 targets()];
13} 13}
14 14
15action "gatscon" 15action "gatscon"
16{ 16{
17 build: [targets("header-links"), "libgats.a", 17 build: [targets("header-links"), "libgats.a",
18 targets("headers"), "gatscon"]; 18 targets("headers"), "gatscon"];
19} 19}
20 20
21CXXFLAGS += "-ggdb -Wall"; 21CXXFLAGS += "-ggdb -Wall";
22 22
23target [files("src/*.h").replace("src/", "gats/"), "gats/version.h"] 23target [files("src/*.h").replace("src/", "gats/"), "gats/version.h"]
24{ 24{
25 tag "header-links"; 25 tag "header-links";
26 display "symlink"; 26 display "symlink";
27 input OUTPUT.replace("gats/","src/"); 27 input OUTPUT.replace("gats/","src/");
28 profile "build" 28 profile "build"
29 { 29 {
30 execute("ln -s ../${INPUT} ${OUTPUT}"); 30 execute("ln -s ../${INPUT} ${OUTPUT}");
31 } 31 }
32} 32}
33 33
34target "src/version.h" 34target "src/version.h"
35{ 35{
36 input ".svn"; 36 input ".svn";
37 display "svnver"; 37 display "svnver";
38 profile "build" 38 profile "build"
39 { 39 {
40 execute("echo Revision number: `svnversion`; echo \\#ifndef LIBGATS_VC_ID > ${OUTPUT}; echo \\#define LIBGATS_VC_ID \\\"`svnversion`\\\" >> ${OUTPUT}; echo \\#endif >> ${OUTPUT}"); 40 execute("echo Revision number: `svnversion`; echo \\#ifndef LIBGATS_VC_ID > ${OUTPUT}; echo \\#define LIBGATS_VC_ID \\\"`svnversion`\\\" >> ${OUTPUT}; echo \\#endif >> ${OUTPUT}");
41 } 41 }
42} 42}
43 43
44target "libgats.a" 44target "libgats.a"
45{ 45{
46 rule "lib"; 46 rule "lib";
47 input files("src/*.cpp"); 47 input files("src/*.cpp");
48 CXXFLAGS += "-I. -Ilibbu++ -fPIC"; 48 CXXFLAGS += "-I. -Ilibbu++ -fPIC";
49} 49}
50 50
51target "gatsc" 51target "gatsc"
52{ 52{
53 rule "exe"; 53 rule "exe";
54 input files("src/gatsc/*.cpp"); 54 input files("src/gatsc/*.cpp");
55 CXXFLAGS += "-I. -Ilibbu++"; 55 CXXFLAGS += "-I. -Ilibbu++";
56 LDFLAGS += "-L. -lgats -lbu++"; 56 LDFLAGS += "-L. -lgats -lbu++";
57} 57}
58 58
59target files("src/tests/*.cpp").replace("src/","").replace(".cpp","") 59target files("src/tests/*.cpp").replace("src/","").replace(".cpp","")
60{ 60{
61 input "src/${OUTPUT}.cpp"; 61 input "src/${OUTPUT}.cpp";
62 rule "exe"; 62 rule "exe";
63 tag ["tests", "general tests"]; 63 tag ["tests", "general tests"];
64 CXXFLAGS += "-I. -Ilibbu++"; 64 CXXFLAGS += "-I. -Ilibbu++";
65 LDFLAGS += "-L. -lgats -Llibbu++ -lbu++"; 65 LDFLAGS += "-L. -lgats -Llibbu++ -lbu++";
66} 66}
67 67
68target files("src/unit/*.unit").replace("src/","").replace(".unit","") 68target files("src/unit/*.unit").replace("src/","").replace(".unit","")
69{ 69{
70 input "src/${OUTPUT}.unit"; 70 input "src/${OUTPUT}.unit";
71 rule "exe"; 71 rule "exe";
72 requires "libbu++.a"; 72 requires "libbu++.a";
73 tag ["tests", "unit tests"]; 73 tag ["tests", "unit tests"];
74 CXXFLAGS += "-I."; 74 CXXFLAGS += "-I.";
75 LDFLAGS += "-L. -lgats -lbu++"; 75 LDFLAGS += "-L. -lgats -lbu++";
76} 76}
77 77
78rule "unit" 78rule "unit"
79{ 79{
80 input "*.unit"; 80 input "*.unit";
81 output INPUT.replace(".unit", ".cpp"); 81 output INPUT.replace(".unit", ".cpp");
82 82
83 profile "build" 83 profile "build"
84 { 84 {
85 execute("../libbu++/mkunit \"${INPUT}\" \"${OUTPUT}\""); 85 execute("../libbu++/mkunit \"${INPUT}\" \"${OUTPUT}\"");
86 } 86 }
87} 87}
88 88
89include "qt4.bld"; 89include "qt4.bld";
@@ -95,15 +95,15 @@ UI_DIR = "tmp";
95 95
96target "gatscon" 96target "gatscon"
97{ 97{
98 input files("src/gatscon/*.h", "src/gatscon/*.cpp", "src/gatscon/*.ui"); 98 input files("src/gatscon/*.h", "src/gatscon/*.cpp", "src/gatscon/*.ui");
99 rule "exe"; 99 rule "exe";
100 100
101 CXXFLAGS += qt_getCXXFLAGS(); 101 CXXFLAGS += qt_getCXXFLAGS();
102 LDFLAGS += qt_getLDFLAGS(); 102 LDFLAGS += qt_getLDFLAGS();
103 103
104 CXXFLAGS += "-Isrc/gatscon"; 104 CXXFLAGS += "-Isrc/gatscon";
105 105
106 CXXFLAGS += "-I. -Ilibbu++ -Itmp -Ilibzamui/src"; 106 CXXFLAGS += "-I. -Ilibbu++ -Itmp -Ilibzamui/src";
107 LDFLAGS += "-L. -lgats -Llibbu++ -lbu++ -Llibzamui -lzamui"; 107 LDFLAGS += "-L. -lgats -Llibbu++ -lbu++ -Llibzamui -lzamui";
108} 108}
109 109
diff --git a/c++-libbu++/mingw.bld b/c++-libbu++/mingw.bld
index 9ed7af3..a59018f 100644
--- a/c++-libbu++/mingw.bld
+++ b/c++-libbu++/mingw.bld
@@ -8,99 +8,99 @@ CXXFLAGS += "-ggdb -W -Wall";
8 8
9action "default" 9action "default"
10{ 10{
11 build: [targets("header-links"), "libgatswin.a"]; 11 build: [targets("header-links"), "libgatswin.a"];
12} 12}
13 13
14action "gatscon" 14action "gatscon"
15{ 15{
16 build: ["gatscon.exe"]; 16 build: ["gatscon.exe"];
17} 17}
18 18
19target files("src/*.h").replace("src/", "gats/") 19target files("src/*.h").replace("src/", "gats/")
20{ 20{
21 tag "header-links"; 21 tag "header-links";
22 display "symlink"; 22 display "symlink";
23 input OUTPUT.replace("gats/","src/"); 23 input OUTPUT.replace("gats/","src/");
24 profile "build" 24 profile "build"
25 { 25 {
26 execute("mkdir -p $(dirname ${OUTPUT}); ln -s ../${INPUT} ${OUTPUT}"); 26 execute("mkdir -p $(dirname ${OUTPUT}); ln -s ../${INPUT} ${OUTPUT}");
27 } 27 }
28} 28}
29target files("src/compat/*.h").replace("src/", "gats/") 29target files("src/compat/*.h").replace("src/", "gats/")
30{ 30{
31 tag "header-links"; 31 tag "header-links";
32 display "symlink"; 32 display "symlink";
33 input OUTPUT.replace("gats/","src/"); 33 input OUTPUT.replace("gats/","src/");
34 profile "build" 34 profile "build"
35 { 35 {
36 execute("mkdir -p $(dirname ${OUTPUT}); ln -s ../../${INPUT} ${OUTPUT}"); 36 execute("mkdir -p $(dirname ${OUTPUT}); ln -s ../../${INPUT} ${OUTPUT}");
37 } 37 }
38} 38}
39 39
40target "libgatswin.a" 40target "libgatswin.a"
41{ 41{
42 input files("src/*.cpp"); 42 input files("src/*.cpp");
43 rule "lib"; 43 rule "lib";
44 CXXFLAGS += "-I. -Ilibbu++"; 44 CXXFLAGS += "-I. -Ilibbu++";
45} 45}
46 46
47target "gatscon.exe" 47target "gatscon.exe"
48{ 48{
49 rule "winexe"; 49 rule "winexe";
50 tag "exe"; 50 tag "exe";
51 input files("src/gatscon/*.cpp", "src/gatscon/*.ui", "src/gatscon/*.h", 51 input files("src/gatscon/*.cpp", "src/gatscon/*.ui", "src/gatscon/*.h",
52 "tmp/*.cpp"); 52 "tmp/*.cpp");
53 53
54 CXXFLAGS += "-O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -IC:/Qt/qt-4/include/QtCore -IC:/Qt/qt-4/include/QtGui -IC:/Qt/qt-4/include/QtSvg -IC:/Qt/qt-4/include -IC:/Qt/qt-4/mkspecs/default -Ilibbu++ -Isrc/gatscon -I. -Ilibzamui/src"; 54 CXXFLAGS += "-O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -IC:/Qt/qt-4/include/QtCore -IC:/Qt/qt-4/include/QtGui -IC:/Qt/qt-4/include/QtSvg -IC:/Qt/qt-4/include -IC:/Qt/qt-4/mkspecs/default -Ilibbu++ -Isrc/gatscon -I. -Ilibzamui/src";
55 55
56 LDFLAGS += "-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -LC:/Qt/qt-4/lib -Llibbu++ -lgatswin -lbu++win -L. -Llibzamui -lzamuiwin -lmingw32 -lqtmain -lQtGui4 -lQtCore4 -lQtSvg4 -lwsock32"; 56 LDFLAGS += "-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -LC:/Qt/qt-4/lib -Llibbu++ -lgatswin -lbu++win -L. -Llibzamui -lzamuiwin -lmingw32 -lqtmain -lQtGui4 -lQtCore4 -lQtSvg4 -lwsock32";
57 57
58 CXXFLAGS += "-ggdb -Itmp"; 58 CXXFLAGS += "-ggdb -Itmp";
59} 59}
60 60
61function cppToWinObj() 61function cppToWinObj()
62{ 62{
63 if OBJ_DIR == null then 63 if OBJ_DIR == null then
64 { 64 {
65 return INPUT.regex("\\.cpp$", ".win_o"); 65 return INPUT.regex("\\.cpp$", ".win_o");
66 } 66 }
67 else 67 else
68 { 68 {
69 return OBJ_DIR + "/" + INPUT.fileName().regex("\\.cpp$", ".win_o"); 69 return OBJ_DIR + "/" + INPUT.fileName().regex("\\.cpp$", ".win_o");
70 } 70 }
71 71
72} 72}
73 73
74rule "lib" 74rule "lib"
75{ 75{
76 input "*.win_o"; 76 input "*.win_o";
77 profile "build" 77 profile "build"
78 { 78 {
79 execute("wine C:/MinGW/bin/ar.exe cr ${OUTPUT} ${INPUT}"); 79 execute("wine C:/MinGW/bin/ar.exe cr ${OUTPUT} ${INPUT}");
80 } 80 }
81} 81}
82 82
83rule "wincpp" 83rule "wincpp"
84{ 84{
85 input "*.cpp"; 85 input "*.cpp";
86 output INPUT.cppToWinObj(); 86 output INPUT.cppToWinObj();
87 //requires getMakeDeps("wine C:/MinGW/bin/g++.exe ${CXXFLAGS} -M ${INPUT}"); 87 //requires getMakeDeps("wine C:/MinGW/bin/g++.exe ${CXXFLAGS} -M ${INPUT}");
88 profile "build" 88 profile "build"
89 { 89 {
90 execute("wine C:/MinGW/bin/g++.exe ${CXXFLAGS} -c -o ${OUTPUT} ${INPUT}", "g++"); 90 execute("wine C:/MinGW/bin/g++.exe ${CXXFLAGS} -c -o ${OUTPUT} ${INPUT}", "g++");
91 } 91 }
92} 92}
93 93
94rule "winexe" 94rule "winexe"
95{ 95{
96 input "*.win_o"; 96 input "*.win_o";
97 profile "build" 97 profile "build"
98 { 98 {
99 if DEBUG != "true" then 99 if DEBUG != "true" then
100 { 100 {
101 LDFLAGS += "-Wl,-s"; 101 LDFLAGS += "-Wl,-s";
102 } 102 }
103 execute("wine C:/MinGW/bin/mingw32-g++.exe -o ${OUTPUT} ${INPUT} ${LDFLAGS}"); 103 execute("wine C:/MinGW/bin/mingw32-g++.exe -o ${OUTPUT} ${INPUT} ${LDFLAGS}");
104 } 104 }
105} 105}
106 106
diff --git a/c++-libbu++/src/boolean.cpp b/c++-libbu++/src/boolean.cpp
index 729e644..7060dab 100644
--- a/c++-libbu++/src/boolean.cpp
+++ b/c++-libbu++/src/boolean.cpp
@@ -1,15 +1,22 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats/boolean.h" 8#include "gats/boolean.h"
2 9
3#include <bu/formatter.h> 10#include <bu/formatter.h>
4#include <bu/stream.h> 11#include <bu/stream.h>
5 12
6Gats::Boolean::Boolean() : 13Gats::Boolean::Boolean() :
7 bVal( false ) 14 bVal( false )
8{ 15{
9} 16}
10 17
11Gats::Boolean::Boolean( bool bVal ) : 18Gats::Boolean::Boolean( bool bVal ) :
12 bVal( bVal ) 19 bVal( bVal )
13{ 20{
14} 21}
15 22
@@ -19,35 +26,35 @@ Gats::Boolean::~Boolean()
19 26
20Gats::Object *Gats::Boolean::clone() const 27Gats::Object *Gats::Boolean::clone() const
21{ 28{
22 return new Gats::Boolean( bVal ); 29 return new Gats::Boolean( bVal );
23} 30}
24 31
25void Gats::Boolean::write( Bu::Stream &rOut ) const 32void Gats::Boolean::write( Bu::Stream &rOut ) const
26{ 33{
27 if( bVal ) 34 if( bVal )
28 { 35 {
29 rOut.write("1", 1 ); 36 rOut.write("1", 1 );
30 } 37 }
31 else 38 else
32 { 39 {
33 rOut.write("0", 1 ); 40 rOut.write("0", 1 );
34 } 41 }
35} 42}
36 43
37void Gats::Boolean::read( Bu::Stream &rIn, char cType ) 44void Gats::Boolean::read( Bu::Stream &rIn, char cType )
38{ 45{
39 if( cType == '1' ) 46 if( cType == '1' )
40 { 47 {
41 bVal = true; 48 bVal = true;
42 } 49 }
43 else 50 else
44 { 51 {
45 bVal = false; 52 bVal = false;
46 } 53 }
47} 54}
48 55
49Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Boolean &b ) 56Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Boolean &b )
50{ 57{
51 return f << "(bool) " << b.getValue(); 58 return f << "(bool) " << b.getValue();
52} 59}
53 60
diff --git a/c++-libbu++/src/boolean.h b/c++-libbu++/src/boolean.h
index 6b256c5..c83701c 100644
--- a/c++-libbu++/src/boolean.h
+++ b/c++-libbu++/src/boolean.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_BOOLEAN_H 8#ifndef GATS_BOOLEAN_H
2#define GATS_BOOLEAN_H 9#define GATS_BOOLEAN_H
3 10
@@ -5,24 +12,24 @@
5 12
6namespace Gats 13namespace Gats
7{ 14{
8 class Boolean : public Gats::Object 15 class Boolean : public Gats::Object
9 { 16 {
10 public: 17 public:
11 Boolean(); 18 Boolean();
12 Boolean( bool bVal ); 19 Boolean( bool bVal );
13 virtual ~Boolean(); 20 virtual ~Boolean();
14 21
15 virtual Type getType() const { return typeBoolean; } 22 virtual Type getType() const { return typeBoolean; }
16 bool getValue() const { return bVal; } 23 bool getValue() const { return bVal; }
17 void setValue( bool b ) { bVal = b; } 24 void setValue( bool b ) { bVal = b; }
18 virtual Object *clone() const; 25 virtual Object *clone() const;
19 26
20 virtual void write( Bu::Stream &rOut ) const; 27 virtual void write( Bu::Stream &rOut ) const;
21 virtual void read( Bu::Stream &rIn, char cType ); 28 virtual void read( Bu::Stream &rIn, char cType );
22 29
23 private: 30 private:
24 bool bVal; 31 bool bVal;
25 }; 32 };
26}; 33};
27 34
28Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Boolean &b ); 35Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Boolean &b );
diff --git a/c++-libbu++/src/dictionary.cpp b/c++-libbu++/src/dictionary.cpp
index b59d652..c6b08a1 100644
--- a/c++-libbu++/src/dictionary.cpp
+++ b/c++-libbu++/src/dictionary.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats/dictionary.h" 8#include "gats/dictionary.h"
2 9
3#include "gats/boolean.h" 10#include "gats/boolean.h"
@@ -11,7 +18,7 @@
11template<> 18template<>
12uint32_t Bu::__calcHashCode<Gats::String>( const Gats::String &s ) 19uint32_t Bu::__calcHashCode<Gats::String>( const Gats::String &s )
13{ 20{
14 return __calcHashCode( dynamic_cast<const Bu::String &>(s) ); 21 return __calcHashCode( dynamic_cast<const Bu::String &>(s) );
15} 22}
16 23
17Gats::Dictionary::Dictionary() 24Gats::Dictionary::Dictionary()
@@ -20,361 +27,361 @@ Gats::Dictionary::Dictionary()
20 27
21Gats::Dictionary::~Dictionary() 28Gats::Dictionary::~Dictionary()
22{ 29{
23 for( iterator i = begin(); i; i++ ) 30 for( iterator i = begin(); i; i++ )
24 { 31 {
25 delete *i; 32 delete *i;
26 } 33 }
27} 34}
28 35
29Gats::Object *Gats::Dictionary::clone() const 36Gats::Object *Gats::Dictionary::clone() const
30{ 37{
31 Gats::Dictionary *pClone = new Gats::Dictionary; 38 Gats::Dictionary *pClone = new Gats::Dictionary;
32 for( const_iterator i = begin(); i; i++ ) 39 for( const_iterator i = begin(); i; i++ )
33 { 40 {
34 Bu::String s(i.getKey()); 41 Bu::String s(i.getKey());
35 pClone->insert( s.clone(), (*i)->clone() ); 42 pClone->insert( s.clone(), (*i)->clone() );
36 } 43 }
37 44
38 return pClone; 45 return pClone;
39} 46}
40 47
41void Gats::Dictionary::write( Bu::Stream &rOut ) const 48void Gats::Dictionary::write( Bu::Stream &rOut ) const
42{ 49{
43 rOut.write("d", 1 ); 50 rOut.write("d", 1 );
44 for( const_iterator i= begin(); i; i++ ) 51 for( const_iterator i= begin(); i; i++ )
45 { 52 {
46 i.getKey().write( rOut ); 53 i.getKey().write( rOut );
47 (*i)->write( rOut ); 54 (*i)->write( rOut );
48 } 55 }
49 rOut.write("e", 1 ); 56 rOut.write("e", 1 );
50} 57}
51 58
52void Gats::Dictionary::read( Bu::Stream &rIn, char cType ) 59void Gats::Dictionary::read( Bu::Stream &rIn, char cType )
53{ 60{
54 for(;;) 61 for(;;)
55 { 62 {
56 char cNext; 63 char cNext;
57 rIn.read( &cNext, 1 ); 64 rIn.read( &cNext, 1 );
58 if( cNext == 'e' ) 65 if( cNext == 'e' )
59 break; 66 break;
60 if( cNext != 's' ) 67 if( cNext != 's' )
61 throw Bu::ExceptionBase("You can only use strings as keys."); 68 throw Bu::ExceptionBase("You can only use strings as keys.");
62 Gats::String sKey; 69 Gats::String sKey;
63 sKey.read( rIn, cNext ); 70 sKey.read( rIn, cNext );
64 71
65 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert( 72 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert(
66 sKey, Gats::Object::read( rIn ) 73 sKey, Gats::Object::read( rIn )
67 ); 74 );
68 } 75 }
69} 76}
70 77
71void Gats::Dictionary::insert( const Bu::String &sKey, char i ) 78void Gats::Dictionary::insert( const Bu::String &sKey, char i )
72{ 79{
73 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert( 80 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert(
74 sKey, new Gats::Integer( i ) 81 sKey, new Gats::Integer( i )
75 ); 82 );
76} 83}
77 84
78void Gats::Dictionary::insert( const Bu::String &sKey, unsigned char i ) 85void Gats::Dictionary::insert( const Bu::String &sKey, unsigned char i )
79{ 86{
80 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert( 87 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert(
81 sKey, new Gats::Integer( i ) 88 sKey, new Gats::Integer( i )
82 ); 89 );
83} 90}
84 91
85void Gats::Dictionary::insert( const Bu::String &sKey, signed char i ) 92void Gats::Dictionary::insert( const Bu::String &sKey, signed char i )
86{ 93{
87 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert( 94 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert(
88 sKey, new Gats::Integer( i ) 95 sKey, new Gats::Integer( i )
89 ); 96 );
90} 97}
91 98
92void Gats::Dictionary::insert( const Bu::String &sKey, unsigned short i ) 99void Gats::Dictionary::insert( const Bu::String &sKey, unsigned short i )
93{ 100{
94 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert( 101 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert(
95 sKey, new Gats::Integer( i ) 102 sKey, new Gats::Integer( i )
96 ); 103 );
97} 104}
98 105
99void Gats::Dictionary::insert( const Bu::String &sKey, signed short i ) 106void Gats::Dictionary::insert( const Bu::String &sKey, signed short i )
100{ 107{
101 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert( 108 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert(
102 sKey, new Gats::Integer( i ) 109 sKey, new Gats::Integer( i )
103 ); 110 );
104} 111}
105 112
106void Gats::Dictionary::insert( const Bu::String &sKey, unsigned int i ) 113void Gats::Dictionary::insert( const Bu::String &sKey, unsigned int i )
107{ 114{
108 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert( 115 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert(
109 sKey, new Gats::Integer( i ) 116 sKey, new Gats::Integer( i )
110 ); 117 );
111} 118}
112 119
113void Gats::Dictionary::insert( const Bu::String &sKey, signed int i ) 120void Gats::Dictionary::insert( const Bu::String &sKey, signed int i )
114{ 121{
115 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert( 122 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert(
116 sKey, new Gats::Integer( i ) 123 sKey, new Gats::Integer( i )
117 ); 124 );
118} 125}
119 126
120void Gats::Dictionary::insert( const Bu::String &sKey, unsigned long i ) 127void Gats::Dictionary::insert( const Bu::String &sKey, unsigned long i )
121{ 128{
122 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert( 129 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert(
123 sKey, new Gats::Integer( i ) 130 sKey, new Gats::Integer( i )
124 ); 131 );
125} 132}
126 133
127void Gats::Dictionary::insert( const Bu::String &sKey, signed long i ) 134void Gats::Dictionary::insert( const Bu::String &sKey, signed long i )
128{ 135{
129 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert( 136 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert(
130 sKey, new Gats::Integer( i ) 137 sKey, new Gats::Integer( i )
131 ); 138 );
132} 139}
133 140
134void Gats::Dictionary::insert( const Bu::String &sKey, unsigned long long i ) 141void Gats::Dictionary::insert( const Bu::String &sKey, unsigned long long i )
135{ 142{
136 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert( 143 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert(
137 sKey, new Gats::Integer( i ) 144 sKey, new Gats::Integer( i )
138 ); 145 );
139} 146}
140 147
141void Gats::Dictionary::insert( const Bu::String &sKey, signed long long i ) 148void Gats::Dictionary::insert( const Bu::String &sKey, signed long long i )
142{ 149{
143 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert( 150 ((Bu::Hash<Gats::String, Gats::Object *> *)this)->insert(
144 sKey, new Gats::Integer( i ) 151 sKey, new Gats::Integer( i )
145 ); 152 );
146} 153}
147/* 154/*
148void Gats::Dictionary::insert( const Bu::String &sKey, bool b ) 155void Gats::Dictionary::insert( const Bu::String &sKey, bool b )
149{ 156{
150 Bu::Hash<Gats::String, Gats::Object *>::insert( 157 Bu::Hash<Gats::String, Gats::Object *>::insert(
151 sKey, new Gats::Boolean( b ) 158 sKey, new Gats::Boolean( b )
152 ); 159 );
153}*/ 160}*/
154 161
155void Gats::Dictionary::insert( const Bu::String &sKey, float d ) 162void Gats::Dictionary::insert( const Bu::String &sKey, float d )
156{ 163{
157 Bu::Hash<Gats::String, Gats::Object *>::insert( 164 Bu::Hash<Gats::String, Gats::Object *>::insert(
158 sKey, new Gats::Float( d ) 165 sKey, new Gats::Float( d )
159 ); 166 );
160} 167}
161 168
162void Gats::Dictionary::insert( const Bu::String &sKey, double d ) 169void Gats::Dictionary::insert( const Bu::String &sKey, double d )
163{ 170{
164 Bu::Hash<Gats::String, Gats::Object *>::insert( 171 Bu::Hash<Gats::String, Gats::Object *>::insert(
165 sKey, new Gats::Float( d ) 172 sKey, new Gats::Float( d )
166 ); 173 );
167} 174}
168 175
169void Gats::Dictionary::insert( const Bu::String &sKey, const char *s ) 176void Gats::Dictionary::insert( const Bu::String &sKey, const char *s )
170{ 177{
171 Bu::Hash<Gats::String, Gats::Object *>::insert( 178 Bu::Hash<Gats::String, Gats::Object *>::insert(
172 sKey, new Gats::String( s ) 179 sKey, new Gats::String( s )
173 ); 180 );
174} 181}
175 182
176void Gats::Dictionary::insert( const Bu::String &sKey, const Bu::String &s ) 183void Gats::Dictionary::insert( const Bu::String &sKey, const Bu::String &s )
177{ 184{
178 Bu::Hash<Gats::String, Gats::Object *>::insert( 185 Bu::Hash<Gats::String, Gats::Object *>::insert(
179 sKey, new Gats::String( s ) 186 sKey, new Gats::String( s )
180 ); 187 );
181} 188}
182 189
183void Gats::Dictionary::insertBool( const Bu::String &sKey, bool b ) 190void Gats::Dictionary::insertBool( const Bu::String &sKey, bool b )
184{ 191{
185 Bu::Hash<Gats::String, Gats::Object *>::insert( 192 Bu::Hash<Gats::String, Gats::Object *>::insert(
186 sKey, new Gats::Boolean( b ) 193 sKey, new Gats::Boolean( b )
187 ); 194 );
188} 195}
189 196
190void Gats::Dictionary::insertInt( const Bu::String &sKey, int64_t i ) 197void Gats::Dictionary::insertInt( const Bu::String &sKey, int64_t i )
191{ 198{
192 Bu::Hash<Gats::String, Gats::Object *>::insert( 199 Bu::Hash<Gats::String, Gats::Object *>::insert(
193 sKey, new Gats::Integer( i ) 200 sKey, new Gats::Integer( i )
194 ); 201 );
195} 202}
196 203
197void Gats::Dictionary::insertFloat( const Bu::String &sKey, double d ) 204void Gats::Dictionary::insertFloat( const Bu::String &sKey, double d )
198{ 205{
199 Bu::Hash<Gats::String, Gats::Object *>::insert( 206 Bu::Hash<Gats::String, Gats::Object *>::insert(
200 sKey, new Gats::Float( d ) 207 sKey, new Gats::Float( d )
201 ); 208 );
202} 209}
203 210
204void Gats::Dictionary::insertStr( const Bu::String &sKey, const Bu::String &s ) 211void Gats::Dictionary::insertStr( const Bu::String &sKey, const Bu::String &s )
205{ 212{
206 Bu::Hash<Gats::String, Gats::Object *>::insert( 213 Bu::Hash<Gats::String, Gats::Object *>::insert(
207 sKey, new Gats::String( s ) 214 sKey, new Gats::String( s )
208 ); 215 );
209} 216}
210 217
211void Gats::Dictionary::insertList( const Bu::String &sKey, Gats::List *pL ) 218void Gats::Dictionary::insertList( const Bu::String &sKey, Gats::List *pL )
212{ 219{
213 Bu::Hash<Gats::String, Gats::Object *>::insert( 220 Bu::Hash<Gats::String, Gats::Object *>::insert(
214 sKey, pL 221 sKey, pL
215 ); 222 );
216} 223}
217 224
218void Gats::Dictionary::insertDict( const Bu::String &sKey, 225void Gats::Dictionary::insertDict( const Bu::String &sKey,
219 Gats::Dictionary *pD ) 226 Gats::Dictionary *pD )
220{ 227{
221 Bu::Hash<Gats::String, Gats::Object *>::insert( 228 Bu::Hash<Gats::String, Gats::Object *>::insert(
222 sKey, pD 229 sKey, pD
223 ); 230 );
224} 231}
225 232
226Gats::List *Gats::Dictionary::insertList( const Bu::String &sKey ) 233Gats::List *Gats::Dictionary::insertList( const Bu::String &sKey )
227{ 234{
228 Gats::List *pLst = new Gats::List(); 235 Gats::List *pLst = new Gats::List();
229 insertList( sKey, pLst ); 236 insertList( sKey, pLst );
230 return pLst; 237 return pLst;
231} 238}
232 239
233Gats::Dictionary *Gats::Dictionary::insertDict( const Bu::String &sKey ) 240Gats::Dictionary *Gats::Dictionary::insertDict( const Bu::String &sKey )
234{ 241{
235 Gats::Dictionary *pDict = new Gats::Dictionary(); 242 Gats::Dictionary *pDict = new Gats::Dictionary();
236 insertDict( sKey, pDict ); 243 insertDict( sKey, pDict );
237 return pDict; 244 return pDict;
238} 245}
239 246
240bool Gats::Dictionary::getBool( const Bu::String &sKey ) 247bool Gats::Dictionary::getBool( const Bu::String &sKey )
241{ 248{
242 Gats::Boolean *pOb = dynamic_cast<Gats::Boolean *>( get( sKey ) ); 249 Gats::Boolean *pOb = dynamic_cast<Gats::Boolean *>( get( sKey ) );
243 if( !pOb ) 250 if( !pOb )
244 throw Bu::ExceptionBase("Cannot use %s item '%s' as bool.", 251 throw Bu::ExceptionBase("Cannot use %s item '%s' as bool.",
245 typeToStr( get( sKey )->getType() ), sKey.getStr() ); 252 typeToStr( get( sKey )->getType() ), sKey.getStr() );
246 253
247 return pOb->getValue(); 254 return pOb->getValue();
248} 255}
249 256
250int64_t Gats::Dictionary::getInt( const Bu::String &sKey ) 257int64_t Gats::Dictionary::getInt( const Bu::String &sKey )
251{ 258{
252 Gats::Integer *pOb = dynamic_cast<Gats::Integer *>( get( sKey ) ); 259 Gats::Integer *pOb = dynamic_cast<Gats::Integer *>( get( sKey ) );
253 if( !pOb ) 260 if( !pOb )
254 throw Bu::ExceptionBase("Cannot use %s item '%s' as int.", 261 throw Bu::ExceptionBase("Cannot use %s item '%s' as int.",
255 typeToStr( get( sKey )->getType() ), sKey.getStr() ); 262 typeToStr( get( sKey )->getType() ), sKey.getStr() );
256 263
257 return pOb->getValue(); 264 return pOb->getValue();
258} 265}
259 266
260double Gats::Dictionary::getFloat( const Bu::String &sKey ) 267double Gats::Dictionary::getFloat( const Bu::String &sKey )
261{ 268{
262 Gats::Float *pOb = dynamic_cast<Gats::Float *>( get( sKey ) ); 269 Gats::Float *pOb = dynamic_cast<Gats::Float *>( get( sKey ) );
263 if( !pOb ) 270 if( !pOb )
264 throw Bu::ExceptionBase("Cannot use %s item '%s' as float.", 271 throw Bu::ExceptionBase("Cannot use %s item '%s' as float.",
265 typeToStr( get( sKey )->getType() ), sKey.getStr() ); 272 typeToStr( get( sKey )->getType() ), sKey.getStr() );
266 273
267 return pOb->getValue(); 274 return pOb->getValue();
268} 275}
269 276
270Bu::String Gats::Dictionary::getStr( const Bu::String &sKey ) 277Bu::String Gats::Dictionary::getStr( const Bu::String &sKey )
271{ 278{
272 Gats::String *pOb = dynamic_cast<Gats::String *>( get( sKey ) ); 279 Gats::String *pOb = dynamic_cast<Gats::String *>( get( sKey ) );
273 if( !pOb ) 280 if( !pOb )
274 throw Bu::ExceptionBase("Cannot use %s item '%s' as string.", 281 throw Bu::ExceptionBase("Cannot use %s item '%s' as string.",
275 typeToStr( get( sKey )->getType() ), sKey.getStr() ); 282 typeToStr( get( sKey )->getType() ), sKey.getStr() );
276 283
277 return *pOb; 284 return *pOb;
278} 285}
279 286
280Gats::List *Gats::Dictionary::getList( const Bu::String &sKey ) 287Gats::List *Gats::Dictionary::getList( const Bu::String &sKey )
281{ 288{
282 Gats::List *pOb = dynamic_cast<Gats::List *>( get( sKey ) ); 289 Gats::List *pOb = dynamic_cast<Gats::List *>( get( sKey ) );
283 if( !pOb ) 290 if( !pOb )
284 throw Bu::ExceptionBase("Cannot use %s item '%s' as list.", 291 throw Bu::ExceptionBase("Cannot use %s item '%s' as list.",
285 typeToStr( get( sKey )->getType() ), sKey.getStr() ); 292 typeToStr( get( sKey )->getType() ), sKey.getStr() );
286 293
287 return pOb; 294 return pOb;
288} 295}
289 296
290Gats::Dictionary *Gats::Dictionary::getDict( const Bu::String &sKey ) 297Gats::Dictionary *Gats::Dictionary::getDict( const Bu::String &sKey )
291{ 298{
292 Gats::Dictionary *pOb = dynamic_cast<Gats::Dictionary *>( get( sKey ) ); 299 Gats::Dictionary *pOb = dynamic_cast<Gats::Dictionary *>( get( sKey ) );
293 if( !pOb ) 300 if( !pOb )
294 throw Bu::ExceptionBase("Cannot use %s item '%s' as dictionary.", 301 throw Bu::ExceptionBase("Cannot use %s item '%s' as dictionary.",
295 typeToStr( get( sKey )->getType() ), sKey.getStr() ); 302 typeToStr( get( sKey )->getType() ), sKey.getStr() );
296 303
297 return pOb; 304 return pOb;
298} 305}
299 306
300bool Gats::Dictionary::getBool( const Bu::String &sKey ) const 307bool Gats::Dictionary::getBool( const Bu::String &sKey ) const
301{ 308{
302 Gats::Boolean *pOb = dynamic_cast<Gats::Boolean *>( get( sKey ) ); 309 Gats::Boolean *pOb = dynamic_cast<Gats::Boolean *>( get( sKey ) );
303 if( !pOb ) 310 if( !pOb )
304 throw Bu::ExceptionBase("Cannot use %s item '%s' as bool.", 311 throw Bu::ExceptionBase("Cannot use %s item '%s' as bool.",
305 typeToStr( get( sKey )->getType() ), sKey.getStr() ); 312 typeToStr( get( sKey )->getType() ), sKey.getStr() );
306 313
307 return pOb->getValue(); 314 return pOb->getValue();
308} 315}
309 316
310int64_t Gats::Dictionary::getInt( const Bu::String &sKey ) const 317int64_t Gats::Dictionary::getInt( const Bu::String &sKey ) const
311{ 318{
312 Gats::Integer *pOb = dynamic_cast<Gats::Integer *>( get( sKey ) ); 319 Gats::Integer *pOb = dynamic_cast<Gats::Integer *>( get( sKey ) );
313 if( !pOb ) 320 if( !pOb )
314 throw Bu::ExceptionBase("Cannot use %s item '%s' as int.", 321 throw Bu::ExceptionBase("Cannot use %s item '%s' as int.",
315 typeToStr( get( sKey )->getType() ), sKey.getStr() ); 322 typeToStr( get( sKey )->getType() ), sKey.getStr() );
316 323
317 return pOb->getValue(); 324 return pOb->getValue();
318} 325}
319 326
320double Gats::Dictionary::getFloat( const Bu::String &sKey ) const 327double Gats::Dictionary::getFloat( const Bu::String &sKey ) const
321{ 328{
322 Gats::Float *pOb = dynamic_cast<Gats::Float *>( get( sKey ) ); 329 Gats::Float *pOb = dynamic_cast<Gats::Float *>( get( sKey ) );
323 if( !pOb ) 330 if( !pOb )
324 throw Bu::ExceptionBase("Cannot use %s item '%s' as float.", 331 throw Bu::ExceptionBase("Cannot use %s item '%s' as float.",
325 typeToStr( get( sKey )->getType() ), sKey.getStr() ); 332 typeToStr( get( sKey )->getType() ), sKey.getStr() );
326 333
327 return pOb->getValue(); 334 return pOb->getValue();
328} 335}
329 336
330Bu::String Gats::Dictionary::getStr( const Bu::String &sKey ) const 337Bu::String Gats::Dictionary::getStr( const Bu::String &sKey ) const
331{ 338{
332 Gats::String *pOb = dynamic_cast<Gats::String *>( get( sKey ) ); 339 Gats::String *pOb = dynamic_cast<Gats::String *>( get( sKey ) );
333 if( !pOb ) 340 if( !pOb )
334 throw Bu::ExceptionBase("Cannot use %s item '%s' as string.", 341 throw Bu::ExceptionBase("Cannot use %s item '%s' as string.",
335 typeToStr( get( sKey )->getType() ), sKey.getStr() ); 342 typeToStr( get( sKey )->getType() ), sKey.getStr() );
336 343
337 return *pOb; 344 return *pOb;
338} 345}
339 346
340Gats::List *Gats::Dictionary::getList( const Bu::String &sKey ) const 347Gats::List *Gats::Dictionary::getList( const Bu::String &sKey ) const
341{ 348{
342 Gats::List *pOb = dynamic_cast<Gats::List *>( get( sKey ) ); 349 Gats::List *pOb = dynamic_cast<Gats::List *>( get( sKey ) );
343 if( !pOb ) 350 if( !pOb )
344 throw Bu::ExceptionBase("Cannot use %s item '%s' as list.", 351 throw Bu::ExceptionBase("Cannot use %s item '%s' as list.",
345 typeToStr( get( sKey )->getType() ), sKey.getStr() ); 352 typeToStr( get( sKey )->getType() ), sKey.getStr() );
346 353
347 return pOb; 354 return pOb;
348} 355}
349 356
350Gats::Dictionary *Gats::Dictionary::getDict( const Bu::String &sKey ) const 357Gats::Dictionary *Gats::Dictionary::getDict( const Bu::String &sKey ) const
351{ 358{
352 Gats::Dictionary *pOb = dynamic_cast<Gats::Dictionary *>( get( sKey ) ); 359 Gats::Dictionary *pOb = dynamic_cast<Gats::Dictionary *>( get( sKey ) );
353 if( !pOb ) 360 if( !pOb )
354 throw Bu::ExceptionBase("Cannot use %s item '%s' as dictionary.", 361 throw Bu::ExceptionBase("Cannot use %s item '%s' as dictionary.",
355 typeToStr( get( sKey )->getType() ), sKey.getStr() ); 362 typeToStr( get( sKey )->getType() ), sKey.getStr() );
356 363
357 return pOb; 364 return pOb;
358} 365}
359 366
360Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Dictionary &d ) 367Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Dictionary &d )
361{ 368{
362 f << "(dict) {"; 369 f << "(dict) {";
363 f.incIndent(); 370 f.incIndent();
364 int iMax = 0; 371 int iMax = 0;
365 for( Gats::Dictionary::const_iterator i = d.begin(); i; i++ ) 372 for( Gats::Dictionary::const_iterator i = d.begin(); i; i++ )
366 { 373 {
367 if( i.getKey().getSize() > iMax ) 374 if( i.getKey().getSize() > iMax )
368 iMax = i.getKey().getSize(); 375 iMax = i.getKey().getSize();
369 } 376 }
370 iMax += 2; 377 iMax += 2;
371 for( Gats::Dictionary::const_iterator i = d.begin(); i; i++ ) 378 for( Gats::Dictionary::const_iterator i = d.begin(); i; i++ )
372 { 379 {
373 f << f.nl << Bu::Fmt( iMax ) << i.getKey() + ": " << *i.getValue(); 380 f << f.nl << Bu::Fmt( iMax ) << i.getKey() + ": " << *i.getValue();
374 } 381 }
375 f.decIndent(); 382 f.decIndent();
376 f << f.nl << "}"; 383 f << f.nl << "}";
377 384
378 return f; 385 return f;
379} 386}
380 387
diff --git a/c++-libbu++/src/dictionary.h b/c++-libbu++/src/dictionary.h
index 3dd1000..6250eb6 100644
--- a/c++-libbu++/src/dictionary.h
+++ b/c++-libbu++/src/dictionary.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_DICTIONARY_H 8#ifndef GATS_DICTIONARY_H
2#define GATS_DICTIONARY_H 9#define GATS_DICTIONARY_H
3 10
@@ -7,60 +14,60 @@
7 14
8namespace Gats 15namespace Gats
9{ 16{
10 class List; 17 class List;
11 18
12 class Dictionary : public Gats::Object, 19 class Dictionary : public Gats::Object,
13 public Bu::Hash<Gats::String, Gats::Object *> 20 public Bu::Hash<Gats::String, Gats::Object *>
14 { 21 {
15 public: 22 public:
16 Dictionary(); 23 Dictionary();
17 virtual ~Dictionary(); 24 virtual ~Dictionary();
18 25
19 virtual Type getType() const { return typeDictionary; } 26 virtual Type getType() const { return typeDictionary; }
20 virtual Object *clone() const; 27 virtual Object *clone() const;
21 virtual void write( Bu::Stream &rOut ) const; 28 virtual void write( Bu::Stream &rOut ) const;
22 virtual void read( Bu::Stream &rIn, char cType ); 29 virtual void read( Bu::Stream &rIn, char cType );
23 30
24 void insert( const Bu::String &sKey, const char *s ); 31 void insert( const Bu::String &sKey, const char *s );
25 void insert( const Bu::String &sKey, const Bu::String &s ); 32 void insert( const Bu::String &sKey, const Bu::String &s );
26 void insert( const Bu::String &sKey, char i ); 33 void insert( const Bu::String &sKey, char i );
27 void insert( const Bu::String &sKey, unsigned char i ); 34 void insert( const Bu::String &sKey, unsigned char i );
28 void insert( const Bu::String &sKey, signed char i ); 35 void insert( const Bu::String &sKey, signed char i );
29 void insert( const Bu::String &sKey, unsigned short i ); 36 void insert( const Bu::String &sKey, unsigned short i );
30 void insert( const Bu::String &sKey, signed short i ); 37 void insert( const Bu::String &sKey, signed short i );
31 void insert( const Bu::String &sKey, unsigned int i ); 38 void insert( const Bu::String &sKey, unsigned int i );
32 void insert( const Bu::String &sKey, signed int i ); 39 void insert( const Bu::String &sKey, signed int i );
33 void insert( const Bu::String &sKey, unsigned long i ); 40 void insert( const Bu::String &sKey, unsigned long i );
34 void insert( const Bu::String &sKey, signed long i ); 41 void insert( const Bu::String &sKey, signed long i );
35 void insert( const Bu::String &sKey, unsigned long long i ); 42 void insert( const Bu::String &sKey, unsigned long long i );
36 void insert( const Bu::String &sKey, signed long long i ); 43 void insert( const Bu::String &sKey, signed long long i );
37 //void insert( const Bu::String &sKey, bool b ); 44 //void insert( const Bu::String &sKey, bool b );
38 void insert( const Bu::String &sKey, float d ); 45 void insert( const Bu::String &sKey, float d );
39 void insert( const Bu::String &sKey, double d ); 46 void insert( const Bu::String &sKey, double d );
40 using Bu::Hash<Gats::String, Gats::Object *>::insert; 47 using Bu::Hash<Gats::String, Gats::Object *>::insert;
41 void insertBool( const Bu::String &sKey, bool b ); 48 void insertBool( const Bu::String &sKey, bool b );
42 void insertInt( const Bu::String &sKey, int64_t i ); 49 void insertInt( const Bu::String &sKey, int64_t i );
43 void insertFloat( const Bu::String &sKey, double d ); 50 void insertFloat( const Bu::String &sKey, double d );
44 void insertStr( const Bu::String &sKey, const Bu::String &s ); 51 void insertStr( const Bu::String &sKey, const Bu::String &s );
45 void insertList( const Bu::String &sKey, Gats::List *pL ); 52 void insertList( const Bu::String &sKey, Gats::List *pL );
46 void insertDict( const Bu::String &sKey, Gats::Dictionary *pD ); 53 void insertDict( const Bu::String &sKey, Gats::Dictionary *pD );
47 Gats::List *insertList( const Bu::String &sKey ); 54 Gats::List *insertList( const Bu::String &sKey );
48 Gats::Dictionary *insertDict( const Bu::String &sKey ); 55 Gats::Dictionary *insertDict( const Bu::String &sKey );
49 56
50 bool getBool( const Bu::String &sKey ); 57 bool getBool( const Bu::String &sKey );
51 int64_t getInt( const Bu::String &sKey ); 58 int64_t getInt( const Bu::String &sKey );
52 double getFloat( const Bu::String &sKey ); 59 double getFloat( const Bu::String &sKey );
53 Bu::String getStr( const Bu::String &sKey ); 60 Bu::String getStr( const Bu::String &sKey );
54 Gats::List *getList( const Bu::String &sKey ); 61 Gats::List *getList( const Bu::String &sKey );
55 Gats::Dictionary *getDict( const Bu::String &sKey ); 62 Gats::Dictionary *getDict( const Bu::String &sKey );
56 63
57 bool getBool( const Bu::String &sKey ) const; 64 bool getBool( const Bu::String &sKey ) const;
58 int64_t getInt( const Bu::String &sKey ) const; 65 int64_t getInt( const Bu::String &sKey ) const;
59 double getFloat( const Bu::String &sKey ) const; 66 double getFloat( const Bu::String &sKey ) const;
60 Bu::String getStr( const Bu::String &sKey ) const; 67 Bu::String getStr( const Bu::String &sKey ) const;
61 Gats::List *getList( const Bu::String &sKey ) const; 68 Gats::List *getList( const Bu::String &sKey ) const;
62 Gats::Dictionary *getDict( const Bu::String &sKey ) const; 69 Gats::Dictionary *getDict( const Bu::String &sKey ) const;
63 }; 70 };
64}; 71};
65 72
66namespace Bu 73namespace Bu
diff --git a/c++-libbu++/src/float.cpp b/c++-libbu++/src/float.cpp
index c01d824..f7c2737 100644
--- a/c++-libbu++/src/float.cpp
+++ b/c++-libbu++/src/float.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats/float.h" 8#include "gats/float.h"
2#include "gats/integer.h" 9#include "gats/integer.h"
3 10
@@ -7,12 +14,12 @@
7#include <bu/sio.h> 14#include <bu/sio.h>
8using namespace Bu; 15using namespace Bu;
9Gats::Float::Float() : 16Gats::Float::Float() :
10 fVal( 0.0 ) 17 fVal( 0.0 )
11{ 18{
12} 19}
13 20
14Gats::Float::Float( double f ) : 21Gats::Float::Float( double f ) :
15 fVal( f ) 22 fVal( f )
16{ 23{
17} 24}
18 25
@@ -22,109 +29,109 @@ Gats::Float::~Float()
22 29
23Gats::Object *Gats::Float::clone() const 30Gats::Object *Gats::Float::clone() const
24{ 31{
25 return new Gats::Float( fVal ); 32 return new Gats::Float( fVal );
26} 33}
27 34
28void Gats::Float::write( Bu::Stream &rOut ) const 35void Gats::Float::write( Bu::Stream &rOut ) const
29{ 36{
30 if( fVal == 0.0 ) 37 if( fVal == 0.0 )
31 { 38 {
32 if( signbit( fVal ) ) 39 if( signbit( fVal ) )
33 rOut.write("FZ", 2 ); 40 rOut.write("FZ", 2 );
34 else 41 else
35 rOut.write("Fz", 2 ); 42 rOut.write("Fz", 2 );
36 } 43 }
37 else if( !isfinite( fVal ) ) 44 else if( !isfinite( fVal ) )
38 { 45 {
39 if( isnan( fVal ) ) 46 if( isnan( fVal ) )
40 { 47 {
41 if( signbit( fVal ) ) 48 if( signbit( fVal ) )
42 rOut.write("FN", 2 ); 49 rOut.write("FN", 2 );
43 else 50 else
44 rOut.write("Fn", 2 ); 51 rOut.write("Fn", 2 );
45 } 52 }
46 else 53 else
47 { 54 {
48 if( signbit( fVal ) ) 55 if( signbit( fVal ) )
49 rOut.write("FI", 2 ); 56 rOut.write("FI", 2 );
50 else 57 else
51 rOut.write("Fi", 2 ); 58 rOut.write("Fi", 2 );
52 } 59 }
53 } 60 }
54 else 61 else
55 { 62 {
56 rOut.write("f", 1 ); 63 rOut.write("f", 1 );
57 double d = fVal; 64 double d = fVal;
58 bool bNeg = false; 65 bool bNeg = false;
59 int64_t iScale=0; 66 int64_t iScale=0;
60 if( signbit( d ) ) 67 if( signbit( d ) )
61 { 68 {
62 bNeg = true; 69 bNeg = true;
63 d = -d; 70 d = -d;
64 } 71 }
65 72
66 iScale = log( d ) / 0x1.62e42fefa39efp+2; // log( 256.0 ) 73 iScale = log( d ) / 0x1.62e42fefa39efp+2; // log( 256.0 )
67 if( iScale < 0 ) iScale--; 74 if( iScale < 0 ) iScale--;
68 d /= pow( 256.0, iScale ); 75 d /= pow( 256.0, iScale );
69 76
70 Bu::String s; 77 Bu::String s;
71 s += (uint8_t)(d); 78 s += (uint8_t)(d);
72 d -= (int)d; 79 d -= (int)d;
73 for( int j = 0; j < 150 && d; j++ ) 80 for( int j = 0; j < 150 && d; j++ )
74 { 81 {
75 d = d*256.0; 82 d = d*256.0;
76 s += (uint8_t)d; 83 s += (uint8_t)d;
77 d -= (int)d; 84 d -= (int)d;
78 } 85 }
79 Gats::Integer::writePackedInt( rOut, bNeg?-s.getSize():s.getSize() ); 86 Gats::Integer::writePackedInt( rOut, bNeg?-s.getSize():s.getSize() );
80 rOut.write( s.getStr(), s.getSize() ); 87 rOut.write( s.getStr(), s.getSize() );
81 Gats::Integer::writePackedInt( rOut, iScale ); 88 Gats::Integer::writePackedInt( rOut, iScale );
82 } 89 }
83} 90}
84 91
85void Gats::Float::read( Bu::Stream &rIn, char cType ) 92void Gats::Float::read( Bu::Stream &rIn, char cType )
86{ 93{
87 if( cType == 'F' ) 94 if( cType == 'F' )
88 { 95 {
89 char buf; 96 char buf;
90 rIn.read( &buf, 1 ); 97 rIn.read( &buf, 1 );
91 switch( buf ) 98 switch( buf )
92 { 99 {
93 case 'N': fVal = -NAN; break; 100 case 'N': fVal = -NAN; break;
94 case 'n': fVal = NAN; break; 101 case 'n': fVal = NAN; break;
95 case 'I': fVal = -INFINITY; break; 102 case 'I': fVal = -INFINITY; break;
96 case 'i': fVal = INFINITY; break; 103 case 'i': fVal = INFINITY; break;
97 case 'Z': fVal = -0.0; break; 104 case 'Z': fVal = -0.0; break;
98 case 'z': fVal = 0.0; break; 105 case 'z': fVal = 0.0; break;
99 } 106 }
100 } 107 }
101 else if( cType == 'f' ) 108 else if( cType == 'f' )
102 { 109 {
103 int64_t iStr; 110 int64_t iStr;
104 Gats::Integer::readPackedInt( rIn, iStr ); 111 Gats::Integer::readPackedInt( rIn, iStr );
105 bool bNeg = false; 112 bool bNeg = false;
106 if( iStr < 0 ) 113 if( iStr < 0 )
107 { 114 {
108 bNeg = true; 115 bNeg = true;
109 iStr = -iStr; 116 iStr = -iStr;
110 } 117 }
111 Bu::String s( iStr ); 118 Bu::String s( iStr );
112 rIn.read( s.getStr(), iStr ); 119 rIn.read( s.getStr(), iStr );
113 fVal = 0.0; 120 fVal = 0.0;
114 for( int j = iStr-1; j > 0; j-- ) 121 for( int j = iStr-1; j > 0; j-- )
115 { 122 {
116 fVal = (fVal+(uint8_t)s[j])*0x1p-8; 123 fVal = (fVal+(uint8_t)s[j])*0x1p-8;
117 } 124 }
118 fVal += (uint8_t)s[0]; 125 fVal += (uint8_t)s[0];
119 int64_t iScale; 126 int64_t iScale;
120 Gats::Integer::readPackedInt( rIn, iScale ); 127 Gats::Integer::readPackedInt( rIn, iScale );
121 fVal *= pow( 256.0, iScale ); 128 fVal *= pow( 256.0, iScale );
122 if( bNeg ) fVal = -fVal; 129 if( bNeg ) fVal = -fVal;
123 } 130 }
124} 131}
125 132
126Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Float &flt ) 133Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Float &flt )
127{ 134{
128 return f << "(float) " << flt.getValue(); 135 return f << "(float) " << flt.getValue();
129} 136}
130 137
diff --git a/c++-libbu++/src/float.h b/c++-libbu++/src/float.h
index ba38d6c..d9a1a9a 100644
--- a/c++-libbu++/src/float.h
+++ b/c++-libbu++/src/float.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_FLOAT_H 8#ifndef GATS_FLOAT_H
2#define GATS_FLOAT_H 9#define GATS_FLOAT_H
3 10
@@ -7,25 +14,25 @@
7 14
8namespace Gats 15namespace Gats
9{ 16{
10 class Float : public Gats::Object 17 class Float : public Gats::Object
11 { 18 {
12 public: 19 public:
13 Float(); 20 Float();
14 Float( double f ); 21 Float( double f );
15 virtual ~Float(); 22 virtual ~Float();
16 23
17 virtual Object *clone() const; 24 virtual Object *clone() const;
18 25
19 virtual Type getType() const { return typeFloat; } 26 virtual Type getType() const { return typeFloat; }
20 double getValue() const { return fVal; } 27 double getValue() const { return fVal; }
21 28
22 virtual void write( Bu::Stream &rOut ) const; 29 virtual void write( Bu::Stream &rOut ) const;
23 virtual void read( Bu::Stream &rIn, char cType ); 30 virtual void read( Bu::Stream &rIn, char cType );
24 31
25 private: 32 private:
26 double fVal; 33 double fVal;
27 mutable Bu::String sWriteCache; 34 mutable Bu::String sWriteCache;
28 }; 35 };
29} 36}
30 37
31Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Float &flt ); 38Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Float &flt );
diff --git a/c++-libbu++/src/gatsc/main.cpp b/c++-libbu++/src/gatsc/main.cpp
index 2bac3fd..e07fe82 100644
--- a/c++-libbu++/src/gatsc/main.cpp
+++ b/c++-libbu++/src/gatsc/main.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include <bu/optparser.h> 8#include <bu/optparser.h>
2#include <bu/string.h> 9#include <bu/string.h>
3#include <bu/file.h> 10#include <bu/file.h>
@@ -11,63 +18,63 @@ using namespace Bu;
11class Options : public OptParser 18class Options : public OptParser
12{ 19{
13public: 20public:
14 Options( int argc, char *argv[] ) : 21 Options( int argc, char *argv[] ) :
15 bCompile( true ) 22 bCompile( true )
16 { 23 {
17 addHelpBanner("Gats Compiler\nUsage: gatsc [options] [input]\n"); 24 addHelpBanner("Gats Compiler\nUsage: gatsc [options] [input]\n");
18 25
19 addOption( sInput, 'i', "input", "Specify input file."); 26 addOption( sInput, 'i', "input", "Specify input file.");
20 addOption( sOutput, 'o', "output", "Specify output file."); 27 addOption( sOutput, 'o', "output", "Specify output file.");
21 28
22 addOption( bCompile, 'd', "decompile", 29 addOption( bCompile, 'd', "decompile",
23 "Convert binary gats to text gats."); 30 "Convert binary gats to text gats.");
24 31
25 addHelpOption('h', "help", "This Help"); 32 addHelpOption('h', "help", "This Help");
26 33
27 setNonOption( slot( this, &Options::setInput ) ); 34 setNonOption( slot( this, &Options::setInput ) );
28 35
29 setOverride("decompile", false ); 36 setOverride("decompile", false );
30 37
31 parse( argc, argv ); 38 parse( argc, argv );
32 } 39 }
33 40
34 int setInput( StrArray aParam ) 41 int setInput( StrArray aParam )
35 { 42 {
36 sInput = aParam[0]; 43 sInput = aParam[0];
37 return 0; 44 return 0;
38 } 45 }
39 46
40 bool bCompile; 47 bool bCompile;
41 String sInput; 48 String sInput;
42 String sOutput; 49 String sOutput;
43}; 50};
44 51
45int main( int argc, char *argv[] ) 52int main( int argc, char *argv[] )
46{ 53{
47 Options opt( argc, argv ); 54 Options opt( argc, argv );
48 55
49 if( opt.sInput.isEmpty() ) 56 if( opt.sInput.isEmpty() )
50 { 57 {
51 sio << "You must specify an input." << sio.nl << sio.nl; 58 sio << "You must specify an input." << sio.nl << sio.nl;
52 return 1; 59 return 1;
53 } 60 }
54 61
55 if( opt.sOutput.isEmpty() ) 62 if( opt.sOutput.isEmpty() )
56 { 63 {
57 opt.sOutput.set( opt.sInput.begin(), opt.sInput.find('.') ); 64 opt.sOutput.set( opt.sInput.begin(), opt.sInput.find('.') );
58 opt.sOutput += ".gats"; 65 opt.sOutput += ".gats";
59 } 66 }
60 67
61 if( opt.bCompile ) 68 if( opt.bCompile )
62 { 69 {
63 File fIn( opt.sInput, File::Read ); 70 File fIn( opt.sInput, File::Read );
64 File fOut( opt.sOutput, File::WriteNew ); 71 File fOut( opt.sOutput, File::WriteNew );
65 Gats::GatsStream gs( fOut ); 72 Gats::GatsStream gs( fOut );
66 Gats::Object *pObj = Gats::Object::strToGats( fIn.readAll() ); 73 Gats::Object *pObj = Gats::Object::strToGats( fIn.readAll() );
67 gs.writeObject( pObj ); 74 gs.writeObject( pObj );
68 delete pObj; 75 delete pObj;
69 } 76 }
70 77
71 return 0; 78 return 0;
72} 79}
73 80
diff --git a/c++-libbu++/src/gatscon/clientthread.cpp b/c++-libbu++/src/gatscon/clientthread.cpp
index 4c7b72a..4032a50 100644
--- a/c++-libbu++/src/gatscon/clientthread.cpp
+++ b/c++-libbu++/src/gatscon/clientthread.cpp
@@ -1,13 +1,20 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "clientthread.h" 8#include "clientthread.h"
2 9
3#include <bu/tcpsocket.h> 10#include <bu/tcpsocket.h>
4 11
5ClientThread::ClientThread( QObject *pParent, const QByteArray &baHost, 12ClientThread::ClientThread( QObject *pParent, const QByteArray &baHost,
6 int iPort ) : 13 int iPort ) :
7 QThread( pParent ), 14 QThread( pParent ),
8 baHost( baHost ), 15 baHost( baHost ),
9 iPort( iPort ), 16 iPort( iPort ),
10 gsCli( ssCli ) 17 gsCli( ssCli )
11{ 18{
12} 19}
13 20
@@ -17,22 +24,22 @@ ClientThread::~ClientThread()
17 24
18void ClientThread::send( Gats::Object *pObj ) 25void ClientThread::send( Gats::Object *pObj )
19{ 26{
20 gsCli.writeObject( pObj ); 27 gsCli.writeObject( pObj );
21} 28}
22 29
23void ClientThread::run() 30void ClientThread::run()
24{ 31{
25 ssCli.setStream( 32 ssCli.setStream(
26 new Bu::TcpSocket( baHost.constData(), iPort ) 33 new Bu::TcpSocket( baHost.constData(), iPort )
27 ); 34 );
28 35
29 while( !ssCli.isEos() ) 36 while( !ssCli.isEos() )
30 { 37 {
31 Gats::Object *pObj = gsCli.readObject(); 38 Gats::Object *pObj = gsCli.readObject();
32 if( pObj == NULL ) 39 if( pObj == NULL )
33 continue; 40 continue;
34 41
35 emit recv( pObj ); 42 emit recv( pObj );
36 } 43 }
37} 44}
38 45
diff --git a/c++-libbu++/src/gatscon/clientthread.h b/c++-libbu++/src/gatscon/clientthread.h
index 3182d37..a4343ee 100644
--- a/c++-libbu++/src/gatscon/clientthread.h
+++ b/c++-libbu++/src/gatscon/clientthread.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef CLIENT_THREAD_H 8#ifndef CLIENT_THREAD_H
2#define CLIENT_THREAD_H 9#define CLIENT_THREAD_H
3 10
@@ -9,29 +16,29 @@
9 16
10namespace Gats 17namespace Gats
11{ 18{
12 class Object; 19 class Object;
13}; 20};
14 21
15class ClientThread : public QThread 22class ClientThread : public QThread
16{ 23{
17 Q_OBJECT; 24 Q_OBJECT;
18public: 25public:
19 ClientThread( QObject *pParent, const QByteArray &baHost, int iPort ); 26 ClientThread( QObject *pParent, const QByteArray &baHost, int iPort );
20 virtual ~ClientThread(); 27 virtual ~ClientThread();
21 28
22 void send( Gats::Object *pObj ); 29 void send( Gats::Object *pObj );
23 30
24signals: 31signals:
25 void recv( Gats::Object *pObj ); 32 void recv( Gats::Object *pObj );
26 33
27protected: 34protected:
28 virtual void run(); 35 virtual void run();
29 36
30private: 37private:
31 QByteArray baHost; 38 QByteArray baHost;
32 int iPort; 39 int iPort;
33 Bu::StreamStack ssCli; 40 Bu::StreamStack ssCli;
34 Gats::GatsStream gsCli; 41 Gats::GatsStream gsCli;
35}; 42};
36 43
37#endif 44#endif
diff --git a/c++-libbu++/src/gatscon/clientwidget.cpp b/c++-libbu++/src/gatscon/clientwidget.cpp
index 941d9fa..f13e736 100644
--- a/c++-libbu++/src/gatscon/clientwidget.cpp
+++ b/c++-libbu++/src/gatscon/clientwidget.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "clientwidget.h" 8#include "clientwidget.h"
2#include "clientthread.h" 9#include "clientthread.h"
3 10
@@ -14,16 +21,16 @@
14using namespace Bu; 21using namespace Bu;
15 22
16ClientWidget::ClientWidget( QWidget *pParent, const QByteArray &baHost, 23ClientWidget::ClientWidget( QWidget *pParent, const QByteArray &baHost,
17 int iPort ) : 24 int iPort ) :
18 QWidget( pParent ) 25 QWidget( pParent )
19{ 26{
20 setupUi( this ); 27 setupUi( this );
21 28
22 pCli = new ClientThread( this, baHost, iPort ); 29 pCli = new ClientThread( this, baHost, iPort );
23 connect( pCli, SIGNAL(recv( Gats::Object *)), 30 connect( pCli, SIGNAL(recv( Gats::Object *)),
24 this, SLOT(recv(Gats::Object *)), Qt::QueuedConnection ); 31 this, SLOT(recv(Gats::Object *)), Qt::QueuedConnection );
25 32
26 pCli->start(); 33 pCli->start();
27} 34}
28 35
29ClientWidget::~ClientWidget() 36ClientWidget::~ClientWidget()
@@ -32,51 +39,51 @@ ClientWidget::~ClientWidget()
32 39
33void ClientWidget::saveTo( const QString &sFile ) 40void ClientWidget::saveTo( const QString &sFile )
34{ 41{
35 File fOut( sFile.toAscii().constData(), File::WriteNew ); 42 File fOut( sFile.toAscii().constData(), File::WriteNew );
36 Gats::GatsStream gsOut( fOut ); 43 Gats::GatsStream gsOut( fOut );
37 QTreeWidgetItem *pRoot = twHistory->invisibleRootItem(); 44 QTreeWidgetItem *pRoot = twHistory->invisibleRootItem();
38 for( int j = 0; j < pRoot->childCount(); j++ ) 45 for( int j = 0; j < pRoot->childCount(); j++ )
39 { 46 {
40 Gats::Object *pObj = treeToGats( pRoot->child( j ) ); 47 Gats::Object *pObj = treeToGats( pRoot->child( j ) );
41 gsOut.writeObject( pObj ); 48 gsOut.writeObject( pObj );
42 delete pObj; 49 delete pObj;
43 } 50 }
44} 51}
45 52
46void ClientWidget::send() 53void ClientWidget::send()
47{ 54{
48 try 55 try
49 { 56 {
50 Gats::Object *pObj = Gats::Object::strToGats( 57 Gats::Object *pObj = Gats::Object::strToGats(
51 leGats->text().toAscii().constData() 58 leGats->text().toAscii().constData()
52 ); 59 );
53 sio << "Send: " << *pObj << sio.nl; 60 sio << "Send: " << *pObj << sio.nl;
54 QTreeWidgetItem *pIt = new QTreeWidgetItem( 61 QTreeWidgetItem *pIt = new QTreeWidgetItem(
55 twHistory->invisibleRootItem() 62 twHistory->invisibleRootItem()
56 ); 63 );
57 pIt->setText( 0, "send" ); 64 pIt->setText( 0, "send" );
58 gatsToTree( pIt, pObj ); 65 gatsToTree( pIt, pObj );
59 pCli->send( pObj ); 66 pCli->send( pObj );
60 delete pObj; 67 delete pObj;
61 68
62 leGats->setText(""); 69 leGats->setText("");
63 leGats->setFocus(); 70 leGats->setFocus();
64 } 71 }
65 catch( Bu::ExceptionBase &e ) 72 catch( Bu::ExceptionBase &e )
66 { 73 {
67 QMessageBox::critical( this, "Gats Console - Error", e.what() ); 74 QMessageBox::critical( this, "Gats Console - Error", e.what() );
68 } 75 }
69} 76}
70 77
71void ClientWidget::recv( Gats::Object *pObj ) 78void ClientWidget::recv( Gats::Object *pObj )
72{ 79{
73 sio << "Recv: " << *pObj << sio.nl; 80 sio << "Recv: " << *pObj << sio.nl;
74 81
75 QTreeWidgetItem *pIt = new QTreeWidgetItem( 82 QTreeWidgetItem *pIt = new QTreeWidgetItem(
76 twHistory->invisibleRootItem() 83 twHistory->invisibleRootItem()
77 ); 84 );
78 pIt->setText( 0, "recv" ); 85 pIt->setText( 0, "recv" );
79 gatsToTree( pIt, pObj ); 86 gatsToTree( pIt, pObj );
80 delete pObj; 87 delete pObj;
81} 88}
82 89
diff --git a/c++-libbu++/src/gatscon/clientwidget.h b/c++-libbu++/src/gatscon/clientwidget.h
index 06c154d..b40adf4 100644
--- a/c++-libbu++/src/gatscon/clientwidget.h
+++ b/c++-libbu++/src/gatscon/clientwidget.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef CLIENT_WIDGET_H 8#ifndef CLIENT_WIDGET_H
2#define CLIENT_WIDGET_H 9#define CLIENT_WIDGET_H
3 10
@@ -7,24 +14,24 @@
7 14
8namespace Gats 15namespace Gats
9{ 16{
10 class Object; 17 class Object;
11}; 18};
12 19
13class ClientWidget : public QWidget, protected Ui::ClientWidget, public IoBase 20class ClientWidget : public QWidget, protected Ui::ClientWidget, public IoBase
14{ 21{
15 Q_OBJECT; 22 Q_OBJECT;
16public: 23public:
17 ClientWidget( QWidget *pParent, const QByteArray &baHost, int iPort ); 24 ClientWidget( QWidget *pParent, const QByteArray &baHost, int iPort );
18 virtual ~ClientWidget(); 25 virtual ~ClientWidget();
19 26
20 virtual void saveTo( const QString &sFile ); 27 virtual void saveTo( const QString &sFile );
21 28
22public slots: 29public slots:
23 void send(); 30 void send();
24 void recv( Gats::Object *pObj ); 31 void recv( Gats::Object *pObj );
25 32
26private: 33private:
27 class ClientThread *pCli; 34 class ClientThread *pCli;
28}; 35};
29 36
30#endif 37#endif
diff --git a/c++-libbu++/src/gatscon/connectdlg.cpp b/c++-libbu++/src/gatscon/connectdlg.cpp
index 589ae97..0bb159b 100644
--- a/c++-libbu++/src/gatscon/connectdlg.cpp
+++ b/c++-libbu++/src/gatscon/connectdlg.cpp
@@ -1,9 +1,16 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "connectdlg.h" 8#include "connectdlg.h"
2 9
3ConnectDlg::ConnectDlg( QWidget *pParent ) : 10ConnectDlg::ConnectDlg( QWidget *pParent ) :
4 QDialog( pParent ) 11 QDialog( pParent )
5{ 12{
6 setupUi( this ); 13 setupUi( this );
7} 14}
8 15
9ConnectDlg::~ConnectDlg() 16ConnectDlg::~ConnectDlg()
@@ -12,11 +19,11 @@ ConnectDlg::~ConnectDlg()
12 19
13QByteArray ConnectDlg::getHostname() const 20QByteArray ConnectDlg::getHostname() const
14{ 21{
15 return leHost->text().toAscii(); 22 return leHost->text().toAscii();
16} 23}
17 24
18int ConnectDlg::getPort() const 25int ConnectDlg::getPort() const
19{ 26{
20 return sbPort->value(); 27 return sbPort->value();
21} 28}
22 29
diff --git a/c++-libbu++/src/gatscon/connectdlg.h b/c++-libbu++/src/gatscon/connectdlg.h
index 57ea6cd..7396ef6 100644
--- a/c++-libbu++/src/gatscon/connectdlg.h
+++ b/c++-libbu++/src/gatscon/connectdlg.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef CONNECT_DLG_H 8#ifndef CONNECT_DLG_H
2#define CONNECT_DLG_H 9#define CONNECT_DLG_H
3 10
@@ -5,13 +12,13 @@
5 12
6class ConnectDlg : public QDialog, protected Ui::ConnectDlg 13class ConnectDlg : public QDialog, protected Ui::ConnectDlg
7{ 14{
8 Q_OBJECT; 15 Q_OBJECT;
9public: 16public:
10 ConnectDlg( QWidget *pParent ); 17 ConnectDlg( QWidget *pParent );
11 virtual ~ConnectDlg(); 18 virtual ~ConnectDlg();
12 19
13 QByteArray getHostname() const; 20 QByteArray getHostname() const;
14 int getPort() const; 21 int getPort() const;
15}; 22};
16 23
17#endif 24#endif
diff --git a/c++-libbu++/src/gatscon/filewidget.cpp b/c++-libbu++/src/gatscon/filewidget.cpp
index dbd70fd..23f6839 100644
--- a/c++-libbu++/src/gatscon/filewidget.cpp
+++ b/c++-libbu++/src/gatscon/filewidget.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "filewidget.h" 8#include "filewidget.h"
2 9
3#include "gatstotree.h" 10#include "gatstotree.h"
@@ -12,28 +19,28 @@
12using namespace Bu; 19using namespace Bu;
13 20
14FileWidget::FileWidget( QWidget *pParent ) : 21FileWidget::FileWidget( QWidget *pParent ) :
15 QWidget( pParent ) 22 QWidget( pParent )
16{ 23{
17 setupUi( this ); 24 setupUi( this );
18} 25}
19 26
20FileWidget::FileWidget( QWidget *pParent, QString sFile ) : 27FileWidget::FileWidget( QWidget *pParent, QString sFile ) :
21 QWidget( pParent ) 28 QWidget( pParent )
22{ 29{
23 setupUi( this ); 30 setupUi( this );
24 31
25 File fIn( sFile.toAscii().constData(), File::Read ); 32 File fIn( sFile.toAscii().constData(), File::Read );
26 Gats::GatsStream gsIn( fIn ); 33 Gats::GatsStream gsIn( fIn );
27 Gats::Object *pObj; 34 Gats::Object *pObj;
28 while( (pObj = gsIn.readObject()) ) 35 while( (pObj = gsIn.readObject()) )
29 { 36 {
30 QTreeWidgetItem *pNew = new QTreeWidgetItem( 37 QTreeWidgetItem *pNew = new QTreeWidgetItem(
31 twGats->invisibleRootItem() 38 twGats->invisibleRootItem()
32 ); 39 );
33 pNew->setText( 0, "<root>" ); 40 pNew->setText( 0, "<root>" );
34 gatsToTree( pNew, pObj ); 41 gatsToTree( pNew, pObj );
35 delete pObj; 42 delete pObj;
36 } 43 }
37} 44}
38 45
39FileWidget::~FileWidget() 46FileWidget::~FileWidget()
@@ -42,28 +49,28 @@ FileWidget::~FileWidget()
42 49
43void FileWidget::saveTo( const QString &sFile ) 50void FileWidget::saveTo( const QString &sFile )
44{ 51{
45 File fOut( sFile.toAscii().constData(), File::WriteNew ); 52 File fOut( sFile.toAscii().constData(), File::WriteNew );
46 Gats::GatsStream gsOut( fOut ); 53 Gats::GatsStream gsOut( fOut );
47 QTreeWidgetItem *pRoot = twGats->invisibleRootItem(); 54 QTreeWidgetItem *pRoot = twGats->invisibleRootItem();
48 for( int j = 0; j < pRoot->childCount(); j++ ) 55 for( int j = 0; j < pRoot->childCount(); j++ )
49 { 56 {
50 Gats::Object *pObj = treeToGats( pRoot->child( j ) ); 57 Gats::Object *pObj = treeToGats( pRoot->child( j ) );
51 gsOut.writeObject( pObj ); 58 gsOut.writeObject( pObj );
52 delete pObj; 59 delete pObj;
53 } 60 }
54} 61}
55 62
56void FileWidget::addRootItem() 63void FileWidget::addRootItem()
57{ 64{
58 QString sText = QInputDialog::getText( this, "Gats Console - Add Root Item", 65 QString sText = QInputDialog::getText( this, "Gats Console - Add Root Item",
59 "Gats:"); 66 "Gats:");
60 Gats::Object *pObj = Gats::Object::strToGats( sText.toAscii().constData() ); 67 Gats::Object *pObj = Gats::Object::strToGats( sText.toAscii().constData() );
61 QTreeWidgetItem *pNew = new QTreeWidgetItem( 68 QTreeWidgetItem *pNew = new QTreeWidgetItem(
62 twGats->invisibleRootItem() 69 twGats->invisibleRootItem()
63 ); 70 );
64 pNew->setText( 0, "<root>" ); 71 pNew->setText( 0, "<root>" );
65 gatsToTree( pNew, pObj ); 72 gatsToTree( pNew, pObj );
66 delete pObj; 73 delete pObj;
67} 74}
68 75
69void FileWidget::delRootItem() 76void FileWidget::delRootItem()
diff --git a/c++-libbu++/src/gatscon/filewidget.h b/c++-libbu++/src/gatscon/filewidget.h
index 9993bfe..1426eae 100644
--- a/c++-libbu++/src/gatscon/filewidget.h
+++ b/c++-libbu++/src/gatscon/filewidget.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef FILE_WIDGET_H 8#ifndef FILE_WIDGET_H
2#define FILE_WIDGET_H 9#define FILE_WIDGET_H
3 10
@@ -6,22 +13,22 @@
6 13
7namespace Gats 14namespace Gats
8{ 15{
9 class Object; 16 class Object;
10}; 17};
11 18
12class FileWidget : public QWidget, protected Ui::FileWidget, public IoBase 19class FileWidget : public QWidget, protected Ui::FileWidget, public IoBase
13{ 20{
14 Q_OBJECT; 21 Q_OBJECT;
15public: 22public:
16 FileWidget( QWidget *pParent=NULL ); 23 FileWidget( QWidget *pParent=NULL );
17 FileWidget( QWidget *pParent, QString sFile ); 24 FileWidget( QWidget *pParent, QString sFile );
18 virtual ~FileWidget(); 25 virtual ~FileWidget();
19 26
20 virtual void saveTo( const QString &sFile ); 27 virtual void saveTo( const QString &sFile );
21 28
22public slots: 29public slots:
23 void addRootItem(); 30 void addRootItem();
24 void delRootItem(); 31 void delRootItem();
25 32
26private: 33private:
27}; 34};
diff --git a/c++-libbu++/src/gatscon/gatstotree.cpp b/c++-libbu++/src/gatscon/gatstotree.cpp
index e388d5e..192b395 100644
--- a/c++-libbu++/src/gatscon/gatstotree.cpp
+++ b/c++-libbu++/src/gatscon/gatstotree.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gatstotree.h" 8#include "gatstotree.h"
2 9
3#include <gats/types.h> 10#include <gats/types.h>
@@ -6,86 +13,86 @@
6 13
7void gatsToTree( QTreeWidgetItem *p, Gats::Object *pObj ) 14void gatsToTree( QTreeWidgetItem *p, Gats::Object *pObj )
8{ 15{
9 switch( pObj->getType() ) 16 switch( pObj->getType() )
10 { 17 {
11 case Gats::typeInteger: 18 case Gats::typeInteger:
12 gatsToTree( p, dynamic_cast<Gats::Integer *>( pObj ) ); 19 gatsToTree( p, dynamic_cast<Gats::Integer *>( pObj ) );
13 break; 20 break;
14 21
15 case Gats::typeString: 22 case Gats::typeString:
16 gatsToTree( p, dynamic_cast<Gats::String *>( pObj ) ); 23 gatsToTree( p, dynamic_cast<Gats::String *>( pObj ) );
17 break; 24 break;
18 25
19 case Gats::typeFloat: 26 case Gats::typeFloat:
20 gatsToTree( p, dynamic_cast<Gats::Float *>( pObj ) ); 27 gatsToTree( p, dynamic_cast<Gats::Float *>( pObj ) );
21 break; 28 break;
22 29
23 case Gats::typeBoolean: 30 case Gats::typeBoolean:
24 gatsToTree( p, dynamic_cast<Gats::Boolean *>( pObj ) ); 31 gatsToTree( p, dynamic_cast<Gats::Boolean *>( pObj ) );
25 break; 32 break;
26 33
27 case Gats::typeList: 34 case Gats::typeList:
28 gatsToTree( p, dynamic_cast<Gats::List *>( pObj ) ); 35 gatsToTree( p, dynamic_cast<Gats::List *>( pObj ) );
29 break; 36 break;
30 37
31 case Gats::typeDictionary: 38 case Gats::typeDictionary:
32 gatsToTree( p, dynamic_cast<Gats::Dictionary *>( pObj ) ); 39 gatsToTree( p, dynamic_cast<Gats::Dictionary *>( pObj ) );
33 break; 40 break;
34 41
35 case Gats::typeNull: 42 case Gats::typeNull:
36 gatsToTree( p, dynamic_cast<Gats::Null *>( pObj ) ); 43 gatsToTree( p, dynamic_cast<Gats::Null *>( pObj ) );
37 break; 44 break;
38 } 45 }
39} 46}
40 47
41void gatsToTree( QTreeWidgetItem *p, Gats::Integer *pObj ) 48void gatsToTree( QTreeWidgetItem *p, Gats::Integer *pObj )
42{ 49{
43 p->setText( 1, "int"); 50 p->setText( 1, "int");
44 p->setText( 2, QString("%1").arg( pObj->getValue() ) ); 51 p->setText( 2, QString("%1").arg( pObj->getValue() ) );
45} 52}
46 53
47void gatsToTree( QTreeWidgetItem *p, Gats::String *pObj ) 54void gatsToTree( QTreeWidgetItem *p, Gats::String *pObj )
48{ 55{
49 p->setText( 1, "str"); 56 p->setText( 1, "str");
50 p->setText( 2, QString("%1").arg( pObj->getStr() ) ); 57 p->setText( 2, QString("%1").arg( pObj->getStr() ) );
51} 58}
52 59
53void gatsToTree( QTreeWidgetItem *p, Gats::Float *pObj ) 60void gatsToTree( QTreeWidgetItem *p, Gats::Float *pObj )
54{ 61{
55 p->setText( 1, "float"); 62 p->setText( 1, "float");
56 p->setText( 2, QString("%1").arg( pObj->getValue() ) ); 63 p->setText( 2, QString("%1").arg( pObj->getValue() ) );
57} 64}
58 65
59void gatsToTree( QTreeWidgetItem *p, Gats::Boolean *pObj ) 66void gatsToTree( QTreeWidgetItem *p, Gats::Boolean *pObj )
60{ 67{
61 p->setText( 1, "bool"); 68 p->setText( 1, "bool");
62 p->setText( 2, pObj->getValue()?"true":"false" ); 69 p->setText( 2, pObj->getValue()?"true":"false" );
63} 70}
64 71
65void gatsToTree( QTreeWidgetItem *p, Gats::List *pObj ) 72void gatsToTree( QTreeWidgetItem *p, Gats::List *pObj )
66{ 73{
67 p->setText( 1, "list"); 74 p->setText( 1, "list");
68 int j = 0; 75 int j = 0;
69 for( Gats::List::iterator i = pObj->begin(); i; i++ ) 76 for( Gats::List::iterator i = pObj->begin(); i; i++ )
70 { 77 {
71 QTreeWidgetItem *pIt = new QTreeWidgetItem( p ); 78 QTreeWidgetItem *pIt = new QTreeWidgetItem( p );
72 pIt->setText( 0, QString("%1").arg( j++ ) ); 79 pIt->setText( 0, QString("%1").arg( j++ ) );
73 gatsToTree( pIt, *i ); 80 gatsToTree( pIt, *i );
74 } 81 }
75} 82}
76 83
77void gatsToTree( QTreeWidgetItem *p, Gats::Dictionary *pObj ) 84void gatsToTree( QTreeWidgetItem *p, Gats::Dictionary *pObj )
78{ 85{
79 p->setText( 1, "dict"); 86 p->setText( 1, "dict");
80 for( Gats::Dictionary::iterator i = pObj->begin(); i; i++ ) 87 for( Gats::Dictionary::iterator i = pObj->begin(); i; i++ )
81 { 88 {
82 QTreeWidgetItem *pIt = new QTreeWidgetItem( p ); 89 QTreeWidgetItem *pIt = new QTreeWidgetItem( p );
83 pIt->setText( 0, QString( i.getKey().getStr() ) ); 90 pIt->setText( 0, QString( i.getKey().getStr() ) );
84 gatsToTree( pIt, *i ); 91 gatsToTree( pIt, *i );
85 } 92 }
86} 93}
87 94
88void gatsToTree( QTreeWidgetItem *p, Gats::Null *pObj ) 95void gatsToTree( QTreeWidgetItem *p, Gats::Null *pObj )
89{ 96{
90 p->setText( 1, "null"); 97 p->setText( 1, "null");
91} 98}
diff --git a/c++-libbu++/src/gatscon/gatstotree.h b/c++-libbu++/src/gatscon/gatstotree.h
index a803017..dc8f451 100644
--- a/c++-libbu++/src/gatscon/gatstotree.h
+++ b/c++-libbu++/src/gatscon/gatstotree.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_TO_TREE_H 8#ifndef GATS_TO_TREE_H
2#define GATS_TO_TREE_H 9#define GATS_TO_TREE_H
3 10
@@ -5,13 +12,13 @@ class QTreeWidgetItem;
5 12
6namespace Gats 13namespace Gats
7{ 14{
8 class Integer; 15 class Integer;
9 class String; 16 class String;
10 class Float; 17 class Float;
11 class Boolean; 18 class Boolean;
12 class List; 19 class List;
13 class Dictionary; 20 class Dictionary;
14 class Object; 21 class Object;
15}; 22};
16 23
17#include <gats/types.h> 24#include <gats/types.h>
diff --git a/c++-libbu++/src/gatscon/iobase.cpp b/c++-libbu++/src/gatscon/iobase.cpp
index 309444c..40af455 100644
--- a/c++-libbu++/src/gatscon/iobase.cpp
+++ b/c++-libbu++/src/gatscon/iobase.cpp
@@ -1 +1,8 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "iobase.h" 8#include "iobase.h"
diff --git a/c++-libbu++/src/gatscon/iobase.h b/c++-libbu++/src/gatscon/iobase.h
index 5bd3843..4475551 100644
--- a/c++-libbu++/src/gatscon/iobase.h
+++ b/c++-libbu++/src/gatscon/iobase.h
@@ -1,10 +1,17 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef IO_BASE_H 8#ifndef IO_BASE_H
2#define IO_BASE_H 9#define IO_BASE_H
3 10
4class IoBase 11class IoBase
5{ 12{
6public: 13public:
7 virtual void saveTo( const class QString &sFile )=0; 14 virtual void saveTo( const class QString &sFile )=0;
8}; 15};
9 16
10#endif 17#endif
diff --git a/c++-libbu++/src/gatscon/main.cpp b/c++-libbu++/src/gatscon/main.cpp
index b9b2327..11b6d4a 100644
--- a/c++-libbu++/src/gatscon/main.cpp
+++ b/c++-libbu++/src/gatscon/main.cpp
@@ -1,13 +1,20 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "mainwnd.h" 8#include "mainwnd.h"
2#include <QApplication> 9#include <QApplication>
3 10
4int main( int argc, char *argv[] ) 11int main( int argc, char *argv[] )
5{ 12{
6 QApplication app( argc, argv ); 13 QApplication app( argc, argv );
7 14
8 MainWnd wnd; 15 MainWnd wnd;
9 wnd.show(); 16 wnd.show();
10 17
11 return app.exec(); 18 return app.exec();
12} 19}
13 20
diff --git a/c++-libbu++/src/gatscon/mainwnd.cpp b/c++-libbu++/src/gatscon/mainwnd.cpp
index 5d31019..7cce116 100644
--- a/c++-libbu++/src/gatscon/mainwnd.cpp
+++ b/c++-libbu++/src/gatscon/mainwnd.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "mainwnd.h" 8#include "mainwnd.h"
2 9
3#include "clientwidget.h" 10#include "clientwidget.h"
@@ -12,10 +19,10 @@
12 19
13MainWnd::MainWnd() 20MainWnd::MainWnd()
14{ 21{
15 setupUi( this ); 22 setupUi( this );
16 23
17 pMode = new QLabel( "Idle", this ); 24 pMode = new QLabel( "Idle", this );
18 statusBar()->addPermanentWidget( pMode ); 25 statusBar()->addPermanentWidget( pMode );
19} 26}
20 27
21MainWnd::~MainWnd() 28MainWnd::~MainWnd()
@@ -24,96 +31,96 @@ MainWnd::~MainWnd()
24 31
25void MainWnd::connect() 32void MainWnd::connect()
26{ 33{
27 ConnectDlg dlg( this ); 34 ConnectDlg dlg( this );
28 if( dlg.exec() == QDialog::Accepted ) 35 if( dlg.exec() == QDialog::Accepted )
29 { 36 {
30 sCurFile.clear(); 37 sCurFile.clear();
31 setCentralWidget( 38 setCentralWidget(
32 new ClientWidget( 39 new ClientWidget(
33 this, dlg.getHostname(), dlg.getPort() 40 this, dlg.getHostname(), dlg.getPort()
34 ) 41 )
35 ); 42 );
36 pMode->setText( 43 pMode->setText(
37 QString("Client Mode: %1:%2").arg( QString(dlg.getHostname()) ). 44 QString("Client Mode: %1:%2").arg( QString(dlg.getHostname()) ).
38 arg( dlg.getPort() ) 45 arg( dlg.getPort() )
39 ); 46 );
40 } 47 }
41} 48}
42 49
43void MainWnd::proxy() 50void MainWnd::proxy()
44{ 51{
45 SetupProxyDlg dlg( this ); 52 SetupProxyDlg dlg( this );
46 53
47 if( dlg.exec() == QDialog::Accepted ) 54 if( dlg.exec() == QDialog::Accepted )
48 { 55 {
49 sCurFile.clear(); 56 sCurFile.clear();
50 setCentralWidget( 57 setCentralWidget(
51 new ProxyWidget( 58 new ProxyWidget(
52 this, dlg.getPortIn(), dlg.getHostOut(), dlg.getPortOut() 59 this, dlg.getPortIn(), dlg.getHostOut(), dlg.getPortOut()
53 ) 60 )
54 ); 61 );
55 pMode->setText( 62 pMode->setText(
56 QString("Proxy Mode: :%1 -> %2:%3").arg( dlg.getPortIn() ). 63 QString("Proxy Mode: :%1 -> %2:%3").arg( dlg.getPortIn() ).
57 arg( QString(dlg.getHostOut()) ). 64 arg( QString(dlg.getHostOut()) ).
58 arg( dlg.getPortOut() ) 65 arg( dlg.getPortOut() )
59 ); 66 );
60 } 67 }
61} 68}
62 69
63void MainWnd::open() 70void MainWnd::open()
64{ 71{
65 QString sFile = QFileDialog::getOpenFileName( 72 QString sFile = QFileDialog::getOpenFileName(
66 this, "Gats Console - open gats file" 73 this, "Gats Console - open gats file"
67 ); 74 );
68 if( sFile.isEmpty() ) 75 if( sFile.isEmpty() )
69 return; 76 return;
70 77
71 sCurFile = sFile; 78 sCurFile = sFile;
72 setCentralWidget( 79 setCentralWidget(
73 new FileWidget( this, sFile ) 80 new FileWidget( this, sFile )
74 ); 81 );
75 pMode->setText( QString("File mode: %1").arg( sCurFile ) ); 82 pMode->setText( QString("File mode: %1").arg( sCurFile ) );
76} 83}
77 84
78void MainWnd::newFile() 85void MainWnd::newFile()
79{ 86{
80 sCurFile.clear(); 87 sCurFile.clear();
81 setCentralWidget( 88 setCentralWidget(
82 new FileWidget( this ) 89 new FileWidget( this )
83 ); 90 );
84 pMode->setText( QString("File mode: <untitled>") ); 91 pMode->setText( QString("File mode: <untitled>") );
85} 92}
86 93
87void MainWnd::save() 94void MainWnd::save()
88{ 95{
89 if( sCurFile.isEmpty() ) 96 if( sCurFile.isEmpty() )
90 { 97 {
91 saveAs(); 98 saveAs();
92 } 99 }
93 else 100 else
94 { 101 {
95 IoBase *pIo = dynamic_cast<IoBase *>(centralWidget()); 102 IoBase *pIo = dynamic_cast<IoBase *>(centralWidget());
96 if( !pIo ) 103 if( !pIo )
97 return; 104 return;
98 105
99 pIo->saveTo( sCurFile ); 106 pIo->saveTo( sCurFile );
100 } 107 }
101} 108}
102 109
103void MainWnd::saveAs() 110void MainWnd::saveAs()
104{ 111{
105 IoBase *pIo = dynamic_cast<IoBase *>(centralWidget()); 112 IoBase *pIo = dynamic_cast<IoBase *>(centralWidget());
106 if( !pIo ) 113 if( !pIo )
107 return; 114 return;
108 115
109 QString sFile = QFileDialog::getSaveFileName( 116 QString sFile = QFileDialog::getSaveFileName(
110 this, "Gats Console - save gats file" 117 this, "Gats Console - save gats file"
111 ); 118 );
112 if( sFile.isEmpty() ) 119 if( sFile.isEmpty() )
113 return; 120 return;
114 121
115 pIo->saveTo( sFile ); 122 pIo->saveTo( sFile );
116 123
117 sCurFile = sFile; 124 sCurFile = sFile;
118} 125}
119 126
diff --git a/c++-libbu++/src/gatscon/mainwnd.h b/c++-libbu++/src/gatscon/mainwnd.h
index d1ae080..2a5c3fa 100644
--- a/c++-libbu++/src/gatscon/mainwnd.h
+++ b/c++-libbu++/src/gatscon/mainwnd.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef MAIN_WND_H 8#ifndef MAIN_WND_H
2#define MAIN_WND_H 9#define MAIN_WND_H
3 10
@@ -5,22 +12,22 @@
5 12
6class MainWnd : public QMainWindow, protected Ui::MainWnd 13class MainWnd : public QMainWindow, protected Ui::MainWnd
7{ 14{
8 Q_OBJECT; 15 Q_OBJECT;
9public: 16public:
10 MainWnd(); 17 MainWnd();
11 virtual ~MainWnd(); 18 virtual ~MainWnd();
12 19
13public slots: 20public slots:
14 void connect(); 21 void connect();
15 void proxy(); 22 void proxy();
16 void open(); 23 void open();
17 void newFile(); 24 void newFile();
18 void save(); 25 void save();
19 void saveAs(); 26 void saveAs();
20 27
21private: 28private:
22 QString sCurFile; 29 QString sCurFile;
23 class QLabel *pMode; 30 class QLabel *pMode;
24}; 31};
25 32
26#endif 33#endif
diff --git a/c++-libbu++/src/gatscon/proxythread.cpp b/c++-libbu++/src/gatscon/proxythread.cpp
index 574b56b..733af7f 100644
--- a/c++-libbu++/src/gatscon/proxythread.cpp
+++ b/c++-libbu++/src/gatscon/proxythread.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "proxythread.h" 8#include "proxythread.h"
2 9
3#include <gats/types.h> 10#include <gats/types.h>
@@ -10,15 +17,15 @@
10using namespace Bu; 17using namespace Bu;
11 18
12ProxyThread::ProxyThread( QObject *pParent, int iPortIn, 19ProxyThread::ProxyThread( QObject *pParent, int iPortIn,
13 const QByteArray &baHostOut, int iPortOut ) : 20 const QByteArray &baHostOut, int iPortOut ) :
14 QThread( pParent ), 21 QThread( pParent ),
15 pHost( NULL ), 22 pHost( NULL ),
16 iPortIn( iPortIn ), 23 iPortIn( iPortIn ),
17 baHostOut( baHostOut ), 24 baHostOut( baHostOut ),
18 iPortOut( iPortOut ), 25 iPortOut( iPortOut ),
19 gsCli( ssCli ) 26 gsCli( ssCli )
20{ 27{
21 pHost = new ProxyHostThread( pParent, this ); 28 pHost = new ProxyHostThread( pParent, this );
22} 29}
23 30
24ProxyThread::~ProxyThread() 31ProxyThread::~ProxyThread()
@@ -27,52 +34,52 @@ ProxyThread::~ProxyThread()
27 34
28void ProxyThread::send( Gats::Object *pObj ) 35void ProxyThread::send( Gats::Object *pObj )
29{ 36{
30 MemBuf bg; 37 MemBuf bg;
31 Gats::GatsStream gs( bg ); 38 Gats::GatsStream gs( bg );
32 gs.writeObject( pObj ); 39 gs.writeObject( pObj );
33 ssCli.write( bg.getString().getStr(), bg.getString().getSize() ); 40 ssCli.write( bg.getString().getStr(), bg.getString().getSize() );
34} 41}
35 42
36void ProxyThread::run() 43void ProxyThread::run()
37{ 44{
38 int iSockIn; 45 int iSockIn;
39 46
40 { 47 {
41 TcpServerSocket tsIn( iPortIn ); 48 TcpServerSocket tsIn( iPortIn );
42 do 49 do
43 { 50 {
44 iSockIn = tsIn.accept( 5 ); 51 iSockIn = tsIn.accept( 5 );
45 } while( iSockIn < 0 ); 52 } while( iSockIn < 0 );
46 } 53 }
47 54
48 emit gotConnection(); 55 emit gotConnection();
49 56
50 ssCli.setStream( new TcpSocket( iSockIn ) ); 57 ssCli.setStream( new TcpSocket( iSockIn ) );
51 ssCli.setBlocking( true ); 58 ssCli.setBlocking( true );
52 59
53 pHost->setStream( 60 pHost->setStream(
54 new TcpSocket( baHostOut.constData(), iPortOut ) 61 new TcpSocket( baHostOut.constData(), iPortOut )
55 ); 62 );
56 63
57 pHost->start(); 64 pHost->start();
58 65
59 while( !ssCli.isEos() ) 66 while( !ssCli.isEos() )
60 { 67 {
61 Gats::Object *pObj = gsCli.readObject(); 68 Gats::Object *pObj = gsCli.readObject();
62 if( pObj == NULL ) 69 if( pObj == NULL )
63 continue; 70 continue;
64 71
65 pHost->send( pObj ); 72 pHost->send( pObj );
66 emit recv( pObj ); 73 emit recv( pObj );
67 } 74 }
68 75
69} 76}
70 77
71ProxyHostThread::ProxyHostThread( QObject *pParent, ProxyThread *pClient ) : 78ProxyHostThread::ProxyHostThread( QObject *pParent, ProxyThread *pClient ) :
72 QThread( pParent ), 79 QThread( pParent ),
73 pClient( pClient ), 80 pClient( pClient ),
74 ssHst(), 81 ssHst(),
75 gsHst( ssHst ) 82 gsHst( ssHst )
76{ 83{
77} 84}
78 85
@@ -82,27 +89,27 @@ ProxyHostThread::~ProxyHostThread()
82 89
83void ProxyHostThread::send( Gats::Object *pObj ) 90void ProxyHostThread::send( Gats::Object *pObj )
84{ 91{
85 MemBuf bg; 92 MemBuf bg;
86 Gats::GatsStream gs( bg ); 93 Gats::GatsStream gs( bg );
87 gs.writeObject( pObj ); 94 gs.writeObject( pObj );
88 ssHst.write( bg.getString().getStr(), bg.getString().getSize() ); 95 ssHst.write( bg.getString().getStr(), bg.getString().getSize() );
89} 96}
90 97
91void ProxyHostThread::setStream( Bu::Stream *pStr ) 98void ProxyHostThread::setStream( Bu::Stream *pStr )
92{ 99{
93 ssHst.setStream( pStr ); 100 ssHst.setStream( pStr );
94} 101}
95 102
96void ProxyHostThread::run() 103void ProxyHostThread::run()
97{ 104{
98 while( !ssHst.isEos() ) 105 while( !ssHst.isEos() )
99 { 106 {
100 Gats::Object *pObj = gsHst.readObject(); 107 Gats::Object *pObj = gsHst.readObject();
101 if( pObj == NULL ) 108 if( pObj == NULL )
102 continue; 109 continue;
103 110
104 pClient->send( pObj ); 111 pClient->send( pObj );
105 emit recv( pObj ); 112 emit recv( pObj );
106 } 113 }
107} 114}
108 115
diff --git a/c++-libbu++/src/gatscon/proxythread.h b/c++-libbu++/src/gatscon/proxythread.h
index df75046..e53ca2c 100644
--- a/c++-libbu++/src/gatscon/proxythread.h
+++ b/c++-libbu++/src/gatscon/proxythread.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef PROXY_THREAD_H 8#ifndef PROXY_THREAD_H
2#define PROXY_THREAD_H 9#define PROXY_THREAD_H
3 10
@@ -8,53 +15,53 @@
8 15
9class ProxyThread : public QThread 16class ProxyThread : public QThread
10{ 17{
11 Q_OBJECT; 18 Q_OBJECT;
12public: 19public:
13 ProxyThread( QObject *pParent, int iPortIn, const QByteArray &baHostOut, 20 ProxyThread( QObject *pParent, int iPortIn, const QByteArray &baHostOut,
14 int iPortOut ); 21 int iPortOut );
15 virtual ~ProxyThread(); 22 virtual ~ProxyThread();
16 23
17 class ProxyHostThread *pHost; 24 class ProxyHostThread *pHost;
18 25
19 void send( Gats::Object *pObj ); 26 void send( Gats::Object *pObj );
20 27
21signals: 28signals:
22 void recv( Gats::Object *pObj ); 29 void recv( Gats::Object *pObj );
23 void gotConnection(); 30 void gotConnection();
24 31
25protected: 32protected:
26 virtual void run(); 33 virtual void run();
27 34
28private: 35private:
29 int iPortIn; 36 int iPortIn;
30 QByteArray baHostOut; 37 QByteArray baHostOut;
31 int iPortOut; 38 int iPortOut;
32 39
33 Bu::StreamStack ssCli; 40 Bu::StreamStack ssCli;
34 Gats::GatsStream gsCli; 41 Gats::GatsStream gsCli;
35}; 42};
36 43
37class ProxyHostThread : public QThread 44class ProxyHostThread : public QThread
38{ 45{
39 Q_OBJECT; 46 Q_OBJECT;
40public: 47public:
41 ProxyHostThread( QObject *pParent, ProxyThread *pClient ); 48 ProxyHostThread( QObject *pParent, ProxyThread *pClient );
42 virtual ~ProxyHostThread(); 49 virtual ~ProxyHostThread();
43 50
44 void send( Gats::Object *pObj ); 51 void send( Gats::Object *pObj );
45 52
46 void setStream( Bu::Stream *pStr ); 53 void setStream( Bu::Stream *pStr );
47 54
48signals: 55signals:
49 void recv( Gats::Object *pObj ); 56 void recv( Gats::Object *pObj );
50 57
51protected: 58protected:
52 virtual void run(); 59 virtual void run();
53 60
54private: 61private:
55 ProxyThread *pClient; 62 ProxyThread *pClient;
56 Bu::StreamStack ssHst; 63 Bu::StreamStack ssHst;
57 Gats::GatsStream gsHst; 64 Gats::GatsStream gsHst;
58}; 65};
59 66
60#endif 67#endif
diff --git a/c++-libbu++/src/gatscon/proxywidget.cpp b/c++-libbu++/src/gatscon/proxywidget.cpp
index 215f95f..c95e39a 100644
--- a/c++-libbu++/src/gatscon/proxywidget.cpp
+++ b/c++-libbu++/src/gatscon/proxywidget.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "proxywidget.h" 8#include "proxywidget.h"
2#include "proxythread.h" 9#include "proxythread.h"
3 10
@@ -14,22 +21,22 @@
14using namespace Bu; 21using namespace Bu;
15 22
16ProxyWidget::ProxyWidget( QWidget *pParent, int iPortIn, 23ProxyWidget::ProxyWidget( QWidget *pParent, int iPortIn,
17 const QByteArray baHost, int iPortOut ) : 24 const QByteArray baHost, int iPortOut ) :
18 QWidget( pParent ), 25 QWidget( pParent ),
19 pPrx( NULL ) 26 pPrx( NULL )
20{ 27{
21 setupUi( this ); 28 setupUi( this );
22 29
23 pPrx = new ProxyThread( this, iPortIn, baHost, iPortOut ); 30 pPrx = new ProxyThread( this, iPortIn, baHost, iPortOut );
24 31
25 connect( pPrx, SIGNAL(gotConnection()), 32 connect( pPrx, SIGNAL(gotConnection()),
26 this, SLOT(gotConnection()), Qt::QueuedConnection ); 33 this, SLOT(gotConnection()), Qt::QueuedConnection );
27 connect( pPrx, SIGNAL(recv( Gats::Object *)), 34 connect( pPrx, SIGNAL(recv( Gats::Object *)),
28 this, SLOT(clientRecv(Gats::Object *)), Qt::QueuedConnection ); 35 this, SLOT(clientRecv(Gats::Object *)), Qt::QueuedConnection );
29 connect( pPrx->pHost, SIGNAL(recv( Gats::Object *)), 36 connect( pPrx->pHost, SIGNAL(recv( Gats::Object *)),
30 this, SLOT(hostRecv(Gats::Object *)), Qt::QueuedConnection ); 37 this, SLOT(hostRecv(Gats::Object *)), Qt::QueuedConnection );
31 38
32 pPrx->start(); 39 pPrx->start();
33} 40}
34 41
35ProxyWidget::~ProxyWidget() 42ProxyWidget::~ProxyWidget()
@@ -38,94 +45,94 @@ ProxyWidget::~ProxyWidget()
38 45
39void ProxyWidget::saveTo( const QString &sFile ) 46void ProxyWidget::saveTo( const QString &sFile )
40{ 47{
41 File fOut( sFile.toAscii().constData(), File::WriteNew ); 48 File fOut( sFile.toAscii().constData(), File::WriteNew );
42 Gats::GatsStream gsOut( fOut ); 49 Gats::GatsStream gsOut( fOut );
43 QTreeWidgetItem *pRoot = twHistory->invisibleRootItem(); 50 QTreeWidgetItem *pRoot = twHistory->invisibleRootItem();
44 for( int j = 0; j < pRoot->childCount(); j++ ) 51 for( int j = 0; j < pRoot->childCount(); j++ )
45 { 52 {
46 Gats::Object *pObj = treeToGats( pRoot->child( j ) ); 53 Gats::Object *pObj = treeToGats( pRoot->child( j ) );
47 gsOut.writeObject( pObj ); 54 gsOut.writeObject( pObj );
48 delete pObj; 55 delete pObj;
49 } 56 }
50} 57}
51 58
52void ProxyWidget::sendToClient() 59void ProxyWidget::sendToClient()
53{ 60{
54 try 61 try
55 { 62 {
56 Gats::Object *pObj = Gats::Object::strToGats( 63 Gats::Object *pObj = Gats::Object::strToGats(
57 leGats->text().toAscii().constData() 64 leGats->text().toAscii().constData()
58 ); 65 );
59 sio << "Send: " << *pObj << sio.nl; 66 sio << "Send: " << *pObj << sio.nl;
60 QTreeWidgetItem *pIt = new QTreeWidgetItem( 67 QTreeWidgetItem *pIt = new QTreeWidgetItem(
61 twHistory->invisibleRootItem() 68 twHistory->invisibleRootItem()
62 ); 69 );
63 pIt->setText( 0, "proxy -> client" ); 70 pIt->setText( 0, "proxy -> client" );
64 gatsToTree( pIt, pObj ); 71 gatsToTree( pIt, pObj );
65 pPrx->send( pObj ); 72 pPrx->send( pObj );
66 delete pObj; 73 delete pObj;
67 74
68 leGats->setText(""); 75 leGats->setText("");
69 leGats->setFocus(); 76 leGats->setFocus();
70 } 77 }
71 catch( Bu::ExceptionBase &e ) 78 catch( Bu::ExceptionBase &e )
72 { 79 {
73 QMessageBox::critical( this, "Gats Console - Error", e.what() ); 80 QMessageBox::critical( this, "Gats Console - Error", e.what() );
74 } 81 }
75} 82}
76 83
77void ProxyWidget::sendToServer() 84void ProxyWidget::sendToServer()
78{ 85{
79 try 86 try
80 { 87 {
81 Gats::Object *pObj = Gats::Object::strToGats( 88 Gats::Object *pObj = Gats::Object::strToGats(
82 leGats->text().toAscii().constData() 89 leGats->text().toAscii().constData()
83 ); 90 );
84 sio << "Send: " << *pObj << sio.nl; 91 sio << "Send: " << *pObj << sio.nl;
85 QTreeWidgetItem *pIt = new QTreeWidgetItem( 92 QTreeWidgetItem *pIt = new QTreeWidgetItem(
86 twHistory->invisibleRootItem() 93 twHistory->invisibleRootItem()
87 ); 94 );
88 pIt->setText( 0, "proxy -> host" ); 95 pIt->setText( 0, "proxy -> host" );
89 gatsToTree( pIt, pObj ); 96 gatsToTree( pIt, pObj );
90 pPrx->pHost->send( pObj ); 97 pPrx->pHost->send( pObj );
91 delete pObj; 98 delete pObj;
92 99
93 leGats->setText(""); 100 leGats->setText("");
94 leGats->setFocus(); 101 leGats->setFocus();
95 } 102 }
96 catch( Bu::ExceptionBase &e ) 103 catch( Bu::ExceptionBase &e )
97 { 104 {
98 QMessageBox::critical( this, "Gats Console - Error", e.what() ); 105 QMessageBox::critical( this, "Gats Console - Error", e.what() );
99 } 106 }
100} 107}
101 108
102void ProxyWidget::clientRecv( Gats::Object *pObj ) 109void ProxyWidget::clientRecv( Gats::Object *pObj )
103{ 110{
104 sio << "Recv: " << *pObj << sio.nl; 111 sio << "Recv: " << *pObj << sio.nl;
105 112
106 QTreeWidgetItem *pIt = new QTreeWidgetItem( 113 QTreeWidgetItem *pIt = new QTreeWidgetItem(
107 twHistory->invisibleRootItem() 114 twHistory->invisibleRootItem()
108 ); 115 );
109 pIt->setText( 0, "client -> host" ); 116 pIt->setText( 0, "client -> host" );
110 gatsToTree( pIt, pObj ); 117 gatsToTree( pIt, pObj );
111 delete pObj; 118 delete pObj;
112} 119}
113 120
114void ProxyWidget::hostRecv( Gats::Object *pObj ) 121void ProxyWidget::hostRecv( Gats::Object *pObj )
115{ 122{
116 sio << "Recv: " << *pObj << sio.nl; 123 sio << "Recv: " << *pObj << sio.nl;
117 124
118 QTreeWidgetItem *pIt = new QTreeWidgetItem( 125 QTreeWidgetItem *pIt = new QTreeWidgetItem(
119 twHistory->invisibleRootItem() 126 twHistory->invisibleRootItem()
120 ); 127 );
121 pIt->setText( 0, "host -> client" ); 128 pIt->setText( 0, "host -> client" );
122 gatsToTree( pIt, pObj ); 129 gatsToTree( pIt, pObj );
123 delete pObj; 130 delete pObj;
124} 131}
125 132
126void ProxyWidget::gotConnection() 133void ProxyWidget::gotConnection()
127{ 134{
128 lwConnect->stop(); 135 lwConnect->stop();
129 swRoot->setCurrentIndex( 1 ); 136 swRoot->setCurrentIndex( 1 );
130} 137}
131 138
diff --git a/c++-libbu++/src/gatscon/proxywidget.h b/c++-libbu++/src/gatscon/proxywidget.h
index d6ebf4d..1674a34 100644
--- a/c++-libbu++/src/gatscon/proxywidget.h
+++ b/c++-libbu++/src/gatscon/proxywidget.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef PROXY_WIDGET_H 8#ifndef PROXY_WIDGET_H
2#define PROXY_WIDGET_H 9#define PROXY_WIDGET_H
3 10
@@ -6,28 +13,28 @@
6 13
7namespace Gats 14namespace Gats
8{ 15{
9 class Object; 16 class Object;
10}; 17};
11 18
12class ProxyWidget : public QWidget, protected Ui::ProxyWidget, public IoBase 19class ProxyWidget : public QWidget, protected Ui::ProxyWidget, public IoBase
13{ 20{
14 Q_OBJECT; 21 Q_OBJECT;
15public: 22public:
16 ProxyWidget( QWidget *pParent, int iPortIn, const QByteArray baHost, 23 ProxyWidget( QWidget *pParent, int iPortIn, const QByteArray baHost,
17 int iPortOut ); 24 int iPortOut );
18 virtual ~ProxyWidget(); 25 virtual ~ProxyWidget();
19 26
20 virtual void saveTo( const QString &sFile ); 27 virtual void saveTo( const QString &sFile );
21 28
22public slots: 29public slots:
23 void sendToClient(); 30 void sendToClient();
24 void sendToServer(); 31 void sendToServer();
25 void clientRecv( Gats::Object *pObj ); 32 void clientRecv( Gats::Object *pObj );
26 void hostRecv( Gats::Object *pObj ); 33 void hostRecv( Gats::Object *pObj );
27 void gotConnection(); 34 void gotConnection();
28 35
29private: 36private:
30 class ProxyThread *pPrx; 37 class ProxyThread *pPrx;
31}; 38};
32 39
33#endif 40#endif
diff --git a/c++-libbu++/src/gatscon/setupproxydlg.cpp b/c++-libbu++/src/gatscon/setupproxydlg.cpp
index 7c7a873..6d80683 100644
--- a/c++-libbu++/src/gatscon/setupproxydlg.cpp
+++ b/c++-libbu++/src/gatscon/setupproxydlg.cpp
@@ -1,9 +1,16 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "setupproxydlg.h" 8#include "setupproxydlg.h"
2 9
3SetupProxyDlg::SetupProxyDlg( QWidget *pParent ) : 10SetupProxyDlg::SetupProxyDlg( QWidget *pParent ) :
4 QDialog( pParent ) 11 QDialog( pParent )
5{ 12{
6 setupUi( this ); 13 setupUi( this );
7} 14}
8 15
9SetupProxyDlg::~SetupProxyDlg() 16SetupProxyDlg::~SetupProxyDlg()
@@ -12,16 +19,16 @@ SetupProxyDlg::~SetupProxyDlg()
12 19
13int SetupProxyDlg::getPortIn() const 20int SetupProxyDlg::getPortIn() const
14{ 21{
15 return sbPortIn->value(); 22 return sbPortIn->value();
16} 23}
17 24
18QByteArray SetupProxyDlg::getHostOut() const 25QByteArray SetupProxyDlg::getHostOut() const
19{ 26{
20 return leHostOut->text().toAscii(); 27 return leHostOut->text().toAscii();
21} 28}
22 29
23int SetupProxyDlg::getPortOut() const 30int SetupProxyDlg::getPortOut() const
24{ 31{
25 return sbPortOut->value(); 32 return sbPortOut->value();
26} 33}
27 34
diff --git a/c++-libbu++/src/gatscon/setupproxydlg.h b/c++-libbu++/src/gatscon/setupproxydlg.h
index 6cc31bd..685e893 100644
--- a/c++-libbu++/src/gatscon/setupproxydlg.h
+++ b/c++-libbu++/src/gatscon/setupproxydlg.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef SETUP_PROXY_DLG_H 8#ifndef SETUP_PROXY_DLG_H
2#define SETUP_PROXY_DLG_H 9#define SETUP_PROXY_DLG_H
3 10
@@ -5,14 +12,14 @@
5 12
6class SetupProxyDlg : public QDialog, protected Ui::SetupProxyDlg 13class SetupProxyDlg : public QDialog, protected Ui::SetupProxyDlg
7{ 14{
8 Q_OBJECT; 15 Q_OBJECT;
9public: 16public:
10 SetupProxyDlg( QWidget *pParent=NULL ); 17 SetupProxyDlg( QWidget *pParent=NULL );
11 virtual ~SetupProxyDlg(); 18 virtual ~SetupProxyDlg();
12 19
13 int getPortIn() const; 20 int getPortIn() const;
14 QByteArray getHostOut() const; 21 QByteArray getHostOut() const;
15 int getPortOut() const; 22 int getPortOut() const;
16}; 23};
17 24
18#endif 25#endif
diff --git a/c++-libbu++/src/gatscon/treetogats.cpp b/c++-libbu++/src/gatscon/treetogats.cpp
index a1571d1..f12a319 100644
--- a/c++-libbu++/src/gatscon/treetogats.cpp
+++ b/c++-libbu++/src/gatscon/treetogats.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "treetogats.h" 8#include "treetogats.h"
2 9
3#include <QTreeWidgetItem> 10#include <QTreeWidgetItem>
@@ -6,47 +13,47 @@
6 13
7Gats::Object *treeToGats( QTreeWidgetItem *pRoot ) 14Gats::Object *treeToGats( QTreeWidgetItem *pRoot )
8{ 15{
9 QString sType = pRoot->text( 1 ); 16 QString sType = pRoot->text( 1 );
10 QByteArray baDat = pRoot->text( 2 ).toAscii(); 17 QByteArray baDat = pRoot->text( 2 ).toAscii();
11 if( sType == "int" ) 18 if( sType == "int" )
12 { 19 {
13 return new Gats::Integer( strtoll( baDat.constData(), NULL, 10 ) ); 20 return new Gats::Integer( strtoll( baDat.constData(), NULL, 10 ) );
14 } 21 }
15 else if( sType == "str" ) 22 else if( sType == "str" )
16 { 23 {
17 return new Gats::String( baDat.constData(), baDat.size() ); 24 return new Gats::String( baDat.constData(), baDat.size() );
18 } 25 }
19 else if( sType == "float" ) 26 else if( sType == "float" )
20 { 27 {
21 return new Gats::Float( strtod( baDat.constData(), NULL ) ); 28 return new Gats::Float( strtod( baDat.constData(), NULL ) );
22 } 29 }
23 else if( sType == "bool" ) 30 else if( sType == "bool" )
24 { 31 {
25 return new Gats::Boolean( baDat == "true" ); 32 return new Gats::Boolean( baDat == "true" );
26 } 33 }
27 else if( sType == "list" ) 34 else if( sType == "list" )
28 { 35 {
29 Gats::List *pRet = new Gats::List(); 36 Gats::List *pRet = new Gats::List();
30 for( int j = 0; j < pRoot->childCount(); j++ ) 37 for( int j = 0; j < pRoot->childCount(); j++ )
31 { 38 {
32 pRet->append( treeToGats( pRoot->child( j ) ) ); 39 pRet->append( treeToGats( pRoot->child( j ) ) );
33 } 40 }
34 return pRet; 41 return pRet;
35 } 42 }
36 else if( sType == "dict" ) 43 else if( sType == "dict" )
37 { 44 {
38 Gats::Dictionary *pRet = new Gats::Dictionary(); 45 Gats::Dictionary *pRet = new Gats::Dictionary();
39 for( int j = 0; j < pRoot->childCount(); j++ ) 46 for( int j = 0; j < pRoot->childCount(); j++ )
40 { 47 {
41 QTreeWidgetItem *pChild = pRoot->child( j ); 48 QTreeWidgetItem *pChild = pRoot->child( j );
42 pRet->insert( 49 pRet->insert(
43 pChild->text( 0 ).toAscii().constData(), 50 pChild->text( 0 ).toAscii().constData(),
44 treeToGats( pChild ) 51 treeToGats( pChild )
45 ); 52 );
46 } 53 }
47 return pRet; 54 return pRet;
48 } 55 }
49 56
50 throw Bu::ExceptionBase("Unhandled type found."); 57 throw Bu::ExceptionBase("Unhandled type found.");
51} 58}
52 59
diff --git a/c++-libbu++/src/gatscon/treetogats.h b/c++-libbu++/src/gatscon/treetogats.h
index 931623d..29f7d6c 100644
--- a/c++-libbu++/src/gatscon/treetogats.h
+++ b/c++-libbu++/src/gatscon/treetogats.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef TREE_TO_GATS_H 8#ifndef TREE_TO_GATS_H
2#define TREE_TO_GATS_H 9#define TREE_TO_GATS_H
3 10
@@ -5,7 +12,7 @@ class QTreeWidgetItem;
5 12
6namespace Gats 13namespace Gats
7{ 14{
8 class Object; 15 class Object;
9}; 16};
10 17
11Gats::Object *treeToGats( QTreeWidgetItem *pRoot ); 18Gats::Object *treeToGats( QTreeWidgetItem *pRoot );
diff --git a/c++-libbu++/src/gatsstream.cpp b/c++-libbu++/src/gatsstream.cpp
index d5e3f82..05fbd84 100644
--- a/c++-libbu++/src/gatsstream.cpp
+++ b/c++-libbu++/src/gatsstream.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats/gatsstream.h" 8#include "gats/gatsstream.h"
2#include "gats/object.h" 9#include "gats/object.h"
3 10
@@ -6,7 +13,7 @@
6// using namespace Bu; 13// using namespace Bu;
7 14
8Gats::GatsStream::GatsStream( Bu::Stream &rStream ) : 15Gats::GatsStream::GatsStream( Bu::Stream &rStream ) :
9 rStream( rStream ) 16 rStream( rStream )
10{ 17{
11} 18}
12 19
@@ -16,93 +23,93 @@ Gats::GatsStream::~GatsStream()
16 23
17Gats::Object *Gats::GatsStream::readObject() 24Gats::Object *Gats::GatsStream::readObject()
18{ 25{
19 char buf[1500]; 26 char buf[1500];
20 27
21 // sio << "Gats::GatsStream::readObject(): Scanning for object header." << sio.nl; 28 // sio << "Gats::GatsStream::readObject(): Scanning for object header." << sio.nl;
22 do 29 do
23 { 30 {
24 if( qbRead.getSize() < 5 ) 31 if( qbRead.getSize() < 5 )
25 { 32 {
26 // sio << "Gats::GatsStream::readObject(): reading header data, need 5b, have " << qbRead.getSize() << "b." << sio.nl; 33 // sio << "Gats::GatsStream::readObject(): reading header data, need 5b, have " << qbRead.getSize() << "b." << sio.nl;
27 int iRead = rStream.read( buf, 5-qbRead.getSize() ); 34 int iRead = rStream.read( buf, 5-qbRead.getSize() );
28 qbRead.write( buf, iRead ); 35 qbRead.write( buf, iRead );
29 36
30 if( qbRead.getSize() < 5 ) 37 if( qbRead.getSize() < 5 )
31 return NULL; 38 return NULL;
32 } 39 }
33 } while( !skipReadNulls() ); 40 } while( !skipReadNulls() );
34 41
35 uint8_t uVer; 42 uint8_t uVer;
36 qbRead.peek( &uVer, 1 ); 43 qbRead.peek( &uVer, 1 );
37 // sio << "Gats::GatsStream::readObject(): Packet version: " << (int)uVer << sio.nl; 44 // sio << "Gats::GatsStream::readObject(): Packet version: " << (int)uVer << sio.nl;
38 45
39 int32_t iSize; 46 int32_t iSize;
40 qbRead.peek( &iSize, 4, 1 ); 47 qbRead.peek( &iSize, 4, 1 );
41 iSize = be32toh( iSize ); 48 iSize = be32toh( iSize );
42 // sio << "Gats::GatsStream::readObject(): Header read, looking for " << iSize << "b, we have " << qbRead.getSize() << "b." << sio.nl; 49 // sio << "Gats::GatsStream::readObject(): Header read, looking for " << iSize << "b, we have " << qbRead.getSize() << "b." << sio.nl;
43 while( qbRead.getSize() < iSize ) 50 while( qbRead.getSize() < iSize )
44 { 51 {
45 int32_t iRead = iSize - qbRead.getSize(); 52 int32_t iRead = iSize - qbRead.getSize();
46 if( iRead > 1500 ) 53 if( iRead > 1500 )
47 iRead = 1500; 54 iRead = 1500;
48 // sio << "Gats::GatsStream::readObject(): Attempting to read " << iRead << "b." << sio.nl; 55 // sio << "Gats::GatsStream::readObject(): Attempting to read " << iRead << "b." << sio.nl;
49 int32_t iReal = rStream.read( buf, iRead ); 56 int32_t iReal = rStream.read( buf, iRead );
50 // sio << "Gats::GatsStream::readObject(): Read " << iReal << "b." << sio.nl; 57 // sio << "Gats::GatsStream::readObject(): Read " << iReal << "b." << sio.nl;
51 qbRead.write( buf, iReal ); 58 qbRead.write( buf, iReal );
52 if( iReal < iRead ) 59 if( iReal < iRead )
53 { 60 {
54 // sio << "Gats::GatsStream::readObject(): Insufficient data read in block, bailing on read." << sio.nl; 61 // sio << "Gats::GatsStream::readObject(): Insufficient data read in block, bailing on read." << sio.nl;
55 return NULL; 62 return NULL;
56 } 63 }
57 } 64 }
58 65
59 if( qbRead.getSize() < iSize ) 66 if( qbRead.getSize() < iSize )
60 { 67 {
61 // sio << "Gats::GatsStream::readObject(): Somehow, we still don't have enough data, bailing." << sio.nl; 68 // sio << "Gats::GatsStream::readObject(): Somehow, we still don't have enough data, bailing." << sio.nl;
62 return NULL; 69 return NULL;
63 } 70 }
64 71
65 // sio << "Gats::GatsStream::readObject(): We have " << qbRead.getSize() << "b of " << iSize << "b, time to read the object." << sio.nl; 72 // sio << "Gats::GatsStream::readObject(): We have " << qbRead.getSize() << "b of " << iSize << "b, time to read the object." << sio.nl;
66 73
67 qbRead.seek( 5 ); 74 qbRead.seek( 5 );
68 Gats::Object *pObj = Gats::Object::read( qbRead ); 75 Gats::Object *pObj = Gats::Object::read( qbRead );
69 76
70 // sio << "Gats::GatsStream::readObject(): Read completed, there are " << qbRead.getSize() << "b left in the buffer." << sio.nl; 77 // sio << "Gats::GatsStream::readObject(): Read completed, there are " << qbRead.getSize() << "b left in the buffer." << sio.nl;
71 return pObj; 78 return pObj;
72} 79}
73 80
74void Gats::GatsStream::writeObject( Gats::Object *pObject ) 81void Gats::GatsStream::writeObject( Gats::Object *pObject )
75{ 82{
76 Bu::NullStream ns; 83 Bu::NullStream ns;
77 pObject->write( ns ); 84 pObject->write( ns );
78 85
79 uint8_t uBuf = 1; 86 uint8_t uBuf = 1;
80 int32_t iSize = htobe32( ns.tell()+5 ); 87 int32_t iSize = htobe32( ns.tell()+5 );
81 rStream.write( &uBuf, 1 ); 88 rStream.write( &uBuf, 1 );
82 rStream.write( &iSize, 4 ); 89 rStream.write( &iSize, 4 );
83 pObject->write( rStream ); 90 pObject->write( rStream );
84 91
85 // sio << "Object consumed " << ns.tell() << "b." << sio.nl; 92 // sio << "Object consumed " << ns.tell() << "b." << sio.nl;
86} 93}
87 94
88bool Gats::GatsStream::skipReadNulls() 95bool Gats::GatsStream::skipReadNulls()
89{ 96{
90 char buf; 97 char buf;
91 98
92 // sio << "Gats::GatsStream::skipReadNulls(): Scanning for nulls, " << qbRead.getSize() << "b." << sio.nl; 99 // sio << "Gats::GatsStream::skipReadNulls(): Scanning for nulls, " << qbRead.getSize() << "b." << sio.nl;
93 bool bHaveSeeked = false; 100 bool bHaveSeeked = false;
94 for(;;) 101 for(;;)
95 { 102 {
96 if( qbRead.peek( &buf, 1 ) == 0 ) 103 if( qbRead.peek( &buf, 1 ) == 0 )
97 return false; 104 return false;
98 if( buf != 0 ) 105 if( buf != 0 )
99 return !bHaveSeeked; //true; 106 return !bHaveSeeked; //true;
100 else 107 else
101 { 108 {
102 // sio << "Gats::GatsStream::skipReadNulls(): Null byte read, not header yet..." << sio.nl; 109 // sio << "Gats::GatsStream::skipReadNulls(): Null byte read, not header yet..." << sio.nl;
103 qbRead.seek( 1 ); 110 qbRead.seek( 1 );
104 bHaveSeeked = true; 111 bHaveSeeked = true;
105 } 112 }
106 } 113 }
107} 114}
108 115
diff --git a/c++-libbu++/src/gatsstream.h b/c++-libbu++/src/gatsstream.h
index 39719cf..e318b3c 100644
--- a/c++-libbu++/src/gatsstream.h
+++ b/c++-libbu++/src/gatsstream.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_STREAM_H 8#ifndef GATS_STREAM_H
2#define GATS_STREAM_H 9#define GATS_STREAM_H
3 10
@@ -6,51 +13,51 @@
6 13
7namespace Gats 14namespace Gats
8{ 15{
9 class Object; 16 class Object;
10 17
11 class GatsStream 18 class GatsStream
12 { 19 {
13 public: 20 public:
14 GatsStream( Bu::Stream &rStream ); 21 GatsStream( Bu::Stream &rStream );
15 virtual ~GatsStream(); 22 virtual ~GatsStream();
16 23
17 /** 24 /**
18 * Read an object packet from the assosiated stream. This will make 25 * Read an object packet from the assosiated stream. This will make
19 * every effort to only read exactly enough data to describe one packet, 26 * every effort to only read exactly enough data to describe one packet,
20 * in case you want to do other things with your stream. It will 27 * in case you want to do other things with your stream. It will
21 * automatically skip NULL byte spacing between packets, which makes 28 * automatically skip NULL byte spacing between packets, which makes
22 * a convinient padding method for encrypted data streams. Since 29 * a convinient padding method for encrypted data streams. Since
23 * sizing information is available in the packet header exact amounts 30 * sizing information is available in the packet header exact amounts
24 * of data can be read, however this function doesn't assume that it 31 * of data can be read, however this function doesn't assume that it
25 * can read the entire object in one operation. If it fails to read 32 * can read the entire object in one operation. If it fails to read
26 * a complete packet in one call, it will keep the data it's read so 33 * a complete packet in one call, it will keep the data it's read so
27 * far buffered and return NULL, ready for another attempt. You can 34 * far buffered and return NULL, ready for another attempt. You can
28 * use the function hasReadBuffer() to deterimne if readObject() 35 * use the function hasReadBuffer() to deterimne if readObject()
29 * has read part of an object packet or not. If readObject returns 36 * has read part of an object packet or not. If readObject returns
30 * non-null then hasReadBuffer should return false on it's next call. 37 * non-null then hasReadBuffer should return false on it's next call.
31 */ 38 */
32 Gats::Object *readObject(); 39 Gats::Object *readObject();
33 40
34 /** 41 /**
35 * Write an object 42 * Write an object
36 */ 43 */
37 void writeObject( Gats::Object *pObject ); 44 void writeObject( Gats::Object *pObject );
38 45
39 /** 46 /**
40 * Tells you if there is data still in the read buffer, i.e. that a 47 * Tells you if there is data still in the read buffer, i.e. that a
41 * packet is part way through being read. If readObject has returned 48 * packet is part way through being read. If readObject has returned
42 * non-null in the most recent call, this should always be false. 49 * non-null in the most recent call, this should always be false.
43 */ 50 */
44 bool hasReadBuffer() { return qbRead.getSize() > 0; } 51 bool hasReadBuffer() { return qbRead.getSize() > 0; }
45 int getReadBufferSize() { return qbRead.getSize(); } 52 int getReadBufferSize() { return qbRead.getSize(); }
46 53
47 private: 54 private:
48 bool skipReadNulls(); 55 bool skipReadNulls();
49 56
50 private: 57 private:
51 Bu::Stream &rStream; 58 Bu::Stream &rStream;
52 Bu::QueueBuf qbRead; 59 Bu::QueueBuf qbRead;
53 }; 60 };
54}; 61};
55 62
56#endif 63#endif
diff --git a/c++-libbu++/src/integer.cpp b/c++-libbu++/src/integer.cpp
index e89ac1d..40fc609 100644
--- a/c++-libbu++/src/integer.cpp
+++ b/c++-libbu++/src/integer.cpp
@@ -1,14 +1,21 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats/integer.h" 8#include "gats/integer.h"
2 9
3#include <bu/formatter.h> 10#include <bu/formatter.h>
4 11
5Gats::Integer::Integer() : 12Gats::Integer::Integer() :
6 iVal( 0 ) 13 iVal( 0 )
7{ 14{
8} 15}
9 16
10Gats::Integer::Integer( int64_t iVal ) : 17Gats::Integer::Integer( int64_t iVal ) :
11 iVal( iVal ) 18 iVal( iVal )
12{ 19{
13} 20}
14 21
@@ -18,22 +25,22 @@ Gats::Integer::~Integer()
18 25
19Gats::Object *Gats::Integer::clone() const 26Gats::Object *Gats::Integer::clone() const
20{ 27{
21 return new Gats::Integer( iVal ); 28 return new Gats::Integer( iVal );
22} 29}
23 30
24void Gats::Integer::write( Bu::Stream &rOut ) const 31void Gats::Integer::write( Bu::Stream &rOut ) const
25{ 32{
26 rOut.write("i", 1 ); 33 rOut.write("i", 1 );
27 writePackedInt( rOut, iVal ); 34 writePackedInt( rOut, iVal );
28} 35}
29 36
30void Gats::Integer::read( Bu::Stream &rIn, char cType ) 37void Gats::Integer::read( Bu::Stream &rIn, char cType )
31{ 38{
32 readPackedInt( rIn, iVal ); 39 readPackedInt( rIn, iVal );
33} 40}
34 41
35Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Integer &i ) 42Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Integer &i )
36{ 43{
37 return f << "(int) " << i.getValue(); 44 return f << "(int) " << i.getValue();
38} 45}
39 46
diff --git a/c++-libbu++/src/integer.h b/c++-libbu++/src/integer.h
index a5e0d58..dc4ae4c 100644
--- a/c++-libbu++/src/integer.h
+++ b/c++-libbu++/src/integer.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_INTEGER_H 8#ifndef GATS_INTEGER_H
2#define GATS_INTEGER_H 9#define GATS_INTEGER_H
3 10
@@ -9,76 +16,76 @@
9 16
10namespace Gats 17namespace Gats
11{ 18{
12 class Integer : public Gats::Object 19 class Integer : public Gats::Object
13 { 20 {
14 public: 21 public:
15 Integer(); 22 Integer();
16 Integer( int64_t iVal ); 23 Integer( int64_t iVal );
17 virtual ~Integer(); 24 virtual ~Integer();
18 25
19 virtual Object *clone() const; 26 virtual Object *clone() const;
20 27
21 virtual Type getType() const { return typeInteger; } 28 virtual Type getType() const { return typeInteger; }
22 int64_t getValue() const { return iVal; } 29 int64_t getValue() const { return iVal; }
23 30
24 virtual void write( Bu::Stream &rOut ) const; 31 virtual void write( Bu::Stream &rOut ) const;
25 virtual void read( Bu::Stream &rIn, char cType ); 32 virtual void read( Bu::Stream &rIn, char cType );
26 33
27 template<typename itype> 34 template<typename itype>
28 static void readPackedInt( Bu::Stream &rStream, itype &rOut ) 35 static void readPackedInt( Bu::Stream &rStream, itype &rOut )
29 { 36 {
30 int8_t b; 37 int8_t b;
31 rOut = 0; 38 rOut = 0;
32 bool bNeg; 39 bool bNeg;
33 40
34 rStream.read( &b, 1 ); 41 rStream.read( &b, 1 );
35 bNeg = ( b&0x40 ); 42 bNeg = ( b&0x40 );
36 rOut |= (itype(b&0x3F)); 43 rOut |= (itype(b&0x3F));
37 int c = 0; 44 int c = 0;
38 while( (b&0x80) ) 45 while( (b&0x80) )
39 { 46 {
40 rStream.read( &b, 1 ); 47 rStream.read( &b, 1 );
41 rOut |= (itype(b&0x7F)) << (6+7*(c++)); 48 rOut |= (itype(b&0x7F)) << (6+7*(c++));
42 } 49 }
43 if( bNeg ) rOut = -rOut; 50 if( bNeg ) rOut = -rOut;
44 } 51 }
45 52
46 template<typename itype> 53 template<typename itype>
47 static void writePackedInt( Bu::Stream &rStream, itype iIn ) 54 static void writePackedInt( Bu::Stream &rStream, itype iIn )
48 { 55 {
49 uint8_t b; 56 uint8_t b;
50 57
51 if( iIn < 0 ) 58 if( iIn < 0 )
52 { 59 {
53 iIn = -iIn; 60 iIn = -iIn;
54 b = (iIn&0x3F); 61 b = (iIn&0x3F);
55 if( iIn > b ) 62 if( iIn > b )
56 b |= 0x80 | 0x40; 63 b |= 0x80 | 0x40;
57 else 64 else
58 b |= 0x40; 65 b |= 0x40;
59 } 66 }
60 else 67 else
61 { 68 {
62 b = (iIn&0x3F); 69 b = (iIn&0x3F);
63 if( iIn > b ) 70 if( iIn > b )
64 b |= 0x80; 71 b |= 0x80;
65 } 72 }
66 rStream.write( &b, 1 ); 73 rStream.write( &b, 1 );
67 iIn = iIn >> 6; 74 iIn = iIn >> 6;
68 75
69 while( iIn ) 76 while( iIn )
70 { 77 {
71 b = (iIn&0x7F); 78 b = (iIn&0x7F);
72 if( iIn > b ) 79 if( iIn > b )
73 b |= 0x80; 80 b |= 0x80;
74 rStream.write( &b, 1 ); 81 rStream.write( &b, 1 );
75 iIn = iIn >> 7; 82 iIn = iIn >> 7;
76 } 83 }
77 } 84 }
78 85
79 private: 86 private:
80 int64_t iVal; 87 int64_t iVal;
81 }; 88 };
82}; 89};
83 90
84Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Integer &i ); 91Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Integer &i );
diff --git a/c++-libbu++/src/list.cpp b/c++-libbu++/src/list.cpp
index d081a22..c5217cd 100644
--- a/c++-libbu++/src/list.cpp
+++ b/c++-libbu++/src/list.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats/list.h" 8#include "gats/list.h"
2 9
3#include "gats/string.h" 10#include "gats/string.h"
@@ -15,191 +22,191 @@ Gats::List::List()
15 22
16Gats::List::~List() 23Gats::List::~List()
17{ 24{
18 for( iterator i = begin(); i; i++ ) 25 for( iterator i = begin(); i; i++ )
19 { 26 {
20 delete *i; 27 delete *i;
21 } 28 }
22} 29}
23 30
24Gats::Object *Gats::List::clone() const 31Gats::Object *Gats::List::clone() const
25{ 32{
26 Gats::List *pClone = new Gats::List; 33 Gats::List *pClone = new Gats::List;
27 for( const_iterator i = begin(); i; i++ ) 34 for( const_iterator i = begin(); i; i++ )
28 { 35 {
29 pClone->append( (*i)->clone() ); 36 pClone->append( (*i)->clone() );
30 } 37 }
31 return pClone; 38 return pClone;
32} 39}
33 40
34void Gats::List::write( Bu::Stream &rOut ) const 41void Gats::List::write( Bu::Stream &rOut ) const
35{ 42{
36 rOut.write("l", 1 ); 43 rOut.write("l", 1 );
37 for( const_iterator i = begin(); i; i++ ) 44 for( const_iterator i = begin(); i; i++ )
38 { 45 {
39 (*i)->write( rOut ); 46 (*i)->write( rOut );
40 } 47 }
41 rOut.write("e", 1 ); 48 rOut.write("e", 1 );
42} 49}
43 50
44void Gats::List::read( Bu::Stream &rIn, char cType ) 51void Gats::List::read( Bu::Stream &rIn, char cType )
45{ 52{
46 for(;;) 53 for(;;)
47 { 54 {
48 Gats::Object *pObj = Gats::Object::read( rIn ); 55 Gats::Object *pObj = Gats::Object::read( rIn );
49 if( pObj == NULL ) 56 if( pObj == NULL )
50 break; 57 break;
51 append( pObj ); 58 append( pObj );
52 } 59 }
53} 60}
54 61
55void Gats::List::append( const char *s ) 62void Gats::List::append( const char *s )
56{ 63{
57 Bu::List<Gats::Object *>::append( new Gats::String( s ) ); 64 Bu::List<Gats::Object *>::append( new Gats::String( s ) );
58} 65}
59 66
60void Gats::List::append( const Bu::String &s ) 67void Gats::List::append( const Bu::String &s )
61{ 68{
62 Bu::List<Gats::Object *>::append( new Gats::String( s ) ); 69 Bu::List<Gats::Object *>::append( new Gats::String( s ) );
63} 70}
64 71
65void Gats::List::append( int32_t i ) 72void Gats::List::append( int32_t i )
66{ 73{
67 Bu::List<Gats::Object *>::append( new Gats::Integer( i ) ); 74 Bu::List<Gats::Object *>::append( new Gats::Integer( i ) );
68} 75}
69 76
70void Gats::List::append( int64_t i ) 77void Gats::List::append( int64_t i )
71{ 78{
72 Bu::List<Gats::Object *>::append( new Gats::Integer( i ) ); 79 Bu::List<Gats::Object *>::append( new Gats::Integer( i ) );
73} 80}
74 81
75void Gats::List::append( double d ) 82void Gats::List::append( double d )
76{ 83{
77 Bu::List<Gats::Object *>::append( new Gats::Float( d ) ); 84 Bu::List<Gats::Object *>::append( new Gats::Float( d ) );
78} 85}
79 86
80void Gats::List::appendStr( const Bu::String &s ) 87void Gats::List::appendStr( const Bu::String &s )
81{ 88{
82 Bu::List<Gats::Object *>::append( new Gats::String( s ) ); 89 Bu::List<Gats::Object *>::append( new Gats::String( s ) );
83} 90}
84 91
85void Gats::List::appendInt( int64_t i ) 92void Gats::List::appendInt( int64_t i )
86{ 93{
87 Bu::List<Gats::Object *>::append( new Gats::Integer( i ) ); 94 Bu::List<Gats::Object *>::append( new Gats::Integer( i ) );
88} 95}
89 96
90void Gats::List::appendFloat( double d ) 97void Gats::List::appendFloat( double d )
91{ 98{
92 Bu::List<Gats::Object *>::append( new Gats::Float( d ) ); 99 Bu::List<Gats::Object *>::append( new Gats::Float( d ) );
93} 100}
94 101
95void Gats::List::appendBool( bool b ) 102void Gats::List::appendBool( bool b )
96{ 103{
97 Bu::List<Gats::Object *>::append( new Gats::Boolean( b ) ); 104 Bu::List<Gats::Object *>::append( new Gats::Boolean( b ) );
98} 105}
99 106
100void Gats::List::appendList( Gats::List *pL ) 107void Gats::List::appendList( Gats::List *pL )
101{ 108{
102 Bu::List<Gats::Object *>::append( pL ); 109 Bu::List<Gats::Object *>::append( pL );
103} 110}
104 111
105void Gats::List::appendDict( Gats::Dictionary *pD ) 112void Gats::List::appendDict( Gats::Dictionary *pD )
106{ 113{
107 Bu::List<Gats::Object *>::append( pD ); 114 Bu::List<Gats::Object *>::append( pD );
108} 115}
109 116
110Gats::List *Gats::List::appendList() 117Gats::List *Gats::List::appendList()
111{ 118{
112 Gats::List *pLst = new Gats::List(); 119 Gats::List *pLst = new Gats::List();
113 appendList( pLst ); 120 appendList( pLst );
114 return pLst; 121 return pLst;
115} 122}
116 123
117Gats::Dictionary *Gats::List::appendDict() 124Gats::Dictionary *Gats::List::appendDict()
118{ 125{
119 Gats::Dictionary *pDict = new Gats::Dictionary(); 126 Gats::Dictionary *pDict = new Gats::Dictionary();
120 appendDict( pDict ); 127 appendDict( pDict );
121 return pDict; 128 return pDict;
122} 129}
123 130
124void Gats::List::prepend( const char *s ) 131void Gats::List::prepend( const char *s )
125{ 132{
126 Bu::List<Gats::Object *>::prepend( new Gats::String( s ) ); 133 Bu::List<Gats::Object *>::prepend( new Gats::String( s ) );
127} 134}
128 135
129void Gats::List::prepend( const Bu::String &s ) 136void Gats::List::prepend( const Bu::String &s )
130{ 137{
131 Bu::List<Gats::Object *>::prepend( new Gats::String( s ) ); 138 Bu::List<Gats::Object *>::prepend( new Gats::String( s ) );
132} 139}
133 140
134void Gats::List::prepend( int32_t i ) 141void Gats::List::prepend( int32_t i )
135{ 142{
136 Bu::List<Gats::Object *>::prepend( new Gats::Integer( i ) ); 143 Bu::List<Gats::Object *>::prepend( new Gats::Integer( i ) );
137} 144}
138 145
139void Gats::List::prepend( int64_t i ) 146void Gats::List::prepend( int64_t i )
140{ 147{
141 Bu::List<Gats::Object *>::prepend( new Gats::Integer( i ) ); 148 Bu::List<Gats::Object *>::prepend( new Gats::Integer( i ) );
142} 149}
143 150
144void Gats::List::prepend( double d ) 151void Gats::List::prepend( double d )
145{ 152{
146 Bu::List<Gats::Object *>::prepend( new Gats::Float( d ) ); 153 Bu::List<Gats::Object *>::prepend( new Gats::Float( d ) );
147} 154}
148 155
149void Gats::List::prependStr( const Bu::String &s ) 156void Gats::List::prependStr( const Bu::String &s )
150{ 157{
151 Bu::List<Gats::Object *>::prepend( new Gats::String( s ) ); 158 Bu::List<Gats::Object *>::prepend( new Gats::String( s ) );
152} 159}
153 160
154void Gats::List::prependInt( int64_t i ) 161void Gats::List::prependInt( int64_t i )
155{ 162{
156 Bu::List<Gats::Object *>::prepend( new Gats::Integer( i ) ); 163 Bu::List<Gats::Object *>::prepend( new Gats::Integer( i ) );
157} 164}
158 165
159void Gats::List::prependFloat( double d ) 166void Gats::List::prependFloat( double d )
160{ 167{
161 Bu::List<Gats::Object *>::prepend( new Gats::Float( d ) ); 168 Bu::List<Gats::Object *>::prepend( new Gats::Float( d ) );
162} 169}
163 170
164void Gats::List::prependBool( bool b ) 171void Gats::List::prependBool( bool b )
165{ 172{
166 Bu::List<Gats::Object *>::prepend( new Gats::Boolean( b ) ); 173 Bu::List<Gats::Object *>::prepend( new Gats::Boolean( b ) );
167} 174}
168 175
169void Gats::List::prependList( Gats::List *pL ) 176void Gats::List::prependList( Gats::List *pL )
170{ 177{
171 Bu::List<Gats::Object *>::prepend( pL ); 178 Bu::List<Gats::Object *>::prepend( pL );
172} 179}
173 180
174void Gats::List::prependDict( Gats::Dictionary *pD ) 181void Gats::List::prependDict( Gats::Dictionary *pD )
175{ 182{
176 Bu::List<Gats::Object *>::prepend( pD ); 183 Bu::List<Gats::Object *>::prepend( pD );
177} 184}
178 185
179Gats::List *Gats::List::prependList() 186Gats::List *Gats::List::prependList()
180{ 187{
181 Gats::List *pLst = new Gats::List(); 188 Gats::List *pLst = new Gats::List();
182 prependList( pLst ); 189 prependList( pLst );
183 return pLst; 190 return pLst;
184} 191}
185 192
186Gats::Dictionary *Gats::List::prependDict() 193Gats::Dictionary *Gats::List::prependDict()
187{ 194{
188 Gats::Dictionary *pDict = new Gats::Dictionary(); 195 Gats::Dictionary *pDict = new Gats::Dictionary();
189 prependDict( pDict ); 196 prependDict( pDict );
190 return pDict; 197 return pDict;
191} 198}
192 199
193Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::List &l ) 200Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::List &l )
194{ 201{
195 f << "(list) ["; 202 f << "(list) [";
196 f.incIndent(); 203 f.incIndent();
197 for( Gats::List::const_iterator i = l.begin(); i; i++ ) 204 for( Gats::List::const_iterator i = l.begin(); i; i++ )
198 { 205 {
199 f << f.nl << **i; 206 f << f.nl << **i;
200 } 207 }
201 f.decIndent(); 208 f.decIndent();
202 f << f.nl << "]"; 209 f << f.nl << "]";
203 return f; 210 return f;
204} 211}
205 212
diff --git a/c++-libbu++/src/list.h b/c++-libbu++/src/list.h
index 5c1cd6e..6f4c9a4 100644
--- a/c++-libbu++/src/list.h
+++ b/c++-libbu++/src/list.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_LIST_H 8#ifndef GATS_LIST_H
2#define GATS_LIST_H 9#define GATS_LIST_H
3 10
@@ -7,50 +14,50 @@
7 14
8namespace Gats 15namespace Gats
9{ 16{
10 class Dictionary; 17 class Dictionary;
11 18
12 class List : public Gats::Object, public Bu::List<Gats::Object *> 19 class List : public Gats::Object, public Bu::List<Gats::Object *>
13 { 20 {
14 public: 21 public:
15 List(); 22 List();
16 virtual ~List(); 23 virtual ~List();
17 24
18 virtual Object *clone() const; 25 virtual Object *clone() const;
19 virtual Type getType() const { return typeList; } 26 virtual Type getType() const { return typeList; }
20 27
21 virtual void write( Bu::Stream &rOut ) const; 28 virtual void write( Bu::Stream &rOut ) const;
22 virtual void read( Bu::Stream &rIn, char cType ); 29 virtual void read( Bu::Stream &rIn, char cType );
23 30
24 void append( const char *s ); 31 void append( const char *s );
25 void append( const Bu::String &s ); 32 void append( const Bu::String &s );
26 void append( int32_t i ); 33 void append( int32_t i );
27 void append( int64_t i ); 34 void append( int64_t i );
28 void append( double d ); 35 void append( double d );
29 using Bu::List<Gats::Object *>::append; 36 using Bu::List<Gats::Object *>::append;
30 void appendStr( const Bu::String &s ); 37 void appendStr( const Bu::String &s );
31 void appendInt( int64_t i ); 38 void appendInt( int64_t i );
32 void appendFloat( double d ); 39 void appendFloat( double d );
33 void appendBool( bool b ); 40 void appendBool( bool b );
34 void appendList( Gats::List *pL ); 41 void appendList( Gats::List *pL );
35 void appendDict( Gats::Dictionary *pD ); 42 void appendDict( Gats::Dictionary *pD );
36 Gats::List *appendList(); 43 Gats::List *appendList();
37 Gats::Dictionary *appendDict(); 44 Gats::Dictionary *appendDict();
38 45
39 void prepend( const char *s ); 46 void prepend( const char *s );
40 void prepend( const Bu::String &s ); 47 void prepend( const Bu::String &s );
41 void prepend( int32_t i ); 48 void prepend( int32_t i );
42 void prepend( int64_t i ); 49 void prepend( int64_t i );
43 void prepend( double d ); 50 void prepend( double d );
44 using Bu::List<Gats::Object *>::prepend; 51 using Bu::List<Gats::Object *>::prepend;
45 void prependStr( const Bu::String &s ); 52 void prependStr( const Bu::String &s );
46 void prependInt( int64_t i ); 53 void prependInt( int64_t i );
47 void prependFloat( double d ); 54 void prependFloat( double d );
48 void prependBool( bool b ); 55 void prependBool( bool b );
49 void prependList( Gats::List *pL ); 56 void prependList( Gats::List *pL );
50 void prependDict( Gats::Dictionary *pD ); 57 void prependDict( Gats::Dictionary *pD );
51 Gats::List *prependList(); 58 Gats::List *prependList();
52 Gats::Dictionary *prependDict(); 59 Gats::Dictionary *prependDict();
53 }; 60 };
54}; 61};
55 62
56Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::List &l ); 63Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::List &l );
diff --git a/c++-libbu++/src/null.cpp b/c++-libbu++/src/null.cpp
index 13a61ed..37c9e6a 100644
--- a/c++-libbu++/src/null.cpp
+++ b/c++-libbu++/src/null.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats/null.h" 8#include "gats/null.h"
2 9
3#include <bu/formatter.h> 10#include <bu/formatter.h>
@@ -13,21 +20,21 @@ Gats::Null::~Null()
13 20
14Gats::Object *Gats::Null::clone() const 21Gats::Object *Gats::Null::clone() const
15{ 22{
16 return new Gats::Null(); 23 return new Gats::Null();
17} 24}
18 25
19void Gats::Null::write( Bu::Stream &rOut ) const 26void Gats::Null::write( Bu::Stream &rOut ) const
20{ 27{
21 rOut.write("n", 1 ); 28 rOut.write("n", 1 );
22} 29}
23 30
24void Gats::Null::read( Bu::Stream &rIn, char cType ) 31void Gats::Null::read( Bu::Stream &rIn, char cType )
25{ 32{
26 // Nothing to do... 33 // Nothing to do...
27} 34}
28 35
29Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Null &b ) 36Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Null &b )
30{ 37{
31 return f << "(null)"; 38 return f << "(null)";
32} 39}
33 40
diff --git a/c++-libbu++/src/null.h b/c++-libbu++/src/null.h
index afa2d0a..fc7825b 100644
--- a/c++-libbu++/src/null.h
+++ b/c++-libbu++/src/null.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_NULL_H 8#ifndef GATS_NULL_H
2#define GATS_NULL_H 9#define GATS_NULL_H
3 10
@@ -5,18 +12,18 @@
5 12
6namespace Gats 13namespace Gats
7{ 14{
8 class Null : public Gats::Object 15 class Null : public Gats::Object
9 { 16 {
10 public: 17 public:
11 Null(); 18 Null();
12 virtual ~Null(); 19 virtual ~Null();
13 20
14 virtual Type getType() const { return typeNull; } 21 virtual Type getType() const { return typeNull; }
15 virtual Object *clone() const; 22 virtual Object *clone() const;
16 23
17 virtual void write( Bu::Stream &rOut ) const; 24 virtual void write( Bu::Stream &rOut ) const;
18 virtual void read( Bu::Stream &rIn, char cType ); 25 virtual void read( Bu::Stream &rIn, char cType );
19 }; 26 };
20}; 27};
21 28
22Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Null &b ); 29Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Null &b );
diff --git a/c++-libbu++/src/object.cpp b/c++-libbu++/src/object.cpp
index 15d7cb5..db7b80b 100644
--- a/c++-libbu++/src/object.cpp
+++ b/c++-libbu++/src/object.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats/object.h" 8#include "gats/object.h"
2 9
3#include "gats/integer.h" 10#include "gats/integer.h"
@@ -26,137 +33,137 @@ Gats::Object::~Object()
26 33
27Gats::Object *Gats::Object::read( Bu::Stream &rIn ) 34Gats::Object *Gats::Object::read( Bu::Stream &rIn )
28{ 35{
29 char buf; 36 char buf;
30 rIn.read( &buf, 1 ); 37 rIn.read( &buf, 1 );
31 Object *pObj = NULL; 38 Object *pObj = NULL;
32 switch( buf ) 39 switch( buf )
33 { 40 {
34 case 'i': 41 case 'i':
35 pObj = new Gats::Integer(); 42 pObj = new Gats::Integer();
36 break; 43 break;
37 44
38 case 's': 45 case 's':
39 pObj = new Gats::String(); 46 pObj = new Gats::String();
40 break; 47 break;
41 48
42 case '0': 49 case '0':
43 case '1': 50 case '1':
44 pObj = new Gats::Boolean(); 51 pObj = new Gats::Boolean();
45 break; 52 break;
46 53
47 case 'l': 54 case 'l':
48 pObj = new Gats::List(); 55 pObj = new Gats::List();
49 break; 56 break;
50 57
51 case 'd': 58 case 'd':
52 pObj = new Gats::Dictionary(); 59 pObj = new Gats::Dictionary();
53 break; 60 break;
54 61
55 case 'f': // Normal floats 62 case 'f': // Normal floats
56 case 'F': // Special float values 63 case 'F': // Special float values
57 pObj = new Gats::Float(); 64 pObj = new Gats::Float();
58 break; 65 break;
59 66
60 case 'n': 67 case 'n':
61 pObj = new Gats::Null(); 68 pObj = new Gats::Null();
62 break; 69 break;
63 70
64 case 'e': 71 case 'e':
65 return NULL; 72 return NULL;
66 73
67 default: 74 default:
68 throw Bu::ExceptionBase("Invalid Gats type discovered: %c.", buf ); 75 throw Bu::ExceptionBase("Invalid Gats type discovered: %c.", buf );
69 } 76 }
70 77
71 pObj->read( rIn, buf ); 78 pObj->read( rIn, buf );
72 79
73 return pObj; 80 return pObj;
74} 81}
75 82
76void Gats::Object::skipWs( Bu::String::const_iterator &i ) 83void Gats::Object::skipWs( Bu::String::const_iterator &i )
77{ 84{
78 for(; *i == ' ' || *i == '\t' || *i == '\r' || *i == '\n'; i++ ) { } 85 for(; *i == ' ' || *i == '\t' || *i == '\r' || *i == '\n'; i++ ) { }
79} 86}
80 87
81Bu::String Gats::Object::token( Bu::String::const_iterator &i ) 88Bu::String Gats::Object::token( Bu::String::const_iterator &i )
82{ 89{
83 Bu::String sRet; 90 Bu::String sRet;
84 if( *i == '\"' ) 91 if( *i == '\"' )
85 { 92 {
86 for( i++; i && *i != '\"' ; i++ ) 93 for( i++; i && *i != '\"' ; i++ )
87 { 94 {
88 if( *i == '\\' ) 95 if( *i == '\\' )
89 i++; 96 i++;
90 sRet += i; 97 sRet += i;
91 } 98 }
92 i++; 99 i++;
93 } 100 }
94 else 101 else
95 { 102 {
96 for(; i && *i != ' ' && *i != '\t' && *i != '\r' && *i != '\n' && 103 for(; i && *i != ' ' && *i != '\t' && *i != '\r' && *i != '\n' &&
97 *i != ',' && *i != ']' && *i != '}' && *i != '[' && 104 *i != ',' && *i != ']' && *i != '}' && *i != '[' &&
98 *i != '{'; i++ ) 105 *i != '{'; i++ )
99 { 106 {
100 sRet += i; 107 sRet += i;
101 } 108 }
102 } 109 }
103 110
104 return sRet; 111 return sRet;
105} 112}
106 113
107Gats::Object *Gats::Object::strToGats( Bu::String::const_iterator &i ) 114Gats::Object *Gats::Object::strToGats( Bu::String::const_iterator &i )
108{ 115{
109 skipWs( i ); 116 skipWs( i );
110 117
111 switch( *i ) 118 switch( *i )
112 { 119 {
113 case '[': 120 case '[':
114 { 121 {
115 Gats::List *pLst = new Gats::List(); 122 Gats::List *pLst = new Gats::List();
116 i++; 123 i++;
117 for(;;) 124 for(;;)
118 { 125 {
119 skipWs( i ); 126 skipWs( i );
120 if( *i == ']' ) 127 if( *i == ']' )
121 { 128 {
122 i++; 129 i++;
123 return pLst; 130 return pLst;
124 } 131 }
125 Gats::Object *pObj = strToGats( i ); 132 Gats::Object *pObj = strToGats( i );
126 if( !pObj ) 133 if( !pObj )
127 break; 134 break;
128 pLst->append( pObj ); 135 pLst->append( pObj );
129 skipWs( i ); 136 skipWs( i );
130 switch( *i ) 137 switch( *i )
131 { 138 {
132 case ',': 139 case ',':
133 i++; 140 i++;
134 break; 141 break;
135 142
136 case ']': 143 case ']':
137 i++; 144 i++;
138 return pLst; 145 return pLst;
139 146
140 default: 147 default:
141 throw Bu::ExceptionBase("Invalid character found."); 148 throw Bu::ExceptionBase("Invalid character found.");
142 } 149 }
143 } 150 }
144 } 151 }
145 break; 152 break;
146 153
147 case '{': 154 case '{':
148 { 155 {
149 Gats::Dictionary *pDict = new Gats::Dictionary(); 156 Gats::Dictionary *pDict = new Gats::Dictionary();
150 i++; 157 i++;
151 for(;;) 158 for(;;)
152 { 159 {
153 skipWs( i ); 160 skipWs( i );
154 if( *i == '}' ) 161 if( *i == '}' )
155 { 162 {
156 i++; 163 i++;
157 return pDict; 164 return pDict;
158 } 165 }
159 if( *i != '\"' ) 166 if( *i != '\"' )
160 throw Bu::ExceptionBase("Keys must be quoted strings."); 167 throw Bu::ExceptionBase("Keys must be quoted strings.");
161 Bu::String sKey = token( i ); 168 Bu::String sKey = token( i );
162 skipWs( i ); 169 skipWs( i );
@@ -187,153 +194,153 @@ Gats::Object *Gats::Object::strToGats( Bu::String::const_iterator &i )
187 break; 194 break;
188 195
189 case '\"': 196 case '\"':
190 return new Gats::String( token( i ) ); 197 return new Gats::String( token( i ) );
191 break; 198 break;
192 199
193 case '0': 200 case '0':
194 case '1': 201 case '1':
195 case '2': 202 case '2':
196 case '3': 203 case '3':
197 case '4': 204 case '4':
198 case '5': 205 case '5':
199 case '6': 206 case '6':
200 case '7': 207 case '7':
201 case '8': 208 case '8':
202 case '9': 209 case '9':
203 case '.': 210 case '.':
204 case '+': 211 case '+':
205 case '-': 212 case '-':
206 { 213 {
207 Bu::String s = token( i ); 214 Bu::String s = token( i );
208 int iSize = s.getSize(); 215 int iSize = s.getSize();
209 if( s[iSize-1] == 'i' ) 216 if( s[iSize-1] == 'i' )
210 { 217 {
211 return new Gats::Integer( 218 return new Gats::Integer(
212 strtoll( s.getStr(), NULL, 10 ) 219 strtoll( s.getStr(), NULL, 10 )
213 ); 220 );
214 } 221 }
215 else if( s[iSize-1] == 'f' ) 222 else if( s[iSize-1] == 'f' )
216 { 223 {
217 return new Gats::Float( 224 return new Gats::Float(
218 strtod( s.getStr(), NULL ) 225 strtod( s.getStr(), NULL )
219 ); 226 );
220 } 227 }
221 else 228 else
222 { 229 {
223 for( Bu::String::iterator i = s.begin(); i; i++ ) 230 for( Bu::String::iterator i = s.begin(); i; i++ )
224 { 231 {
225 if( *i == '.' ) 232 if( *i == '.' )
226 return new Gats::Float( 233 return new Gats::Float(
227 strtod( s.getStr(), NULL ) 234 strtod( s.getStr(), NULL )
228 ); 235 );
229 } 236 }
230 return new Gats::Integer( 237 return new Gats::Integer(
231 strtoll( s.getStr(), NULL, 10 ) 238 strtoll( s.getStr(), NULL, 10 )
232 ); 239 );
233 } 240 }
234 } 241 }
235 break; 242 break;
236 243
237 default: 244 default:
238 { 245 {
239 Bu::String s = token( i ); 246 Bu::String s = token( i );
240 int iSize = s.getSize(); 247 int iSize = s.getSize();
241 // Test for explicit types first 248 // Test for explicit types first
242 if( iSize > 2 ) 249 if( iSize > 2 )
243 { 250 {
244 if( (s[0] >= '0' && s[0] <= '9') || s[0] == '+' || s[0] == '-' ) 251 if( (s[0] >= '0' && s[0] <= '9') || s[0] == '+' || s[0] == '-' )
245 { 252 {
246 } 253 }
247 else 254 else
248 { 255 {
249 Bu::String st = s.toLower(); 256 Bu::String st = s.toLower();
250 if( st == "true" ) 257 if( st == "true" )
251 { 258 {
252 return new Gats::Boolean( true ); 259 return new Gats::Boolean( true );
253 } 260 }
254 else if( st == "false" ) 261 else if( st == "false" )
255 { 262 {
256 return new Gats::Boolean( false ); 263 return new Gats::Boolean( false );
257 } 264 }
258 else if( st == "null" ) 265 else if( st == "null" )
259 { 266 {
260 return new Gats::Null(); 267 return new Gats::Null();
261 } 268 }
262 } 269 }
263 } 270 }
264 } 271 }
265 break; 272 break;
266 } 273 }
267 274
268 return NULL; 275 return NULL;
269} 276}
270 277
271Gats::Object *Gats::Object::strToGats( const Bu::String &sStr ) 278Gats::Object *Gats::Object::strToGats( const Bu::String &sStr )
272{ 279{
273 Bu::String::const_iterator i = sStr.begin(); 280 Bu::String::const_iterator i = sStr.begin();
274 281
275 return strToGats( i ); 282 return strToGats( i );
276} 283}
277 284
278Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Object &obj ) 285Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Object &obj )
279{ 286{
280 switch( obj.getType() ) 287 switch( obj.getType() )
281 { 288 {
282 case Gats::typeDictionary: 289 case Gats::typeDictionary:
283 return f << dynamic_cast<const Gats::Dictionary &>(obj); 290 return f << dynamic_cast<const Gats::Dictionary &>(obj);
284 291
285 case Gats::typeList: 292 case Gats::typeList:
286 return f << dynamic_cast<const Gats::List &>(obj); 293 return f << dynamic_cast<const Gats::List &>(obj);
287 294
288 case Gats::typeString: 295 case Gats::typeString:
289 return f << dynamic_cast<const Gats::String &>(obj); 296 return f << dynamic_cast<const Gats::String &>(obj);
290 297
291 case Gats::typeInteger: 298 case Gats::typeInteger:
292 return f << dynamic_cast<const Gats::Integer &>(obj); 299 return f << dynamic_cast<const Gats::Integer &>(obj);
293 300
294 case Gats::typeFloat: 301 case Gats::typeFloat:
295 return f << dynamic_cast<const Gats::Float &>(obj); 302 return f << dynamic_cast<const Gats::Float &>(obj);
296 303
297 case Gats::typeBoolean: 304 case Gats::typeBoolean:
298 return f << dynamic_cast<const Gats::Boolean &>(obj); 305 return f << dynamic_cast<const Gats::Boolean &>(obj);
299 306
300 case Gats::typeNull: 307 case Gats::typeNull:
301 return f << dynamic_cast<const Gats::Null &>(obj); 308 return f << dynamic_cast<const Gats::Null &>(obj);
302 309
303 default: 310 default:
304 return f << "***ERROR: Bad Gats type***"; 311 return f << "***ERROR: Bad Gats type***";
305 } 312 }
306} 313}
307 314
308Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Type &t ) 315Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Type &t )
309{ 316{
310 switch( t ) 317 switch( t )
311 { 318 {
312 case Gats::typeDictionary: return f << "dictionary"; 319 case Gats::typeDictionary: return f << "dictionary";
313 case Gats::typeList: return f << "list"; 320 case Gats::typeList: return f << "list";
314 case Gats::typeString: return f << "string"; 321 case Gats::typeString: return f << "string";
315 case Gats::typeInteger: return f << "integer"; 322 case Gats::typeInteger: return f << "integer";
316 case Gats::typeFloat: return f << "float"; 323 case Gats::typeFloat: return f << "float";
317 case Gats::typeBoolean: return f << "boolean"; 324 case Gats::typeBoolean: return f << "boolean";
318 case Gats::typeNull: return f << "null"; 325 case Gats::typeNull: return f << "null";
319 } 326 }
320 327
321 return f << "***unknown***"; 328 return f << "***unknown***";
322} 329}
323 330
324const char *Gats::typeToStr( Gats::Type t ) 331const char *Gats::typeToStr( Gats::Type t )
325{ 332{
326 switch( t ) 333 switch( t )
327 { 334 {
328 case Gats::typeDictionary: return "dictionary"; 335 case Gats::typeDictionary: return "dictionary";
329 case Gats::typeList: return "list"; 336 case Gats::typeList: return "list";
330 case Gats::typeString: return "string"; 337 case Gats::typeString: return "string";
331 case Gats::typeInteger: return "integer"; 338 case Gats::typeInteger: return "integer";
332 case Gats::typeFloat: return "float"; 339 case Gats::typeFloat: return "float";
333 case Gats::typeBoolean: return "boolean"; 340 case Gats::typeBoolean: return "boolean";
334 case Gats::typeNull: return "null"; 341 case Gats::typeNull: return "null";
335 } 342 }
336 343
337 return "***unknown***"; 344 return "***unknown***";
338} 345}
339 346
diff --git a/c++-libbu++/src/object.h b/c++-libbu++/src/object.h
index 2724189..e4da8de 100644
--- a/c++-libbu++/src/object.h
+++ b/c++-libbu++/src/object.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_OBJECT_H 8#ifndef GATS_OBJECT_H
2#define GATS_OBJECT_H 9#define GATS_OBJECT_H
3 10
@@ -5,48 +12,48 @@
5 12
6namespace Bu 13namespace Bu
7{ 14{
8 class Stream; 15 class Stream;
9 class Formatter; 16 class Formatter;
10}; 17};
11 18
12namespace Gats 19namespace Gats
13{ 20{
14 enum Type 21 enum Type
15 { 22 {
16 typeDictionary, 23 typeDictionary,
17 typeList, 24 typeList,
18 typeString, 25 typeString,
19 typeInteger, 26 typeInteger,
20 typeFloat, 27 typeFloat,
21 typeBoolean, 28 typeBoolean,
22 typeNull 29 typeNull
23 }; 30 };
24 31
25 /** 32 /**
26 * The baseclass for every type that can be stored in a packet. 33 * The baseclass for every type that can be stored in a packet.
27 */ 34 */
28 class Object 35 class Object
29 { 36 {
30 public: 37 public:
31 Object(); 38 Object();
32 virtual ~Object(); 39 virtual ~Object();
33 40
34 virtual Type getType() const =0; 41 virtual Type getType() const =0;
35 42
36 virtual void write( Bu::Stream &rOut ) const=0; 43 virtual void write( Bu::Stream &rOut ) const=0;
37 virtual void read( Bu::Stream &rIn, char cType )=0; 44 virtual void read( Bu::Stream &rIn, char cType )=0;
38 virtual Object *clone() const=0; 45 virtual Object *clone() const=0;
39 46
40 static Object *read( Bu::Stream &rIn ); 47 static Object *read( Bu::Stream &rIn );
41 static Object *strToGats( const Bu::String &sStr ); 48 static Object *strToGats( const Bu::String &sStr );
42 49
43 private: 50 private:
44 static Object *strToGats( Bu::String::const_iterator &i ); 51 static Object *strToGats( Bu::String::const_iterator &i );
45 static Bu::String token( Bu::String::const_iterator &i ); 52 static Bu::String token( Bu::String::const_iterator &i );
46 static void skipWs( Bu::String::const_iterator &i ); 53 static void skipWs( Bu::String::const_iterator &i );
47 }; 54 };
48 55
49 const char *typeToStr( Type t ); 56 const char *typeToStr( Type t );
50}; 57};
51 58
52Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Object &obj ); 59Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Object &obj );
diff --git a/c++-libbu++/src/protocolgats.cpp b/c++-libbu++/src/protocolgats.cpp
index 827eb65..f9d9e04 100644
--- a/c++-libbu++/src/protocolgats.cpp
+++ b/c++-libbu++/src/protocolgats.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats/protocolgats.h" 8#include "gats/protocolgats.h"
2#include "gats/gatsstream.h" 9#include "gats/gatsstream.h"
3 10
@@ -7,50 +14,50 @@
7using namespace Bu; 14using namespace Bu;
8 15
9Gats::ProtocolGats::ProtocolGats() : 16Gats::ProtocolGats::ProtocolGats() :
10 pStream( NULL ), 17 pStream( NULL ),
11 pUsedClient( NULL ) 18 pUsedClient( NULL )
12{ 19{
13} 20}
14 21
15Gats::ProtocolGats::~ProtocolGats() 22Gats::ProtocolGats::~ProtocolGats()
16{ 23{
17 delete pStream; 24 delete pStream;
18 pStream = NULL; 25 pStream = NULL;
19} 26}
20 27
21void Gats::ProtocolGats::onNewConnection( Bu::Client *pClient ) 28void Gats::ProtocolGats::onNewConnection( Bu::Client *pClient )
22{ 29{
23 if( pStream == NULL ) 30 if( pStream == NULL )
24 { 31 {
25 pStream = new Gats::GatsStream( *pClient ); 32 pStream = new Gats::GatsStream( *pClient );
26 pUsedClient = pClient; 33 pUsedClient = pClient;
27 } 34 }
28} 35}
29 36
30void Gats::ProtocolGats::onNewData( Bu::Client *pClient ) 37void Gats::ProtocolGats::onNewData( Bu::Client *pClient )
31{ 38{
32 if( pStream == NULL ) 39 if( pStream == NULL )
33 { 40 {
34 pStream = new Gats::GatsStream( *pClient ); 41 pStream = new Gats::GatsStream( *pClient );
35 pUsedClient = pClient; 42 pUsedClient = pClient;
36 } 43 }
37 else if( pClient != pUsedClient ) 44 else if( pClient != pUsedClient )
38 { 45 {
39 throw Bu::ExceptionBase("ProtocolGats requires that you maintain a " 46 throw Bu::ExceptionBase("ProtocolGats requires that you maintain a "
40 "1:1 relationship between client and protocol objects."); 47 "1:1 relationship between client and protocol objects.");
41 } 48 }
42 49
43 for(;;) 50 for(;;)
44 { 51 {
45 Gats::Object *pObj = pStream->readObject(); 52 Gats::Object *pObj = pStream->readObject();
46 if( pObj == NULL ) 53 if( pObj == NULL )
47 break; 54 break;
48 onNewObject( pClient, pObj ); 55 onNewObject( pClient, pObj );
49 } 56 }
50} 57}
51 58
52void Gats::ProtocolGats::writeObject( Gats::Object *pObj ) 59void Gats::ProtocolGats::writeObject( Gats::Object *pObj )
53{ 60{
54 pStream->writeObject( pObj ); 61 pStream->writeObject( pObj );
55} 62}
56 63
diff --git a/c++-libbu++/src/protocolgats.h b/c++-libbu++/src/protocolgats.h
index 7ed58d4..86dda00 100644
--- a/c++-libbu++/src/protocolgats.h
+++ b/c++-libbu++/src/protocolgats.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_PROTOCOL_GATS_H 8#ifndef GATS_PROTOCOL_GATS_H
2#define GATS_PROTOCOL_GATS_H 9#define GATS_PROTOCOL_GATS_H
3 10
@@ -5,26 +12,26 @@
5 12
6namespace Gats 13namespace Gats
7{ 14{
8 class Object; 15 class Object;
9 class GatsStream; 16 class GatsStream;
10 17
11 class ProtocolGats : public Bu::Protocol 18 class ProtocolGats : public Bu::Protocol
12 { 19 {
13 public: 20 public:
14 ProtocolGats(); 21 ProtocolGats();
15 virtual ~ProtocolGats(); 22 virtual ~ProtocolGats();
16 23
17 virtual void onNewConnection( Bu::Client *pClient ); 24 virtual void onNewConnection( Bu::Client *pClient );
18 virtual void onNewData( Bu::Client *pClient ); 25 virtual void onNewData( Bu::Client *pClient );
19 26
20 virtual void onNewObject( Bu::Client *pClient, Gats::Object *pObj )=0; 27 virtual void onNewObject( Bu::Client *pClient, Gats::Object *pObj )=0;
21 28
22 void writeObject( Gats::Object *pObj ); 29 void writeObject( Gats::Object *pObj );
23 30
24 private: 31 private:
25 Gats::GatsStream *pStream; 32 Gats::GatsStream *pStream;
26 Bu::Client *pUsedClient; 33 Bu::Client *pUsedClient;
27 }; 34 };
28}; 35};
29 36
30#endif 37#endif
diff --git a/c++-libbu++/src/string.cpp b/c++-libbu++/src/string.cpp
index de66d5d..f8e4071 100644
--- a/c++-libbu++/src/string.cpp
+++ b/c++-libbu++/src/string.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats/string.h" 8#include "gats/string.h"
2 9
3#include "gats/integer.h" 10#include "gats/integer.h"
@@ -9,27 +16,27 @@ Gats::String::String()
9} 16}
10 17
11Gats::String::String( const char *s ) : 18Gats::String::String( const char *s ) :
12 Bu::String( s ) 19 Bu::String( s )
13{ 20{
14} 21}
15 22
16Gats::String::String( const char *s, long iLength ) : 23Gats::String::String( const char *s, long iLength ) :
17 Bu::String( s, iLength ) 24 Bu::String( s, iLength )
18{ 25{
19} 26}
20 27
21Gats::String::String( long iLength ) : 28Gats::String::String( long iLength ) :
22 Bu::String( iLength ) 29 Bu::String( iLength )
23{ 30{
24} 31}
25 32
26Gats::String::String( const String &s ) : 33Gats::String::String( const String &s ) :
27 Bu::String( s ) 34 Bu::String( s )
28{ 35{
29} 36}
30 37
31Gats::String::String( const Bu::String &s ) : 38Gats::String::String( const Bu::String &s ) :
32 Bu::String( s ) 39 Bu::String( s )
33{ 40{
34} 41}
35 42
@@ -39,32 +46,32 @@ Gats::String::~String()
39 46
40Gats::Object *Gats::String::clone() const 47Gats::Object *Gats::String::clone() const
41{ 48{
42 return new Gats::String( Bu::String::clone() ); 49 return new Gats::String( Bu::String::clone() );
43} 50}
44 51
45void Gats::String::write( Bu::Stream &rOut ) const 52void Gats::String::write( Bu::Stream &rOut ) const
46{ 53{
47 rOut.write("s", 1 ); 54 rOut.write("s", 1 );
48 uint32_t iSize = getSize(); 55 uint32_t iSize = getSize();
49 Gats::Integer::writePackedInt( rOut, iSize ); 56 Gats::Integer::writePackedInt( rOut, iSize );
50 rOut.write( getStr(), iSize ); 57 rOut.write( getStr(), iSize );
51} 58}
52 59
53void Gats::String::read( Bu::Stream &rIn, char cType ) 60void Gats::String::read( Bu::Stream &rIn, char cType )
54{ 61{
55 uint32_t iSize; 62 uint32_t iSize;
56 Gats::Integer::readPackedInt( rIn, iSize ); 63 Gats::Integer::readPackedInt( rIn, iSize );
57 setSize( iSize ); 64 setSize( iSize );
58 rIn.read( getStr(), iSize ); 65 rIn.read( getStr(), iSize );
59} 66}
60 67
61Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::String &s ) 68Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::String &s )
62{ 69{
63 for( Gats::String::const_iterator i = s.begin(); i; i++ ) 70 for( Gats::String::const_iterator i = s.begin(); i; i++ )
64 { 71 {
65 if( *i >= 127 || *i <= 31 ) 72 if( *i >= 127 || *i <= 31 )
66 return f << "(binary str) " << s.getSize() << " bytes"; 73 return f << "(binary str) " << s.getSize() << " bytes";
67 } 74 }
68 return f << "(str) \"" << dynamic_cast<const Bu::String &>(s) << "\""; 75 return f << "(str) \"" << dynamic_cast<const Bu::String &>(s) << "\"";
69} 76}
70 77
diff --git a/c++-libbu++/src/string.h b/c++-libbu++/src/string.h
index de8eedd..0d17a3e 100644
--- a/c++-libbu++/src/string.h
+++ b/c++-libbu++/src/string.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_STRING_H 8#ifndef GATS_STRING_H
2#define GATS_STRING_H 9#define GATS_STRING_H
3 10
@@ -6,25 +13,25 @@
6 13
7namespace Gats 14namespace Gats
8{ 15{
9 class String : public Gats::Object, public Bu::String 16 class String : public Gats::Object, public Bu::String
10 { 17 {
11 public: 18 public:
12 String(); 19 String();
13 String( const char *s ); 20 String( const char *s );
14 String( const char *s, long iLength ); 21 String( const char *s, long iLength );
15 String( long iLength ); 22 String( long iLength );
16 String( const String &s ); 23 String( const String &s );
17 String( const Bu::String &s ); 24 String( const Bu::String &s );
18 virtual ~String(); 25 virtual ~String();
19 26
20 virtual Object *clone() const; 27 virtual Object *clone() const;
21 virtual Type getType() const { return typeString; } 28 virtual Type getType() const { return typeString; }
22 29
23 virtual void write( Bu::Stream &rOut ) const; 30 virtual void write( Bu::Stream &rOut ) const;
24 virtual void read( Bu::Stream &rIn, char cType ); 31 virtual void read( Bu::Stream &rIn, char cType );
25 32
26 private: 33 private:
27 }; 34 };
28}; 35};
29 36
30Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::String &s ); 37Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::String &s );
diff --git a/c++-libbu++/src/tests/clone.cpp b/c++-libbu++/src/tests/clone.cpp
index 8533376..bfb7b27 100644
--- a/c++-libbu++/src/tests/clone.cpp
+++ b/c++-libbu++/src/tests/clone.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats/types.h" 8#include "gats/types.h"
2 9
3#include <bu/sio.h> 10#include <bu/sio.h>
@@ -6,17 +13,17 @@ using namespace Bu;
6 13
7int main( int argc, char *argv[] ) 14int main( int argc, char *argv[] )
8{ 15{
9 Gats::Object *pBase = Gats::Object::strToGats("{\"Thing\": 3.14159, \"bool\": true, \"list\":[\"string\",44,{\"Stuff\":{\"list\":[],\"what?\":false}}]}"); 16 Gats::Object *pBase = Gats::Object::strToGats("{\"Thing\": 3.14159, \"bool\": true, \"list\":[\"string\",44,{\"Stuff\":{\"list\":[],\"what?\":false}}]}");
10 17
11 sio << *pBase << sio.nl; 18 sio << *pBase << sio.nl;
12 19
13 Gats::Object *pNew = pBase->clone(); 20 Gats::Object *pNew = pBase->clone();
14 delete pBase; 21 delete pBase;
15 22
16 sio << *pNew << sio.nl; 23 sio << *pNew << sio.nl;
17 24
18 delete pNew; 25 delete pNew;
19 26
20 return 0; 27 return 0;
21} 28}
22 29
diff --git a/c++-libbu++/src/tests/dump.cpp b/c++-libbu++/src/tests/dump.cpp
index e0dcb52..f1950b2 100644
--- a/c++-libbu++/src/tests/dump.cpp
+++ b/c++-libbu++/src/tests/dump.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include <bu/sio.h> 8#include <bu/sio.h>
2#include <bu/file.h> 9#include <bu/file.h>
3#include <gats/gatsstream.h> 10#include <gats/gatsstream.h>
@@ -7,24 +14,24 @@ using namespace Bu;
7 14
8int main( int argc, char *argv[] ) 15int main( int argc, char *argv[] )
9{ 16{
10 File fIn( argv[1], File::Read ); 17 File fIn( argv[1], File::Read );
11 Gats::GatsStream gsIn( fIn ); 18 Gats::GatsStream gsIn( fIn );
12 19
13 for(;;) 20 for(;;)
14 { 21 {
15 sio << "Reading from file position: " << fIn.tell() << sio.nl; 22 sio << "Reading from file position: " << fIn.tell() << sio.nl;
16 Gats::Object *pObj = gsIn.readObject(); 23 Gats::Object *pObj = gsIn.readObject();
17 if( !pObj ) 24 if( !pObj )
18 { 25 {
19 if( gsIn.hasReadBuffer() ) 26 if( gsIn.hasReadBuffer() )
20 { 27 {
21 sio << "Premature end of stream detected, have " 28 sio << "Premature end of stream detected, have "
22 << gsIn.getReadBufferSize() << "b." << sio.nl; 29 << gsIn.getReadBufferSize() << "b." << sio.nl;
23 } 30 }
24 return 0; 31 return 0;
25 } 32 }
26 33
27 sio << *pObj << sio.nl; 34 sio << *pObj << sio.nl;
28 } 35 }
29} 36}
30 37
diff --git a/c++-libbu++/src/tests/int.cpp b/c++-libbu++/src/tests/int.cpp
index c19df9c..25ef831 100644
--- a/c++-libbu++/src/tests/int.cpp
+++ b/c++-libbu++/src/tests/int.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats/integer.h" 8#include "gats/integer.h"
2 9
3#include <bu/sio.h> 10#include <bu/sio.h>
@@ -8,40 +15,40 @@ using namespace Bu;
8 15
9void hexdump( char *dat, int iSize ) 16void hexdump( char *dat, int iSize )
10{ 17{
11 static const char *hex="0123456789ABCDEF"; 18 static const char *hex="0123456789ABCDEF";
12 printf("----\n"); 19 printf("----\n");
13 for( int j = 0; j < iSize; j += 8 ) 20 for( int j = 0; j < iSize; j += 8 )
14 { 21 {
15 for( int k = j; /*k < iSize &&*/ k < j+8; k++ ) 22 for( int k = j; /*k < iSize &&*/ k < j+8; k++ )
16 printf((k<iSize)?"%c%c ":" ", hex[(dat[k]>>4)&0x0F], hex[dat[k]&0x0F] ); 23 printf((k<iSize)?"%c%c ":" ", hex[(dat[k]>>4)&0x0F], hex[dat[k]&0x0F] );
17 printf("| "); 24 printf("| ");
18 for( int k = j; k < iSize && k < j+8; k++ ) 25 for( int k = j; k < iSize && k < j+8; k++ )
19 printf("%c ", (dat[k]>13&&dat[k]<127)?(dat[k]):('.') ); 26 printf("%c ", (dat[k]>13&&dat[k]<127)?(dat[k]):('.') );
20 printf("\n"); 27 printf("\n");
21 } 28 }
22 printf("----\n"); 29 printf("----\n");
23} 30}
24 31
25int main( int argc, char *argv[] ) 32int main( int argc, char *argv[] )
26{ 33{
27 for( int j = 1; j < argc; j++ ) 34 for( int j = 1; j < argc; j++ )
28 { 35 {
29 int64_t i = strtoll( argv[j], NULL, 10 ); 36 int64_t i = strtoll( argv[j], NULL, 10 );
30 MemBuf mb; 37 MemBuf mb;
31 Gats::Integer::writePackedInt( mb, i ); 38 Gats::Integer::writePackedInt( mb, i );
32 hexdump( mb.getString().getStr(), mb.getString().getSize() ); 39 hexdump( mb.getString().getStr(), mb.getString().getSize() );
33 } 40 }
34/* 41/*
35 sio << "Before: " << i << sio.nl; 42 sio << "Before: " << i << sio.nl;
36 Gats::Integer::writePackedInt( mb, i ); 43 Gats::Integer::writePackedInt( mb, i );
37 mb.write("aaa", 3 ); 44 mb.write("aaa", 3 );
38 mb.setPos( 0 ); 45 mb.setPos( 0 );
39 Gats::Integer::readPackedInt( mb, i ); 46 Gats::Integer::readPackedInt( mb, i );
40 sio << "After: " << i << sio.nl; 47 sio << "After: " << i << sio.nl;
41 char buf[4]; 48 char buf[4];
42 buf[mb.read( buf, 3 )] = '\0'; 49 buf[mb.read( buf, 3 )] = '\0';
43 sio << "Extra: \"" << buf << "\"" << sio.nl; 50 sio << "Extra: \"" << buf << "\"" << sio.nl;
44*/ 51*/
45 return 0; 52 return 0;
46} 53}
47 54
diff --git a/c++-libbu++/src/types.h b/c++-libbu++/src/types.h
index 81240e8..50b3fb8 100644
--- a/c++-libbu++/src/types.h
+++ b/c++-libbu++/src/types.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats/object.h" 8#include "gats/object.h"
2#include "gats/boolean.h" 9#include "gats/boolean.h"
3#include "gats/dictionary.h" 10#include "gats/dictionary.h"
diff --git a/c++-qt/src/boolean.cpp b/c++-qt/src/boolean.cpp
index 3973607..1195bae 100644
--- a/c++-qt/src/boolean.cpp
+++ b/c++-qt/src/boolean.cpp
@@ -1,14 +1,21 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats-qt/boolean.h" 8#include "gats-qt/boolean.h"
2 9
3#include <QIODevice> 10#include <QIODevice>
4 11
5Gats::Boolean::Boolean() : 12Gats::Boolean::Boolean() :
6 bVal( false ) 13 bVal( false )
7{ 14{
8} 15}
9 16
10Gats::Boolean::Boolean( bool bVal ) : 17Gats::Boolean::Boolean( bool bVal ) :
11 bVal( bVal ) 18 bVal( bVal )
12{ 19{
13} 20}
14 21
@@ -18,35 +25,35 @@ Gats::Boolean::~Boolean()
18 25
19Gats::Object *Gats::Boolean::clone() const 26Gats::Object *Gats::Boolean::clone() const
20{ 27{
21 return new Gats::Boolean( bVal ); 28 return new Gats::Boolean( bVal );
22} 29}
23 30
24void Gats::Boolean::write( QIODevice &rOut ) const 31void Gats::Boolean::write( QIODevice &rOut ) const
25{ 32{
26 if( bVal ) 33 if( bVal )
27 { 34 {
28 rOut.write("1", 1 ); 35 rOut.write("1", 1 );
29 } 36 }
30 else 37 else
31 { 38 {
32 rOut.write("0", 1 ); 39 rOut.write("0", 1 );
33 } 40 }
34} 41}
35 42
36void Gats::Boolean::read( QIODevice &rIn, char cType ) 43void Gats::Boolean::read( QIODevice &rIn, char cType )
37{ 44{
38 if( cType == '1' ) 45 if( cType == '1' )
39 { 46 {
40 bVal = true; 47 bVal = true;
41 } 48 }
42 else 49 else
43 { 50 {
44 bVal = false; 51 bVal = false;
45 } 52 }
46} 53}
47/* 54/*
48Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Boolean &b ) 55Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Boolean &b )
49{ 56{
50 return f << "(bool) " << b.getValue(); 57 return f << "(bool) " << b.getValue();
51} 58}
52*/ 59*/
diff --git a/c++-qt/src/boolean.h b/c++-qt/src/boolean.h
index d707e4d..7e42981 100644
--- a/c++-qt/src/boolean.h
+++ b/c++-qt/src/boolean.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_BOOLEAN_H 8#ifndef GATS_BOOLEAN_H
2#define GATS_BOOLEAN_H 9#define GATS_BOOLEAN_H
3 10
@@ -7,26 +14,26 @@ class QIODevice;
7 14
8namespace Gats 15namespace Gats
9{ 16{
10 class Boolean : public Gats::Object 17 class Boolean : public Gats::Object
11 { 18 {
12 Q_OBJECT; 19 Q_OBJECT;
13 public: 20 public:
14 Boolean(); 21 Boolean();
15 Boolean( bool bVal ); 22 Boolean( bool bVal );
16 virtual ~Boolean(); 23 virtual ~Boolean();
17 24
18 virtual Object *clone() const; 25 virtual Object *clone() const;
19 26
20 virtual Type getType() const { return typeBoolean; } 27 virtual Type getType() const { return typeBoolean; }
21 bool getValue() const { return bVal; } 28 bool getValue() const { return bVal; }
22 void setValue( bool b ) { bVal = b; } 29 void setValue( bool b ) { bVal = b; }
23 30
24 virtual void write( QIODevice &rOut ) const; 31 virtual void write( QIODevice &rOut ) const;
25 virtual void read( QIODevice &rIn, char cType ); 32 virtual void read( QIODevice &rIn, char cType );
26 33
27 private: 34 private:
28 bool bVal; 35 bool bVal;
29 }; 36 };
30}; 37};
31 38
32//Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Boolean &b ); 39//Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Boolean &b );
diff --git a/c++-qt/src/dictionary.cpp b/c++-qt/src/dictionary.cpp
index edcbdb1..b2ef35e 100644
--- a/c++-qt/src/dictionary.cpp
+++ b/c++-qt/src/dictionary.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats-qt/dictionary.h" 8#include "gats-qt/dictionary.h"
2 9
3#include "gats-qt/boolean.h" 10#include "gats-qt/boolean.h"
@@ -12,352 +19,352 @@ Gats::Dictionary::Dictionary()
12 19
13Gats::Dictionary::~Dictionary() 20Gats::Dictionary::~Dictionary()
14{ 21{
15 for( iterator i = begin(); i != end(); i++ ) 22 for( iterator i = begin(); i != end(); i++ )
16 { 23 {
17 delete *i; 24 delete *i;
18 } 25 }
19} 26}
20 27
21Gats::Object *Gats::Dictionary::clone() const 28Gats::Object *Gats::Dictionary::clone() const
22{ 29{
23 Gats::Dictionary *pClone = new Gats::Dictionary; 30 Gats::Dictionary *pClone = new Gats::Dictionary;
24 31
25 for( const_iterator i = begin(); i != end(); i++ ) 32 for( const_iterator i = begin(); i != end(); i++ )
26 { 33 {
27 QByteArray bKey = i.key(); 34 QByteArray bKey = i.key();
28 bKey.detach(); 35 bKey.detach();
29 pClone->insert( bKey, (*i)->clone() ); 36 pClone->insert( bKey, (*i)->clone() );
30 } 37 }
31 38
32 return pClone; 39 return pClone;
33} 40}
34 41
35void Gats::Dictionary::write( QIODevice &rOut ) const 42void Gats::Dictionary::write( QIODevice &rOut ) const
36{ 43{
37 rOut.write("d", 1 ); 44 rOut.write("d", 1 );
38 for( const_iterator i= begin(); i != end(); i++ ) 45 for( const_iterator i= begin(); i != end(); i++ )
39 { 46 {
40 Gats::String s( i.key() ); 47 Gats::String s( i.key() );
41 s.write( rOut ); 48 s.write( rOut );
42 (*i)->write( rOut ); 49 (*i)->write( rOut );
43 } 50 }
44 rOut.write("e", 1 ); 51 rOut.write("e", 1 );
45} 52}
46 53
47void Gats::Dictionary::read( QIODevice &rIn, char cType ) 54void Gats::Dictionary::read( QIODevice &rIn, char cType )
48{ 55{
49 for(;;) 56 for(;;)
50 { 57 {
51 char cNext; 58 char cNext;
52 rIn.read( &cNext, 1 ); 59 rIn.read( &cNext, 1 );
53 if( cNext == 'e' ) 60 if( cNext == 'e' )
54 break; 61 break;
55 if( cNext != 's' ) 62 if( cNext != 's' )
56 throw "PUT GOOD EXCEPTION HERE"; 63 throw "PUT GOOD EXCEPTION HERE";
57 Gats::String sKey; 64 Gats::String sKey;
58 sKey.read( rIn, cNext ); 65 sKey.read( rIn, cNext );
59 66
60 ((QHash<QByteArray, Gats::Object *> *)this)->insert( 67 ((QHash<QByteArray, Gats::Object *> *)this)->insert(
61 sKey, Gats::Object::read( rIn ) 68 sKey, Gats::Object::read( rIn )
62 ); 69 );
63 } 70 }
64} 71}
65 72
66void Gats::Dictionary::insert( const QByteArray &sKey, char i ) 73void Gats::Dictionary::insert( const QByteArray &sKey, char i )
67{ 74{
68 ((QHash<QByteArray, Gats::Object *> *)this)->insert( 75 ((QHash<QByteArray, Gats::Object *> *)this)->insert(
69 sKey, new Gats::Integer( i ) 76 sKey, new Gats::Integer( i )
70 ); 77 );
71} 78}
72 79
73void Gats::Dictionary::insert( const QByteArray &sKey, unsigned char i ) 80void Gats::Dictionary::insert( const QByteArray &sKey, unsigned char i )
74{ 81{
75 ((QHash<QByteArray, Gats::Object *> *)this)->insert( 82 ((QHash<QByteArray, Gats::Object *> *)this)->insert(
76 sKey, new Gats::Integer( i ) 83 sKey, new Gats::Integer( i )
77 ); 84 );
78} 85}
79 86
80void Gats::Dictionary::insert( const QByteArray &sKey, signed char i ) 87void Gats::Dictionary::insert( const QByteArray &sKey, signed char i )
81{ 88{
82 ((QHash<QByteArray, Gats::Object *> *)this)->insert( 89 ((QHash<QByteArray, Gats::Object *> *)this)->insert(
83 sKey, new Gats::Integer( i ) 90 sKey, new Gats::Integer( i )
84 ); 91 );
85} 92}
86 93
87void Gats::Dictionary::insert( const QByteArray &sKey, unsigned short i ) 94void Gats::Dictionary::insert( const QByteArray &sKey, unsigned short i )
88{ 95{
89 ((QHash<QByteArray, Gats::Object *> *)this)->insert( 96 ((QHash<QByteArray, Gats::Object *> *)this)->insert(
90 sKey, new Gats::Integer( i ) 97 sKey, new Gats::Integer( i )
91 ); 98 );
92} 99}
93 100
94void Gats::Dictionary::insert( const QByteArray &sKey, signed short i ) 101void Gats::Dictionary::insert( const QByteArray &sKey, signed short i )
95{ 102{
96 ((QHash<QByteArray, Gats::Object *> *)this)->insert( 103 ((QHash<QByteArray, Gats::Object *> *)this)->insert(
97 sKey, new Gats::Integer( i ) 104 sKey, new Gats::Integer( i )
98 ); 105 );
99} 106}
100 107
101void Gats::Dictionary::insert( const QByteArray &sKey, unsigned int i ) 108void Gats::Dictionary::insert( const QByteArray &sKey, unsigned int i )
102{ 109{
103 ((QHash<QByteArray, Gats::Object *> *)this)->insert( 110 ((QHash<QByteArray, Gats::Object *> *)this)->insert(
104 sKey, new Gats::Integer( i ) 111 sKey, new Gats::Integer( i )
105 ); 112 );
106} 113}
107 114
108void Gats::Dictionary::insert( const QByteArray &sKey, signed int i ) 115void Gats::Dictionary::insert( const QByteArray &sKey, signed int i )
109{ 116{
110 ((QHash<QByteArray, Gats::Object *> *)this)->insert( 117 ((QHash<QByteArray, Gats::Object *> *)this)->insert(
111 sKey, new Gats::Integer( i ) 118 sKey, new Gats::Integer( i )
112 ); 119 );
113} 120}
114 121
115void Gats::Dictionary::insert( const QByteArray &sKey, unsigned long i ) 122void Gats::Dictionary::insert( const QByteArray &sKey, unsigned long i )
116{ 123{
117 ((QHash<QByteArray, Gats::Object *> *)this)->insert( 124 ((QHash<QByteArray, Gats::Object *> *)this)->insert(
118 sKey, new Gats::Integer( i ) 125 sKey, new Gats::Integer( i )
119 ); 126 );
120} 127}
121 128
122void Gats::Dictionary::insert( const QByteArray &sKey, signed long i ) 129void Gats::Dictionary::insert( const QByteArray &sKey, signed long i )
123{ 130{
124 ((QHash<QByteArray, Gats::Object *> *)this)->insert( 131 ((QHash<QByteArray, Gats::Object *> *)this)->insert(
125 sKey, new Gats::Integer( i ) 132 sKey, new Gats::Integer( i )
126 ); 133 );
127} 134}
128 135
129void Gats::Dictionary::insert( const QByteArray &sKey, unsigned long long i ) 136void Gats::Dictionary::insert( const QByteArray &sKey, unsigned long long i )
130{ 137{
131 ((QHash<QByteArray, Gats::Object *> *)this)->insert( 138 ((QHash<QByteArray, Gats::Object *> *)this)->insert(
132 sKey, new Gats::Integer( i ) 139 sKey, new Gats::Integer( i )
133 ); 140 );
134} 141}
135 142
136void Gats::Dictionary::insert( const QByteArray &sKey, signed long long i ) 143void Gats::Dictionary::insert( const QByteArray &sKey, signed long long i )
137{ 144{
138 ((QHash<QByteArray, Gats::Object *> *)this)->insert( 145 ((QHash<QByteArray, Gats::Object *> *)this)->insert(
139 sKey, new Gats::Integer( i ) 146 sKey, new Gats::Integer( i )
140 ); 147 );
141} 148}
142/* 149/*
143void Gats::Dictionary::insert( const QByteArray &sKey, bool b ) 150void Gats::Dictionary::insert( const QByteArray &sKey, bool b )
144{ 151{
145 QHash<QByteArray, Gats::Object *>::insert( 152 QHash<QByteArray, Gats::Object *>::insert(
146 sKey, new Gats::Boolean( b ) 153 sKey, new Gats::Boolean( b )
147 ); 154 );
148}*/ 155}*/
149 156
150void Gats::Dictionary::insert( const QByteArray &sKey, float d ) 157void Gats::Dictionary::insert( const QByteArray &sKey, float d )
151{ 158{
152 QHash<QByteArray, Gats::Object *>::insert( 159 QHash<QByteArray, Gats::Object *>::insert(
153 sKey, new Gats::Float( d ) 160 sKey, new Gats::Float( d )
154 ); 161 );
155} 162}
156 163
157void Gats::Dictionary::insert( const QByteArray &sKey, double d ) 164void Gats::Dictionary::insert( const QByteArray &sKey, double d )
158{ 165{
159 QHash<QByteArray, Gats::Object *>::insert( 166 QHash<QByteArray, Gats::Object *>::insert(
160 sKey, new Gats::Float( d ) 167 sKey, new Gats::Float( d )
161 ); 168 );
162} 169}
163 170
164void Gats::Dictionary::insert( const QByteArray &sKey, const char *s ) 171void Gats::Dictionary::insert( const QByteArray &sKey, const char *s )
165{ 172{
166 QHash<QByteArray, Gats::Object *>::insert( 173 QHash<QByteArray, Gats::Object *>::insert(
167 sKey, new Gats::String( s ) 174 sKey, new Gats::String( s )
168 ); 175 );
169} 176}
170 177
171void Gats::Dictionary::insert( const QByteArray &sKey, const QByteArray &s ) 178void Gats::Dictionary::insert( const QByteArray &sKey, const QByteArray &s )
172{ 179{
173 QHash<QByteArray, Gats::Object *>::insert( 180 QHash<QByteArray, Gats::Object *>::insert(
174 sKey, new Gats::String( s ) 181 sKey, new Gats::String( s )
175 ); 182 );
176} 183}
177 184
178void Gats::Dictionary::insertBool( const QByteArray &sKey, bool b ) 185void Gats::Dictionary::insertBool( const QByteArray &sKey, bool b )
179{ 186{
180 QHash<QByteArray, Gats::Object *>::insert( 187 QHash<QByteArray, Gats::Object *>::insert(
181 sKey, new Gats::Boolean( b ) 188 sKey, new Gats::Boolean( b )
182 ); 189 );
183} 190}
184 191
185void Gats::Dictionary::insertInt( const QByteArray &sKey, int64_t i ) 192void Gats::Dictionary::insertInt( const QByteArray &sKey, int64_t i )
186{ 193{
187 QHash<QByteArray, Gats::Object *>::insert( 194 QHash<QByteArray, Gats::Object *>::insert(
188 sKey, new Gats::Integer( i ) 195 sKey, new Gats::Integer( i )
189 ); 196 );
190} 197}
191 198
192void Gats::Dictionary::insertFloat( const QByteArray &sKey, double d ) 199void Gats::Dictionary::insertFloat( const QByteArray &sKey, double d )
193{ 200{
194 QHash<QByteArray, Gats::Object *>::insert( 201 QHash<QByteArray, Gats::Object *>::insert(
195 sKey, new Gats::Float( d ) 202 sKey, new Gats::Float( d )
196 ); 203 );
197} 204}
198 205
199void Gats::Dictionary::insertStr( const QByteArray &sKey, const QByteArray &s ) 206void Gats::Dictionary::insertStr( const QByteArray &sKey, const QByteArray &s )
200{ 207{
201 QHash<QByteArray, Gats::Object *>::insert( 208 QHash<QByteArray, Gats::Object *>::insert(
202 sKey, new Gats::String( s ) 209 sKey, new Gats::String( s )
203 ); 210 );
204} 211}
205 212
206void Gats::Dictionary::insertList( const QByteArray &sKey, Gats::List *pL ) 213void Gats::Dictionary::insertList( const QByteArray &sKey, Gats::List *pL )
207{ 214{
208 QHash<QByteArray, Gats::Object *>::insert( 215 QHash<QByteArray, Gats::Object *>::insert(
209 sKey, pL 216 sKey, pL
210 ); 217 );
211} 218}
212 219
213void Gats::Dictionary::insertDict( const QByteArray &sKey, 220void Gats::Dictionary::insertDict( const QByteArray &sKey,
214 Gats::Dictionary *pD ) 221 Gats::Dictionary *pD )
215{ 222{
216 QHash<QByteArray, Gats::Object *>::insert( 223 QHash<QByteArray, Gats::Object *>::insert(
217 sKey, pD 224 sKey, pD
218 ); 225 );
219} 226}
220 227
221Gats::List *Gats::Dictionary::insertList( const QByteArray &sKey ) 228Gats::List *Gats::Dictionary::insertList( const QByteArray &sKey )
222{ 229{
223 Gats::List *pLst = new Gats::List(); 230 Gats::List *pLst = new Gats::List();
224 insertList( sKey, pLst ); 231 insertList( sKey, pLst );
225 return pLst; 232 return pLst;
226} 233}
227 234
228Gats::Dictionary *Gats::Dictionary::insertDict( const QByteArray &sKey ) 235Gats::Dictionary *Gats::Dictionary::insertDict( const QByteArray &sKey )
229{ 236{
230 Gats::Dictionary *pDict = new Gats::Dictionary(); 237 Gats::Dictionary *pDict = new Gats::Dictionary();
231 insertDict( sKey, pDict ); 238 insertDict( sKey, pDict );
232 return pDict; 239 return pDict;
233} 240}
234 241
235bool Gats::Dictionary::valueBool( const QByteArray &sKey ) 242bool Gats::Dictionary::valueBool( const QByteArray &sKey )
236{ 243{
237 Gats::Boolean *pOb = dynamic_cast<Gats::Boolean *>( value( sKey ) ); 244 Gats::Boolean *pOb = dynamic_cast<Gats::Boolean *>( value( sKey ) );
238 if( !pOb ) 245 if( !pOb )
239 throw "PUT GOOD EXCEPTION HERE"; 246 throw "PUT GOOD EXCEPTION HERE";
240 247
241 return pOb->getValue(); 248 return pOb->getValue();
242} 249}
243 250
244int64_t Gats::Dictionary::valueInt( const QByteArray &sKey ) 251int64_t Gats::Dictionary::valueInt( const QByteArray &sKey )
245{ 252{
246 Gats::Integer *pOb = dynamic_cast<Gats::Integer *>( value( sKey ) ); 253 Gats::Integer *pOb = dynamic_cast<Gats::Integer *>( value( sKey ) );
247 if( !pOb ) 254 if( !pOb )
248 throw "PUT GOOD EXCEPTION HERE"; 255 throw "PUT GOOD EXCEPTION HERE";
249 256
250 return pOb->getValue(); 257 return pOb->getValue();
251} 258}
252 259
253double Gats::Dictionary::valueFloat( const QByteArray &sKey ) 260double Gats::Dictionary::valueFloat( const QByteArray &sKey )
254{ 261{
255 Gats::Float *pOb = dynamic_cast<Gats::Float *>( value( sKey ) ); 262 Gats::Float *pOb = dynamic_cast<Gats::Float *>( value( sKey ) );
256 if( !pOb ) 263 if( !pOb )
257 throw "PUT GOOD EXCEPTION HERE"; 264 throw "PUT GOOD EXCEPTION HERE";
258 265
259 return pOb->getValue(); 266 return pOb->getValue();
260} 267}
261 268
262QByteArray Gats::Dictionary::valueStr( const QByteArray &sKey ) 269QByteArray Gats::Dictionary::valueStr( const QByteArray &sKey )
263{ 270{
264 Gats::String *pOb = dynamic_cast<Gats::String *>( value( sKey ) ); 271 Gats::String *pOb = dynamic_cast<Gats::String *>( value( sKey ) );
265 if( !pOb ) 272 if( !pOb )
266 throw "PUT GOOD EXCEPTION HERE"; 273 throw "PUT GOOD EXCEPTION HERE";
267 274
268 return *pOb; 275 return *pOb;
269} 276}
270 277
271Gats::List *Gats::Dictionary::valueList( const QByteArray &sKey ) 278Gats::List *Gats::Dictionary::valueList( const QByteArray &sKey )
272{ 279{
273 Gats::List *pOb = dynamic_cast<Gats::List *>( value( sKey ) ); 280 Gats::List *pOb = dynamic_cast<Gats::List *>( value( sKey ) );
274 if( !pOb ) 281 if( !pOb )
275 throw "PUT GOOD EXCEPTION HERE"; 282 throw "PUT GOOD EXCEPTION HERE";
276 283
277 return pOb; 284 return pOb;
278} 285}
279 286
280Gats::Dictionary *Gats::Dictionary::valueDict( const QByteArray &sKey ) 287Gats::Dictionary *Gats::Dictionary::valueDict( const QByteArray &sKey )
281{ 288{
282 Gats::Dictionary *pOb = dynamic_cast<Gats::Dictionary *>( value( sKey ) ); 289 Gats::Dictionary *pOb = dynamic_cast<Gats::Dictionary *>( value( sKey ) );
283 if( !pOb ) 290 if( !pOb )
284 throw "PUT GOOD EXCEPTION HERE"; 291 throw "PUT GOOD EXCEPTION HERE";
285 292
286 return pOb; 293 return pOb;
287} 294}
288 295
289bool Gats::Dictionary::valueBool( const QByteArray &sKey ) const 296bool Gats::Dictionary::valueBool( const QByteArray &sKey ) const
290{ 297{
291 Gats::Boolean *pOb = dynamic_cast<Gats::Boolean *>( value( sKey ) ); 298 Gats::Boolean *pOb = dynamic_cast<Gats::Boolean *>( value( sKey ) );
292 if( !pOb ) 299 if( !pOb )
293 throw "PUT GOOD EXCEPTION HERE"; 300 throw "PUT GOOD EXCEPTION HERE";
294 301
295 return pOb->getValue(); 302 return pOb->getValue();
296} 303}
297 304
298int64_t Gats::Dictionary::valueInt( const QByteArray &sKey ) const 305int64_t Gats::Dictionary::valueInt( const QByteArray &sKey ) const
299{ 306{
300 Gats::Integer *pOb = dynamic_cast<Gats::Integer *>( value( sKey ) ); 307 Gats::Integer *pOb = dynamic_cast<Gats::Integer *>( value( sKey ) );
301 if( !pOb ) 308 if( !pOb )
302 throw "PUT GOOD EXCEPTION HERE"; 309 throw "PUT GOOD EXCEPTION HERE";
303 310
304 return pOb->getValue(); 311 return pOb->getValue();
305} 312}
306 313
307double Gats::Dictionary::valueFloat( const QByteArray &sKey ) const 314double Gats::Dictionary::valueFloat( const QByteArray &sKey ) const
308{ 315{
309 Gats::Float *pOb = dynamic_cast<Gats::Float *>( value( sKey ) ); 316 Gats::Float *pOb = dynamic_cast<Gats::Float *>( value( sKey ) );
310 if( !pOb ) 317 if( !pOb )
311 throw "PUT GOOD EXCEPTION HERE"; 318 throw "PUT GOOD EXCEPTION HERE";
312 319
313 return pOb->getValue(); 320 return pOb->getValue();
314} 321}
315 322
316QByteArray Gats::Dictionary::valueStr( const QByteArray &sKey ) const 323QByteArray Gats::Dictionary::valueStr( const QByteArray &sKey ) const
317{ 324{
318 Gats::String *pOb = dynamic_cast<Gats::String *>( value( sKey ) ); 325 Gats::String *pOb = dynamic_cast<Gats::String *>( value( sKey ) );
319 if( !pOb ) 326 if( !pOb )
320 throw "PUT GOOD EXCEPTION HERE"; 327 throw "PUT GOOD EXCEPTION HERE";
321 328
322 return *pOb; 329 return *pOb;
323} 330}
324 331
325Gats::List *Gats::Dictionary::valueList( const QByteArray &sKey ) const 332Gats::List *Gats::Dictionary::valueList( const QByteArray &sKey ) const
326{ 333{
327 Gats::List *pOb = dynamic_cast<Gats::List *>( value( sKey ) ); 334 Gats::List *pOb = dynamic_cast<Gats::List *>( value( sKey ) );
328 if( !pOb ) 335 if( !pOb )
329 throw "PUT GOOD EXCEPTION HERE"; 336 throw "PUT GOOD EXCEPTION HERE";
330 337
331 return pOb; 338 return pOb;
332} 339}
333 340
334Gats::Dictionary *Gats::Dictionary::valueDict( const QByteArray &sKey ) const 341Gats::Dictionary *Gats::Dictionary::valueDict( const QByteArray &sKey ) const
335{ 342{
336 Gats::Dictionary *pOb = dynamic_cast<Gats::Dictionary *>( value( sKey ) ); 343 Gats::Dictionary *pOb = dynamic_cast<Gats::Dictionary *>( value( sKey ) );
337 if( !pOb ) 344 if( !pOb )
338 throw "PUT GOOD EXCEPTION HERE"; 345 throw "PUT GOOD EXCEPTION HERE";
339 346
340 return pOb; 347 return pOb;
341} 348}
342/* 349/*
343Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Dictionary &d ) 350Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Dictionary &d )
344{ 351{
345 f << "(dict) {"; 352 f << "(dict) {";
346 f.incIndent(); 353 f.incIndent();
347 int iMax = 0; 354 int iMax = 0;
348 for( Gats::Dictionary::const_iterator i = d.begin(); i; i++ ) 355 for( Gats::Dictionary::const_iterator i = d.begin(); i; i++ )
349 { 356 {
350 if( i.valueKey().valueSize() > iMax ) 357 if( i.valueKey().valueSize() > iMax )
351 iMax = i.valueKey().valueSize(); 358 iMax = i.valueKey().valueSize();
352 } 359 }
353 iMax += 2; 360 iMax += 2;
354 for( Gats::Dictionary::const_iterator i = d.begin(); i; i++ ) 361 for( Gats::Dictionary::const_iterator i = d.begin(); i; i++ )
355 { 362 {
356 f << f.nl << Bu::Fmt( iMax ) << i.valueKey() + ": " << *i.getValue(); 363 f << f.nl << Bu::Fmt( iMax ) << i.valueKey() + ": " << *i.getValue();
357 } 364 }
358 f.decIndent(); 365 f.decIndent();
359 f << f.nl << "}"; 366 f << f.nl << "}";
360 367
361 return f; 368 return f;
362} 369}
363*/ 370*/
diff --git a/c++-qt/src/dictionary.h b/c++-qt/src/dictionary.h
index 7f95cf1..af1d436 100644
--- a/c++-qt/src/dictionary.h
+++ b/c++-qt/src/dictionary.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_DICTIONARY_H 8#ifndef GATS_DICTIONARY_H
2#define GATS_DICTIONARY_H 9#define GATS_DICTIONARY_H
3 10
@@ -7,62 +14,62 @@
7 14
8namespace Gats 15namespace Gats
9{ 16{
10 class List; 17 class List;
11 18
12 class Dictionary : public Gats::Object, 19 class Dictionary : public Gats::Object,
13 public QHash<QByteArray, Gats::Object *> 20 public QHash<QByteArray, Gats::Object *>
14 { 21 {
15 Q_OBJECT; 22 Q_OBJECT;
16 public: 23 public:
17 Dictionary(); 24 Dictionary();
18 virtual ~Dictionary(); 25 virtual ~Dictionary();
19 26
20 virtual Object *clone() const; 27 virtual Object *clone() const;
21 28
22 virtual Type getType() const { return typeDictionary; } 29 virtual Type getType() const { return typeDictionary; }
23 virtual void write( QIODevice &rOut ) const; 30 virtual void write( QIODevice &rOut ) const;
24 virtual void read( QIODevice &rIn, char cType ); 31 virtual void read( QIODevice &rIn, char cType );
25 32
26 void insert( const QByteArray &sKey, const char *s ); 33 void insert( const QByteArray &sKey, const char *s );
27 void insert( const QByteArray &sKey, const QByteArray &s ); 34 void insert( const QByteArray &sKey, const QByteArray &s );
28 void insert( const QByteArray &sKey, char i ); 35 void insert( const QByteArray &sKey, char i );
29 void insert( const QByteArray &sKey, unsigned char i ); 36 void insert( const QByteArray &sKey, unsigned char i );
30 void insert( const QByteArray &sKey, signed char i ); 37 void insert( const QByteArray &sKey, signed char i );
31 void insert( const QByteArray &sKey, unsigned short i ); 38 void insert( const QByteArray &sKey, unsigned short i );
32 void insert( const QByteArray &sKey, signed short i ); 39 void insert( const QByteArray &sKey, signed short i );
33 void insert( const QByteArray &sKey, unsigned int i ); 40 void insert( const QByteArray &sKey, unsigned int i );
34 void insert( const QByteArray &sKey, signed int i ); 41 void insert( const QByteArray &sKey, signed int i );
35 void insert( const QByteArray &sKey, unsigned long i ); 42 void insert( const QByteArray &sKey, unsigned long i );
36 void insert( const QByteArray &sKey, signed long i ); 43 void insert( const QByteArray &sKey, signed long i );
37 void insert( const QByteArray &sKey, unsigned long long i ); 44 void insert( const QByteArray &sKey, unsigned long long i );
38 void insert( const QByteArray &sKey, signed long long i ); 45 void insert( const QByteArray &sKey, signed long long i );
39 //void insert( const QByteArray &sKey, bool b ); 46 //void insert( const QByteArray &sKey, bool b );
40 void insert( const QByteArray &sKey, float d ); 47 void insert( const QByteArray &sKey, float d );
41 void insert( const QByteArray &sKey, double d ); 48 void insert( const QByteArray &sKey, double d );
42 using QHash<QByteArray, Gats::Object *>::insert; 49 using QHash<QByteArray, Gats::Object *>::insert;
43 void insertBool( const QByteArray &sKey, bool b ); 50 void insertBool( const QByteArray &sKey, bool b );
44 void insertInt( const QByteArray &sKey, int64_t i ); 51 void insertInt( const QByteArray &sKey, int64_t i );
45 void insertFloat( const QByteArray &sKey, double d ); 52 void insertFloat( const QByteArray &sKey, double d );
46 void insertStr( const QByteArray &sKey, const QByteArray &s ); 53 void insertStr( const QByteArray &sKey, const QByteArray &s );
47 void insertList( const QByteArray &sKey, Gats::List *pL ); 54 void insertList( const QByteArray &sKey, Gats::List *pL );
48 void insertDict( const QByteArray &sKey, Gats::Dictionary *pD ); 55 void insertDict( const QByteArray &sKey, Gats::Dictionary *pD );
49 Gats::List *insertList( const QByteArray &sKey ); 56 Gats::List *insertList( const QByteArray &sKey );
50 Gats::Dictionary *insertDict( const QByteArray &sKey ); 57 Gats::Dictionary *insertDict( const QByteArray &sKey );
51 58
52 bool valueBool( const QByteArray &sKey ); 59 bool valueBool( const QByteArray &sKey );
53 int64_t valueInt( const QByteArray &sKey ); 60 int64_t valueInt( const QByteArray &sKey );
54 double valueFloat( const QByteArray &sKey ); 61 double valueFloat( const QByteArray &sKey );
55 QByteArray valueStr( const QByteArray &sKey ); 62 QByteArray valueStr( const QByteArray &sKey );
56 Gats::List *valueList( const QByteArray &sKey ); 63 Gats::List *valueList( const QByteArray &sKey );
57 Gats::Dictionary *valueDict( const QByteArray &sKey ); 64 Gats::Dictionary *valueDict( const QByteArray &sKey );
58 65
59 bool valueBool( const QByteArray &sKey ) const; 66 bool valueBool( const QByteArray &sKey ) const;
60 int64_t valueInt( const QByteArray &sKey ) const; 67 int64_t valueInt( const QByteArray &sKey ) const;
61 double valueFloat( const QByteArray &sKey ) const; 68 double valueFloat( const QByteArray &sKey ) const;
62 QByteArray valueStr( const QByteArray &sKey ) const; 69 QByteArray valueStr( const QByteArray &sKey ) const;
63 Gats::List *valueList( const QByteArray &sKey ) const; 70 Gats::List *valueList( const QByteArray &sKey ) const;
64 Gats::Dictionary *valueDict( const QByteArray &sKey ) const; 71 Gats::Dictionary *valueDict( const QByteArray &sKey ) const;
65 }; 72 };
66}; 73};
67 74
68//Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Dictionary &d ); 75//Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Dictionary &d );
diff --git a/c++-qt/src/float.cpp b/c++-qt/src/float.cpp
index fedecf3..03ff755 100644
--- a/c++-qt/src/float.cpp
+++ b/c++-qt/src/float.cpp
@@ -1,15 +1,22 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats-qt/float.h" 8#include "gats-qt/float.h"
2#include "gats-qt/integer.h" 9#include "gats-qt/integer.h"
3 10
4#include <math.h> 11#include <math.h>
5 12
6Gats::Float::Float() : 13Gats::Float::Float() :
7 fVal( 0.0 ) 14 fVal( 0.0 )
8{ 15{
9} 16}
10 17
11Gats::Float::Float( double f ) : 18Gats::Float::Float( double f ) :
12 fVal( f ) 19 fVal( f )
13{ 20{
14} 21}
15 22
@@ -19,109 +26,109 @@ Gats::Float::~Float()
19 26
20Gats::Object *Gats::Float::clone() const 27Gats::Object *Gats::Float::clone() const
21{ 28{
22 return new Gats::Float( fVal ); 29 return new Gats::Float( fVal );
23} 30}
24 31
25void Gats::Float::write( QIODevice &rOut ) const 32void Gats::Float::write( QIODevice &rOut ) const
26{ 33{
27 if( fVal == 0.0 ) 34 if( fVal == 0.0 )
28 { 35 {
29 if( signbit( fVal ) ) 36 if( signbit( fVal ) )
30 rOut.write("FZ", 2 ); 37 rOut.write("FZ", 2 );
31 else 38 else
32 rOut.write("Fz", 2 ); 39 rOut.write("Fz", 2 );
33 } 40 }
34 else if( !isfinite( fVal ) ) 41 else if( !isfinite( fVal ) )
35 { 42 {
36 if( isnan( fVal ) ) 43 if( isnan( fVal ) )
37 { 44 {
38 if( signbit( fVal ) ) 45 if( signbit( fVal ) )
39 rOut.write("FN", 2 ); 46 rOut.write("FN", 2 );
40 else 47 else
41 rOut.write("Fn", 2 ); 48 rOut.write("Fn", 2 );
42 } 49 }
43 else 50 else
44 { 51 {
45 if( signbit( fVal ) ) 52 if( signbit( fVal ) )
46 rOut.write("FI", 2 ); 53 rOut.write("FI", 2 );
47 else 54 else
48 rOut.write("Fi", 2 ); 55 rOut.write("Fi", 2 );
49 } 56 }
50 } 57 }
51 else 58 else
52 { 59 {
53 rOut.write("f", 1 ); 60 rOut.write("f", 1 );
54 double d = fVal; 61 double d = fVal;
55 bool bNeg = false; 62 bool bNeg = false;
56 int64_t iScale=0; 63 int64_t iScale=0;
57 if( signbit( d ) ) 64 if( signbit( d ) )
58 { 65 {
59 bNeg = true; 66 bNeg = true;
60 d = -d; 67 d = -d;
61 } 68 }
62 69
63 iScale = log( d ) / 0x1.62e42fefa39efp+2; // log( 256.0 ) 70 iScale = log( d ) / 0x1.62e42fefa39efp+2; // log( 256.0 )
64 if( iScale < 0 ) iScale--; 71 if( iScale < 0 ) iScale--;
65 d /= pow( 256.0, iScale ); 72 d /= pow( 256.0, iScale );
66 73
67 QByteArray s; 74 QByteArray s;
68 s += (uint8_t)(d); 75 s += (uint8_t)(d);
69 d -= (int)d; 76 d -= (int)d;
70 for( int j = 0; j < 150 && d; j++ ) 77 for( int j = 0; j < 150 && d; j++ )
71 { 78 {
72 d = d*256.0; 79 d = d*256.0;
73 s += (uint8_t)d; 80 s += (uint8_t)d;
74 d -= (int)d; 81 d -= (int)d;
75 } 82 }
76 Gats::Integer::writePackedInt( rOut, bNeg?-s.size():s.size() ); 83 Gats::Integer::writePackedInt( rOut, bNeg?-s.size():s.size() );
77 rOut.write( s.constData(), s.size() ); 84 rOut.write( s.constData(), s.size() );
78 Gats::Integer::writePackedInt( rOut, iScale ); 85 Gats::Integer::writePackedInt( rOut, iScale );
79 } 86 }
80} 87}
81 88
82void Gats::Float::read( QIODevice &rIn, char cType ) 89void Gats::Float::read( QIODevice &rIn, char cType )
83{ 90{
84 if( cType == 'F' ) 91 if( cType == 'F' )
85 { 92 {
86 char buf; 93 char buf;
87 rIn.read( &buf, 1 ); 94 rIn.read( &buf, 1 );
88 switch( buf ) 95 switch( buf )
89 { 96 {
90 case 'N': fVal = -NAN; break; 97 case 'N': fVal = -NAN; break;
91 case 'n': fVal = NAN; break; 98 case 'n': fVal = NAN; break;
92 case 'I': fVal = -INFINITY; break; 99 case 'I': fVal = -INFINITY; break;
93 case 'i': fVal = INFINITY; break; 100 case 'i': fVal = INFINITY; break;
94 case 'Z': fVal = -0.0; break; 101 case 'Z': fVal = -0.0; break;
95 case 'z': fVal = 0.0; break; 102 case 'z': fVal = 0.0; break;
96 } 103 }
97 } 104 }
98 else if( cType == 'f' ) 105 else if( cType == 'f' )
99 { 106 {
100 int64_t iStr; 107 int64_t iStr;
101 Gats::Integer::readPackedInt( rIn, iStr ); 108 Gats::Integer::readPackedInt( rIn, iStr );
102 bool bNeg = false; 109 bool bNeg = false;
103 if( iStr < 0 ) 110 if( iStr < 0 )
104 { 111 {
105 bNeg = true; 112 bNeg = true;
106 iStr = -iStr; 113 iStr = -iStr;
107 } 114 }
108 QByteArray s( iStr, '\0' ); 115 QByteArray s( iStr, '\0' );
109 rIn.read( s.data(), iStr ); 116 rIn.read( s.data(), iStr );
110 fVal = 0.0; 117 fVal = 0.0;
111 for( int j = iStr-1; j > 0; j-- ) 118 for( int j = iStr-1; j > 0; j-- )
112 { 119 {
113 fVal = (fVal+(uint8_t)s[j])*0x1p-8; 120 fVal = (fVal+(uint8_t)s[j])*0x1p-8;
114 } 121 }
115 fVal += (uint8_t)s[0]; 122 fVal += (uint8_t)s[0];
116 int64_t iScale; 123 int64_t iScale;
117 Gats::Integer::readPackedInt( rIn, iScale ); 124 Gats::Integer::readPackedInt( rIn, iScale );
118 fVal *= pow( 256.0, iScale ); 125 fVal *= pow( 256.0, iScale );
119 if( bNeg ) fVal = -fVal; 126 if( bNeg ) fVal = -fVal;
120 } 127 }
121} 128}
122/* 129/*
123Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Float &flt ) 130Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Float &flt )
124{ 131{
125 return f << "(float) " << flt.getValue(); 132 return f << "(float) " << flt.getValue();
126}*/ 133}*/
127 134
diff --git a/c++-qt/src/float.h b/c++-qt/src/float.h
index 93bfe18..6cc9950 100644
--- a/c++-qt/src/float.h
+++ b/c++-qt/src/float.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_FLOAT_H 8#ifndef GATS_FLOAT_H
2#define GATS_FLOAT_H 9#define GATS_FLOAT_H
3 10
@@ -5,26 +12,26 @@
5 12
6namespace Gats 13namespace Gats
7{ 14{
8 class Float : public Gats::Object 15 class Float : public Gats::Object
9 { 16 {
10 Q_OBJECT; 17 Q_OBJECT;
11 public: 18 public:
12 Float(); 19 Float();
13 Float( double f ); 20 Float( double f );
14 virtual ~Float(); 21 virtual ~Float();
15 22
16 virtual Object *clone() const; 23 virtual Object *clone() const;
17 24
18 virtual Type getType() const { return typeFloat; } 25 virtual Type getType() const { return typeFloat; }
19 double getValue() const { return fVal; } 26 double getValue() const { return fVal; }
20 27
21 virtual void write( QIODevice &rOut ) const; 28 virtual void write( QIODevice &rOut ) const;
22 virtual void read( QIODevice &rIn, char cType ); 29 virtual void read( QIODevice &rIn, char cType );
23 30
24 private: 31 private:
25 double fVal; 32 double fVal;
26 mutable QByteArray sWriteCache; 33 mutable QByteArray sWriteCache;
27 }; 34 };
28} 35}
29 36
30//Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Float &flt ); 37//Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Float &flt );
diff --git a/c++-qt/src/gatsstream.cpp b/c++-qt/src/gatsstream.cpp
index 920b2d6..f49fdb5 100644
--- a/c++-qt/src/gatsstream.cpp
+++ b/c++-qt/src/gatsstream.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats-qt/gatsstream.h" 8#include "gats-qt/gatsstream.h"
2#include "gats-qt/object.h" 9#include "gats-qt/object.h"
3 10
@@ -10,7 +17,7 @@
10#include <QBuffer> 17#include <QBuffer>
11 18
12Gats::GatsStream::GatsStream( QIODevice &rStream ) : 19Gats::GatsStream::GatsStream( QIODevice &rStream ) :
13 rStream( rStream ) 20 rStream( rStream )
14{ 21{
15} 22}
16 23
@@ -20,110 +27,110 @@ Gats::GatsStream::~GatsStream()
20 27
21Gats::Object *Gats::GatsStream::readObject() 28Gats::Object *Gats::GatsStream::readObject()
22{ 29{
23 char buf[1500]; 30 char buf[1500];
24 31
25 do 32 do
26 { 33 {
27 if( qbRead.size() < 5 ) 34 if( qbRead.size() < 5 )
28 { 35 {
29 int iRead = rStream.read( buf, 5-qbRead.size() ); 36 int iRead = rStream.read( buf, 5-qbRead.size() );
30 qbRead.append( buf, iRead ); 37 qbRead.append( buf, iRead );
31 38
32 if( qbRead.size() < 5 ) 39 if( qbRead.size() < 5 )
33 return NULL; 40 return NULL;
34 } 41 }
35 } while( !skipReadNulls() ); 42 } while( !skipReadNulls() );
36 43
37 uint8_t uVer; 44 uint8_t uVer;
38 uVer = qbRead[0]; 45 uVer = qbRead[0];
39 46
40 int32_t iSize; 47 int32_t iSize;
41 memcpy( &iSize, qbRead.constData()+1, 4 ); 48 memcpy( &iSize, qbRead.constData()+1, 4 );
42 iSize = ntohl( iSize ); 49 iSize = ntohl( iSize );
43 while( qbRead.size() < iSize ) 50 while( qbRead.size() < iSize )
44 { 51 {
45 int32_t iRead = iSize - qbRead.size(); 52 int32_t iRead = iSize - qbRead.size();
46 if( iRead > 1500 ) 53 if( iRead > 1500 )
47 iRead = 1500; 54 iRead = 1500;
48 int32_t iReal = rStream.read( buf, iRead ); 55 int32_t iReal = rStream.read( buf, iRead );
49 qbRead.append( buf, iReal ); 56 qbRead.append( buf, iReal );
50 if( iReal < iRead ) 57 if( iReal < iRead )
51 { 58 {
52 return NULL; 59 return NULL;
53 } 60 }
54 } 61 }
55 62
56 if( qbRead.size() < iSize ) 63 if( qbRead.size() < iSize )
57 { 64 {
58 return NULL; 65 return NULL;
59 } 66 }
60 67
61 QBuffer rTmp( &qbRead ); 68 QBuffer rTmp( &qbRead );
62 rTmp.open( QIODevice::ReadOnly ); 69 rTmp.open( QIODevice::ReadOnly );
63 rTmp.seek( 5 ); 70 rTmp.seek( 5 );
64 Gats::Object *pObj = Gats::Object::read( rTmp ); 71 Gats::Object *pObj = Gats::Object::read( rTmp );
65 qbRead.clear(); 72 qbRead.clear();
66 73
67 emit objectRead( pObj ); 74 emit objectRead( pObj );
68 75
69 return pObj; 76 return pObj;
70} 77}
71 78
72void Gats::GatsStream::readAllObjects() 79void Gats::GatsStream::readAllObjects()
73{ 80{
74 while( readObject() ) { } 81 while( readObject() ) { }
75} 82}
76 83
77void Gats::GatsStream::writeObject( Gats::Object *pObject ) 84void Gats::GatsStream::writeObject( Gats::Object *pObject )
78{ 85{
79 QIODevice *pTmp; 86 QIODevice *pTmp;
80 if( rStream.isSequential() ) 87 if( rStream.isSequential() )
81 { 88 {
82 pTmp = new QBuffer(); 89 pTmp = new QBuffer();
83 pTmp->open( QIODevice::WriteOnly ); 90 pTmp->open( QIODevice::WriteOnly );
84 } 91 }
85 else 92 else
86 { 93 {
87 pTmp = &rStream; 94 pTmp = &rStream;
88 } 95 }
89 96
90 uint8_t uBuf = 1; 97 uint8_t uBuf = 1;
91 uint32_t iSize = 0; 98 uint32_t iSize = 0;
92 pTmp->write( (const char *)&uBuf, 1 ); 99 pTmp->write( (const char *)&uBuf, 1 );
93 uint64_t iSizePos = pTmp->pos(); 100 uint64_t iSizePos = pTmp->pos();
94 pTmp->write( (const char *)&iSize, 4 ); 101 pTmp->write( (const char *)&iSize, 4 );
95 pObject->write( *pTmp ); 102 pObject->write( *pTmp );
96 iSize = htonl( pTmp->pos() ); 103 iSize = htonl( pTmp->pos() );
97 uint64_t iEndPos = pTmp->pos(); 104 uint64_t iEndPos = pTmp->pos();
98 pTmp->seek( iSizePos ); 105 pTmp->seek( iSizePos );
99 pTmp->write( (const char *)&iSize, 4 ); 106 pTmp->write( (const char *)&iSize, 4 );
100 107
101 if( rStream.isSequential() ) 108 if( rStream.isSequential() )
102 { 109 {
103 pTmp->close(); 110 pTmp->close();
104 rStream.write( ((QBuffer *)pTmp)->data() ); 111 rStream.write( ((QBuffer *)pTmp)->data() );
105 delete pTmp; 112 delete pTmp;
106 } 113 }
107 else 114 else
108 { 115 {
109 pTmp->seek( iSizePos ); 116 pTmp->seek( iSizePos );
110 } 117 }
111} 118}
112 119
113bool Gats::GatsStream::skipReadNulls() 120bool Gats::GatsStream::skipReadNulls()
114{ 121{
115 bool bHaveSeeked = false; 122 bool bHaveSeeked = false;
116 for(;;) 123 for(;;)
117 { 124 {
118 if( qbRead.size() == 0 ) 125 if( qbRead.size() == 0 )
119 return false; 126 return false;
120 if( qbRead.at(0) != 0 ) 127 if( qbRead.at(0) != 0 )
121 return !bHaveSeeked; //true; 128 return !bHaveSeeked; //true;
122 else 129 else
123 { 130 {
124 qbRead.remove( 0, 1 ); 131 qbRead.remove( 0, 1 );
125 bHaveSeeked = true; 132 bHaveSeeked = true;
126 } 133 }
127 } 134 }
128} 135}
129 136
diff --git a/c++-qt/src/gatsstream.h b/c++-qt/src/gatsstream.h
index 90e0514..979ca60 100644
--- a/c++-qt/src/gatsstream.h
+++ b/c++-qt/src/gatsstream.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_STREAM_H 8#ifndef GATS_STREAM_H
2#define GATS_STREAM_H 9#define GATS_STREAM_H
3 10
@@ -6,67 +13,67 @@
6 13
7namespace Gats 14namespace Gats
8{ 15{
9 class Object; 16 class Object;
10 17
11 class GatsStream : public QObject 18 class GatsStream : public QObject
12 { 19 {
13 Q_OBJECT; 20 Q_OBJECT;
14 public: 21 public:
15 GatsStream( QIODevice &rStream ); 22 GatsStream( QIODevice &rStream );
16 virtual ~GatsStream(); 23 virtual ~GatsStream();
17 24
18 public slots: 25 public slots:
19 /** 26 /**
20 * Read an object packet from the assosiated stream. This will make 27 * Read an object packet from the assosiated stream. This will make
21 * every effort to only read exactly enough data to describe one packet, 28 * every effort to only read exactly enough data to describe one packet,
22 * in case you want to do other things with your stream. It will 29 * in case you want to do other things with your stream. It will
23 * automatically skip NULL byte spacing between packets, which makes 30 * automatically skip NULL byte spacing between packets, which makes
24 * a convinient padding method for encrypted data streams. Since 31 * a convinient padding method for encrypted data streams. Since
25 * sizing information is available in the packet header exact amounts 32 * sizing information is available in the packet header exact amounts
26 * of data can be read, however this function doesn't assume that it 33 * of data can be read, however this function doesn't assume that it
27 * can read the entire object in one operation. If it fails to read 34 * can read the entire object in one operation. If it fails to read
28 * a complete packet in one call, it will keep the data it's read so 35 * a complete packet in one call, it will keep the data it's read so
29 * far buffered and return NULL, ready for another attempt. You can 36 * far buffered and return NULL, ready for another attempt. You can
30 * use the function hasReadBuffer() to deterimne if readObject() 37 * use the function hasReadBuffer() to deterimne if readObject()
31 * has read part of an object packet or not. If readObject returns 38 * has read part of an object packet or not. If readObject returns
32 * non-null then hasReadBuffer should return false on it's next call. 39 * non-null then hasReadBuffer should return false on it's next call.
33 */ 40 */
34 Gats::Object *readObject(); 41 Gats::Object *readObject();
35 42
36 /** 43 /**
37 * Works exactly like readObject, except it reads all pending objects 44 * Works exactly like readObject, except it reads all pending objects
38 * and emits a objectRead signal for each one read. It doesn't return 45 * and emits a objectRead signal for each one read. It doesn't return
39 * anything. This is perfect for connecting to a QIODevice's readRead 46 * anything. This is perfect for connecting to a QIODevice's readRead
40 * signal. 47 * signal.
41 */ 48 */
42 void readAllObjects(); 49 void readAllObjects();
43 50
44 public: 51 public:
45 /** 52 /**
46 * Write an object 53 * Write an object
47 */ 54 */
48 void writeObject( Gats::Object *pObject ); 55 void writeObject( Gats::Object *pObject );
49 56
50 /** 57 /**
51 * Tells you if there is data still in the read buffer, i.e. that a 58 * Tells you if there is data still in the read buffer, i.e. that a
52 * packet is part way through being read. If readObject has returned 59 * packet is part way through being read. If readObject has returned
53 * non-null in the most recent call, this should always be false. 60 * non-null in the most recent call, this should always be false.
54 */ 61 */
55 bool hasReadBuffer() { return qbRead.size() > 0; } 62 bool hasReadBuffer() { return qbRead.size() > 0; }
56 int getReadBufferSize() { return qbRead.size(); } 63 int getReadBufferSize() { return qbRead.size(); }
57 64
58 QIODevice &getIODevice() { return rStream; } 65 QIODevice &getIODevice() { return rStream; }
59 66
60 signals: 67 signals:
61 void objectRead( Gats::Object *pObj ); 68 void objectRead( Gats::Object *pObj );
62 69
63 private: 70 private:
64 bool skipReadNulls(); 71 bool skipReadNulls();
65 72
66 private: 73 private:
67 QIODevice &rStream; 74 QIODevice &rStream;
68 QByteArray qbRead; 75 QByteArray qbRead;
69 }; 76 };
70}; 77};
71 78
72#endif 79#endif
diff --git a/c++-qt/src/integer.cpp b/c++-qt/src/integer.cpp
index 82727f3..721c434 100644
--- a/c++-qt/src/integer.cpp
+++ b/c++-qt/src/integer.cpp
@@ -1,12 +1,19 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats-qt/integer.h" 8#include "gats-qt/integer.h"
2 9
3Gats::Integer::Integer() : 10Gats::Integer::Integer() :
4 iVal( 0 ) 11 iVal( 0 )
5{ 12{
6} 13}
7 14
8Gats::Integer::Integer( int64_t iVal ) : 15Gats::Integer::Integer( int64_t iVal ) :
9 iVal( iVal ) 16 iVal( iVal )
10{ 17{
11} 18}
12 19
@@ -16,22 +23,22 @@ Gats::Integer::~Integer()
16 23
17Gats::Object *Gats::Integer::clone() const 24Gats::Object *Gats::Integer::clone() const
18{ 25{
19 return new Gats::Integer( iVal ); 26 return new Gats::Integer( iVal );
20} 27}
21 28
22void Gats::Integer::write( QIODevice &rOut ) const 29void Gats::Integer::write( QIODevice &rOut ) const
23{ 30{
24 rOut.write("i", 1 ); 31 rOut.write("i", 1 );
25 writePackedInt( rOut, iVal ); 32 writePackedInt( rOut, iVal );
26} 33}
27 34
28void Gats::Integer::read( QIODevice &rIn, char cType ) 35void Gats::Integer::read( QIODevice &rIn, char cType )
29{ 36{
30 readPackedInt( rIn, iVal ); 37 readPackedInt( rIn, iVal );
31} 38}
32/* 39/*
33Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Integer &i ) 40Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Integer &i )
34{ 41{
35 return f << "(int) " << i.getValue(); 42 return f << "(int) " << i.getValue();
36} 43}
37*/ 44*/
diff --git a/c++-qt/src/integer.h b/c++-qt/src/integer.h
index db36e30..9178796 100644
--- a/c++-qt/src/integer.h
+++ b/c++-qt/src/integer.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_INTEGER_H 8#ifndef GATS_INTEGER_H
2#define GATS_INTEGER_H 9#define GATS_INTEGER_H
3 10
@@ -9,78 +16,78 @@
9 16
10namespace Gats 17namespace Gats
11{ 18{
12 class Integer : public Gats::Object 19 class Integer : public Gats::Object
13 { 20 {
14 Q_OBJECT; 21 Q_OBJECT;
15 public: 22 public:
16 Integer(); 23 Integer();
17 Integer( int64_t iVal ); 24 Integer( int64_t iVal );
18 virtual ~Integer(); 25 virtual ~Integer();
19 26
20 virtual Object *clone() const; 27 virtual Object *clone() const;
21 28
22 virtual Type getType() const { return typeInteger; } 29 virtual Type getType() const { return typeInteger; }
23 int64_t getValue() const { return iVal; } 30 int64_t getValue() const { return iVal; }
24 void setValue( int64_t iNewVal ) { iVal = iNewVal; } 31 void setValue( int64_t iNewVal ) { iVal = iNewVal; }
25 32
26 virtual void write( QIODevice &rOut ) const; 33 virtual void write( QIODevice &rOut ) const;
27 virtual void read( QIODevice &rIn, char cType ); 34 virtual void read( QIODevice &rIn, char cType );
28 35
29 template<typename itype> 36 template<typename itype>
30 static void readPackedInt( QIODevice &rStream, itype &rOut ) 37 static void readPackedInt( QIODevice &rStream, itype &rOut )
31 { 38 {
32 int8_t b; 39 int8_t b;
33 rOut = 0; 40 rOut = 0;
34 bool bNeg; 41 bool bNeg;
35 42
36 rStream.read( (char *)&b, 1 ); 43 rStream.read( (char *)&b, 1 );
37 bNeg = ( b&0x40 ); 44 bNeg = ( b&0x40 );
38 rOut |= (itype(b&0x3F)); 45 rOut |= (itype(b&0x3F));
39 int c = 0; 46 int c = 0;
40 while( (b&0x80) ) 47 while( (b&0x80) )
41 { 48 {
42 rStream.read( (char *)&b, 1 ); 49 rStream.read( (char *)&b, 1 );
43 rOut |= (itype(b&0x7F)) << (6+7*(c++)); 50 rOut |= (itype(b&0x7F)) << (6+7*(c++));
44 } 51 }
45 if( bNeg ) rOut = -rOut; 52 if( bNeg ) rOut = -rOut;
46 } 53 }
47 54
48 template<typename itype> 55 template<typename itype>
49 static void writePackedInt( QIODevice &rStream, itype iIn ) 56 static void writePackedInt( QIODevice &rStream, itype iIn )
50 { 57 {
51 uint8_t b; 58 uint8_t b;
52 59
53 if( iIn < 0 ) 60 if( iIn < 0 )
54 { 61 {
55 iIn = -iIn; 62 iIn = -iIn;
56 b = (iIn&0x3F); 63 b = (iIn&0x3F);
57 if( iIn > b ) 64 if( iIn > b )
58 b |= 0x80 | 0x40; 65 b |= 0x80 | 0x40;
59 else 66 else
60 b |= 0x40; 67 b |= 0x40;
61 } 68 }
62 else 69 else
63 { 70 {
64 b = (iIn&0x3F); 71 b = (iIn&0x3F);
65 if( iIn > b ) 72 if( iIn > b )
66 b |= 0x80; 73 b |= 0x80;
67 } 74 }
68 rStream.write( (const char *)&b, 1 ); 75 rStream.write( (const char *)&b, 1 );
69 iIn = iIn >> 6; 76 iIn = iIn >> 6;
70 77
71 while( iIn ) 78 while( iIn )
72 { 79 {
73 b = (iIn&0x7F); 80 b = (iIn&0x7F);
74 if( iIn > b ) 81 if( iIn > b )
75 b |= 0x80; 82 b |= 0x80;
76 rStream.write( (const char *)&b, 1 ); 83 rStream.write( (const char *)&b, 1 );
77 iIn = iIn >> 7; 84 iIn = iIn >> 7;
78 } 85 }
79 } 86 }
80 87
81 private: 88 private:
82 int64_t iVal; 89 int64_t iVal;
83 }; 90 };
84}; 91};
85 92
86//Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Integer &i ); 93//Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Integer &i );
diff --git a/c++-qt/src/list.cpp b/c++-qt/src/list.cpp
index 8a648e9..158a7c1 100644
--- a/c++-qt/src/list.cpp
+++ b/c++-qt/src/list.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats-qt/list.h" 8#include "gats-qt/list.h"
2 9
3#include "gats-qt/string.h" 10#include "gats-qt/string.h"
@@ -12,193 +19,193 @@ Gats::List::List()
12 19
13Gats::List::~List() 20Gats::List::~List()
14{ 21{
15 for( iterator i = begin(); i != end(); i++ ) 22 for( iterator i = begin(); i != end(); i++ )
16 { 23 {
17 delete *i; 24 delete *i;
18 } 25 }
19} 26}
20 27
21Gats::Object *Gats::List::clone() const 28Gats::Object *Gats::List::clone() const
22{ 29{
23 Gats::List *pClone = new Gats::List; 30 Gats::List *pClone = new Gats::List;
24 31
25 for( const_iterator i = begin(); i != end(); i++ ) 32 for( const_iterator i = begin(); i != end(); i++ )
26 { 33 {
27 pClone->append( (*i)->clone() ); 34 pClone->append( (*i)->clone() );
28 } 35 }
29 36
30 return pClone; 37 return pClone;
31} 38}
32 39
33void Gats::List::write( QIODevice &rOut ) const 40void Gats::List::write( QIODevice &rOut ) const
34{ 41{
35 rOut.write("l", 1 ); 42 rOut.write("l", 1 );
36 for( const_iterator i = begin(); i != end(); i++ ) 43 for( const_iterator i = begin(); i != end(); i++ )
37 { 44 {
38 (*i)->write( rOut ); 45 (*i)->write( rOut );
39 } 46 }
40 rOut.write("e", 1 ); 47 rOut.write("e", 1 );
41} 48}
42 49
43void Gats::List::read( QIODevice &rIn, char cType ) 50void Gats::List::read( QIODevice &rIn, char cType )
44{ 51{
45 for(;;) 52 for(;;)
46 { 53 {
47 Gats::Object *pObj = Gats::Object::read( rIn ); 54 Gats::Object *pObj = Gats::Object::read( rIn );
48 if( pObj == NULL ) 55 if( pObj == NULL )
49 break; 56 break;
50 append( pObj ); 57 append( pObj );
51 } 58 }
52} 59}
53 60
54void Gats::List::append( const char *s ) 61void Gats::List::append( const char *s )
55{ 62{
56 QList<Gats::Object *>::append( new Gats::String( s ) ); 63 QList<Gats::Object *>::append( new Gats::String( s ) );
57} 64}
58 65
59void Gats::List::append( const QByteArray &s ) 66void Gats::List::append( const QByteArray &s )
60{ 67{
61 QList<Gats::Object *>::append( new Gats::String( s ) ); 68 QList<Gats::Object *>::append( new Gats::String( s ) );
62} 69}
63 70
64void Gats::List::append( int32_t i ) 71void Gats::List::append( int32_t i )
65{ 72{
66 QList<Gats::Object *>::append( new Gats::Integer( i ) ); 73 QList<Gats::Object *>::append( new Gats::Integer( i ) );
67} 74}
68 75
69void Gats::List::append( int64_t i ) 76void Gats::List::append( int64_t i )
70{ 77{
71 QList<Gats::Object *>::append( new Gats::Integer( i ) ); 78 QList<Gats::Object *>::append( new Gats::Integer( i ) );
72} 79}
73 80
74void Gats::List::append( double d ) 81void Gats::List::append( double d )
75{ 82{
76 QList<Gats::Object *>::append( new Gats::Float( d ) ); 83 QList<Gats::Object *>::append( new Gats::Float( d ) );
77} 84}
78 85
79void Gats::List::appendStr( const QByteArray &s ) 86void Gats::List::appendStr( const QByteArray &s )
80{ 87{
81 QList<Gats::Object *>::append( new Gats::String( s ) ); 88 QList<Gats::Object *>::append( new Gats::String( s ) );
82} 89}
83 90
84void Gats::List::appendInt( int64_t i ) 91void Gats::List::appendInt( int64_t i )
85{ 92{
86 QList<Gats::Object *>::append( new Gats::Integer( i ) ); 93 QList<Gats::Object *>::append( new Gats::Integer( i ) );
87} 94}
88 95
89void Gats::List::appendFloat( double d ) 96void Gats::List::appendFloat( double d )
90{ 97{
91 QList<Gats::Object *>::append( new Gats::Float( d ) ); 98 QList<Gats::Object *>::append( new Gats::Float( d ) );
92} 99}
93 100
94void Gats::List::appendBool( bool b ) 101void Gats::List::appendBool( bool b )
95{ 102{
96 QList<Gats::Object *>::append( new Gats::Boolean( b ) ); 103 QList<Gats::Object *>::append( new Gats::Boolean( b ) );
97} 104}
98 105
99void Gats::List::appendList( Gats::List *pL ) 106void Gats::List::appendList( Gats::List *pL )
100{ 107{
101 QList<Gats::Object *>::append( pL ); 108 QList<Gats::Object *>::append( pL );
102} 109}
103 110
104void Gats::List::appendDict( Gats::Dictionary *pD ) 111void Gats::List::appendDict( Gats::Dictionary *pD )
105{ 112{
106 QList<Gats::Object *>::append( pD ); 113 QList<Gats::Object *>::append( pD );
107} 114}
108 115
109Gats::List *Gats::List::appendList() 116Gats::List *Gats::List::appendList()
110{ 117{
111 Gats::List *pLst = new Gats::List(); 118 Gats::List *pLst = new Gats::List();
112 appendList( pLst ); 119 appendList( pLst );
113 return pLst; 120 return pLst;
114} 121}
115 122
116Gats::Dictionary *Gats::List::appendDict() 123Gats::Dictionary *Gats::List::appendDict()
117{ 124{
118 Gats::Dictionary *pDict = new Gats::Dictionary(); 125 Gats::Dictionary *pDict = new Gats::Dictionary();
119 appendDict( pDict ); 126 appendDict( pDict );
120 return pDict; 127 return pDict;
121} 128}
122 129
123void Gats::List::prepend( const char *s ) 130void Gats::List::prepend( const char *s )
124{ 131{
125 QList<Gats::Object *>::prepend( new Gats::String( s ) ); 132 QList<Gats::Object *>::prepend( new Gats::String( s ) );
126} 133}
127 134
128void Gats::List::prepend( const QByteArray &s ) 135void Gats::List::prepend( const QByteArray &s )
129{ 136{
130 QList<Gats::Object *>::prepend( new Gats::String( s ) ); 137 QList<Gats::Object *>::prepend( new Gats::String( s ) );
131} 138}
132 139
133void Gats::List::prepend( int32_t i ) 140void Gats::List::prepend( int32_t i )
134{ 141{
135 QList<Gats::Object *>::prepend( new Gats::Integer( i ) ); 142 QList<Gats::Object *>::prepend( new Gats::Integer( i ) );
136} 143}
137 144
138void Gats::List::prepend( int64_t i ) 145void Gats::List::prepend( int64_t i )
139{ 146{
140 QList<Gats::Object *>::prepend( new Gats::Integer( i ) ); 147 QList<Gats::Object *>::prepend( new Gats::Integer( i ) );
141} 148}
142 149
143void Gats::List::prepend( double d ) 150void Gats::List::prepend( double d )
144{ 151{
145 QList<Gats::Object *>::prepend( new Gats::Float( d ) ); 152 QList<Gats::Object *>::prepend( new Gats::Float( d ) );
146} 153}
147 154
148void Gats::List::prependStr( const QByteArray &s ) 155void Gats::List::prependStr( const QByteArray &s )
149{ 156{
150 QList<Gats::Object *>::prepend( new Gats::String( s ) ); 157 QList<Gats::Object *>::prepend( new Gats::String( s ) );
151} 158}
152 159
153void Gats::List::prependInt( int64_t i ) 160void Gats::List::prependInt( int64_t i )
154{ 161{
155 QList<Gats::Object *>::prepend( new Gats::Integer( i ) ); 162 QList<Gats::Object *>::prepend( new Gats::Integer( i ) );
156} 163}
157 164
158void Gats::List::prependFloat( double d ) 165void Gats::List::prependFloat( double d )
159{ 166{
160 QList<Gats::Object *>::prepend( new Gats::Float( d ) ); 167 QList<Gats::Object *>::prepend( new Gats::Float( d ) );
161} 168}
162 169
163void Gats::List::prependBool( bool b ) 170void Gats::List::prependBool( bool b )
164{ 171{
165 QList<Gats::Object *>::prepend( new Gats::Boolean( b ) ); 172 QList<Gats::Object *>::prepend( new Gats::Boolean( b ) );
166} 173}
167 174
168void Gats::List::prependList( Gats::List *pL ) 175void Gats::List::prependList( Gats::List *pL )
169{ 176{
170 QList<Gats::Object *>::prepend( pL ); 177 QList<Gats::Object *>::prepend( pL );
171} 178}
172 179
173void Gats::List::prependDict( Gats::Dictionary *pD ) 180void Gats::List::prependDict( Gats::Dictionary *pD )
174{ 181{
175 QList<Gats::Object *>::prepend( pD ); 182 QList<Gats::Object *>::prepend( pD );
176} 183}
177 184
178Gats::List *Gats::List::prependList() 185Gats::List *Gats::List::prependList()
179{ 186{
180 Gats::List *pLst = new Gats::List(); 187 Gats::List *pLst = new Gats::List();
181 prependList( pLst ); 188 prependList( pLst );
182 return pLst; 189 return pLst;
183} 190}
184 191
185Gats::Dictionary *Gats::List::prependDict() 192Gats::Dictionary *Gats::List::prependDict()
186{ 193{
187 Gats::Dictionary *pDict = new Gats::Dictionary(); 194 Gats::Dictionary *pDict = new Gats::Dictionary();
188 prependDict( pDict ); 195 prependDict( pDict );
189 return pDict; 196 return pDict;
190} 197}
191/* 198/*
192Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::List &l ) 199Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::List &l )
193{ 200{
194 f << "(list) ["; 201 f << "(list) [";
195 f.incIndent(); 202 f.incIndent();
196 for( Gats::List::const_iterator i = l.begin(); i; i++ ) 203 for( Gats::List::const_iterator i = l.begin(); i; i++ )
197 { 204 {
198 f << f.nl << **i; 205 f << f.nl << **i;
199 } 206 }
200 f.decIndent(); 207 f.decIndent();
201 f << f.nl << "]"; 208 f << f.nl << "]";
202 return f; 209 return f;
203} 210}
204*/ 211*/
diff --git a/c++-qt/src/list.h b/c++-qt/src/list.h
index 6e5ac56..7577bad 100644
--- a/c++-qt/src/list.h
+++ b/c++-qt/src/list.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_LIST_H 8#ifndef GATS_LIST_H
2#define GATS_LIST_H 9#define GATS_LIST_H
3 10
@@ -6,52 +13,52 @@
6 13
7namespace Gats 14namespace Gats
8{ 15{
9 class Dictionary; 16 class Dictionary;
10 17
11 class List : public Gats::Object, public QList<Gats::Object *> 18 class List : public Gats::Object, public QList<Gats::Object *>
12 { 19 {
13 Q_OBJECT; 20 Q_OBJECT;
14 public: 21 public:
15 List(); 22 List();
16 virtual ~List(); 23 virtual ~List();
17 24
18 virtual Object *clone() const; 25 virtual Object *clone() const;
19 26
20 virtual Type getType() const { return typeList; } 27 virtual Type getType() const { return typeList; }
21 28
22 virtual void write( QIODevice &rOut ) const; 29 virtual void write( QIODevice &rOut ) const;
23 virtual void read( QIODevice &rIn, char cType ); 30 virtual void read( QIODevice &rIn, char cType );
24 31
25 void append( const char *s ); 32 void append( const char *s );
26 void append( const QByteArray &s ); 33 void append( const QByteArray &s );
27 void append( int32_t i ); 34 void append( int32_t i );
28 void append( int64_t i ); 35 void append( int64_t i );
29 void append( double d ); 36 void append( double d );
30 using QList<Gats::Object *>::append; 37 using QList<Gats::Object *>::append;
31 void appendStr( const QByteArray &s ); 38 void appendStr( const QByteArray &s );
32 void appendInt( int64_t i ); 39 void appendInt( int64_t i );
33 void appendFloat( double d ); 40 void appendFloat( double d );
34 void appendBool( bool b ); 41 void appendBool( bool b );
35 void appendList( Gats::List *pL ); 42 void appendList( Gats::List *pL );
36 void appendDict( Gats::Dictionary *pD ); 43 void appendDict( Gats::Dictionary *pD );
37 Gats::List *appendList(); 44 Gats::List *appendList();
38 Gats::Dictionary *appendDict(); 45 Gats::Dictionary *appendDict();
39 46
40 void prepend( const char *s ); 47 void prepend( const char *s );
41 void prepend( const QByteArray &s ); 48 void prepend( const QByteArray &s );
42 void prepend( int32_t i ); 49 void prepend( int32_t i );
43 void prepend( int64_t i ); 50 void prepend( int64_t i );
44 void prepend( double d ); 51 void prepend( double d );
45 using QList<Gats::Object *>::prepend; 52 using QList<Gats::Object *>::prepend;
46 void prependStr( const QByteArray &s ); 53 void prependStr( const QByteArray &s );
47 void prependInt( int64_t i ); 54 void prependInt( int64_t i );
48 void prependFloat( double d ); 55 void prependFloat( double d );
49 void prependBool( bool b ); 56 void prependBool( bool b );
50 void prependList( Gats::List *pL ); 57 void prependList( Gats::List *pL );
51 void prependDict( Gats::Dictionary *pD ); 58 void prependDict( Gats::Dictionary *pD );
52 Gats::List *prependList(); 59 Gats::List *prependList();
53 Gats::Dictionary *prependDict(); 60 Gats::Dictionary *prependDict();
54 }; 61 };
55}; 62};
56 63
57//Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::List &l ); 64//Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::List &l );
diff --git a/c++-qt/src/null.cpp b/c++-qt/src/null.cpp
index f259887..8d46250 100644
--- a/c++-qt/src/null.cpp
+++ b/c++-qt/src/null.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats-qt/null.h" 8#include "gats-qt/null.h"
2 9
3#include <QIODevice> 10#include <QIODevice>
@@ -12,12 +19,12 @@ Gats::Null::~Null()
12 19
13Gats::Object *Gats::Null::clone() const 20Gats::Object *Gats::Null::clone() const
14{ 21{
15 return new Gats::Null(); 22 return new Gats::Null();
16} 23}
17 24
18void Gats::Null::write( QIODevice &rOut ) const 25void Gats::Null::write( QIODevice &rOut ) const
19{ 26{
20 rOut.write("n", 1 ); 27 rOut.write("n", 1 );
21} 28}
22 29
23void Gats::Null::read( QIODevice &rIn, char cType ) 30void Gats::Null::read( QIODevice &rIn, char cType )
@@ -26,6 +33,6 @@ void Gats::Null::read( QIODevice &rIn, char cType )
26/* 33/*
27Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Null &b ) 34Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Null &b )
28{ 35{
29 return f << "(bool) " << b.getValue(); 36 return f << "(bool) " << b.getValue();
30} 37}
31*/ 38*/
diff --git a/c++-qt/src/null.h b/c++-qt/src/null.h
index 354de12..f3ec45b 100644
--- a/c++-qt/src/null.h
+++ b/c++-qt/src/null.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_NULL_H 8#ifndef GATS_NULL_H
2#define GATS_NULL_H 9#define GATS_NULL_H
3 10
@@ -7,20 +14,20 @@ class QIODevice;
7 14
8namespace Gats 15namespace Gats
9{ 16{
10 class Null : public Gats::Object 17 class Null : public Gats::Object
11 { 18 {
12 Q_OBJECT; 19 Q_OBJECT;
13 public: 20 public:
14 Null(); 21 Null();
15 virtual ~Null(); 22 virtual ~Null();
16 23
17 virtual Object *clone() const; 24 virtual Object *clone() const;
18 25
19 virtual Type getType() const { return typeNull; } 26 virtual Type getType() const { return typeNull; }
20 27
21 virtual void write( QIODevice &rOut ) const; 28 virtual void write( QIODevice &rOut ) const;
22 virtual void read( QIODevice &rIn, char cType ); 29 virtual void read( QIODevice &rIn, char cType );
23 }; 30 };
24}; 31};
25 32
26//Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Null &b ); 33//Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Null &b );
diff --git a/c++-qt/src/object.cpp b/c++-qt/src/object.cpp
index 4290e17..7c05228 100644
--- a/c++-qt/src/object.cpp
+++ b/c++-qt/src/object.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats-qt/object.h" 8#include "gats-qt/object.h"
2 9
3#include "gats-qt/integer.h" 10#include "gats-qt/integer.h"
@@ -22,126 +29,126 @@ Gats::Object::~Object()
22 29
23Gats::Object *Gats::Object::read( QIODevice &rIn ) 30Gats::Object *Gats::Object::read( QIODevice &rIn )
24{ 31{
25 char buf; 32 char buf;
26 rIn.read( &buf, 1 ); 33 rIn.read( &buf, 1 );
27 Object *pObj = NULL; 34 Object *pObj = NULL;
28 switch( buf ) 35 switch( buf )
29 { 36 {
30 case 'i': 37 case 'i':
31 pObj = new Gats::Integer(); 38 pObj = new Gats::Integer();
32 break; 39 break;
33 40
34 case 's': 41 case 's':
35 pObj = new Gats::String(); 42 pObj = new Gats::String();
36 break; 43 break;
37 44
38 case '0': 45 case '0':
39 case '1': 46 case '1':
40 pObj = new Gats::Boolean(); 47 pObj = new Gats::Boolean();
41 break; 48 break;
42 49
43 case 'l': 50 case 'l':
44 pObj = new Gats::List(); 51 pObj = new Gats::List();
45 break; 52 break;
46 53
47 case 'd': 54 case 'd':
48 pObj = new Gats::Dictionary(); 55 pObj = new Gats::Dictionary();
49 break; 56 break;
50 57
51 case 'f': // Normal floats 58 case 'f': // Normal floats
52 case 'F': // Special float values 59 case 'F': // Special float values
53 pObj = new Gats::Float(); 60 pObj = new Gats::Float();
54 break; 61 break;
55 62
56 case 'n': 63 case 'n':
57 pObj = new Gats::Null(); 64 pObj = new Gats::Null();
58 break; 65 break;
59 66
60 case 'e': 67 case 'e':
61 return NULL; 68 return NULL;
62 69
63 default: 70 default:
64 throw "Invalid Gats type discovered: "; 71 throw "Invalid Gats type discovered: ";
65 } 72 }
66 73
67 pObj->read( rIn, buf ); 74 pObj->read( rIn, buf );
68 75
69 return pObj; 76 return pObj;
70} 77}
71/* 78/*
72void Gats::Object::skipWs( QByteArray::const_iterator &i ) 79void Gats::Object::skipWs( QByteArray::const_iterator &i )
73{ 80{
74 for(; *i == ' ' || *i == '\t' || *i == '\r' || *i == '\n'; i++ ) { } 81 for(; *i == ' ' || *i == '\t' || *i == '\r' || *i == '\n'; i++ ) { }
75} 82}
76 83
77QByteArray Gats::Object::token( QByteArray::const_iterator &i ) 84QByteArray Gats::Object::token( QByteArray::const_iterator &i )
78{ 85{
79 QByteArray sRet; 86 QByteArray sRet;
80 if( *i == '\"' ) 87 if( *i == '\"' )
81 { 88 {
82 for( i++; i && *i != '\"' ; i++ ) 89 for( i++; i && *i != '\"' ; i++ )
83 { 90 {
84 if( *i == '\\' ) 91 if( *i == '\\' )
85 i++; 92 i++;
86 sRet += i; 93 sRet += i;
87 } 94 }
88 i++; 95 i++;
89 } 96 }
90 else 97 else
91 { 98 {
92 for(; i && *i != ' ' && *i != '\t' && *i != '\r' && *i != '\n' && 99 for(; i && *i != ' ' && *i != '\t' && *i != '\r' && *i != '\n' &&
93 *i != ',' && *i != ']' && *i != '}' && *i != '[' && 100 *i != ',' && *i != ']' && *i != '}' && *i != '[' &&
94 *i != '{'; i++ ) 101 *i != '{'; i++ )
95 { 102 {
96 sRet += i; 103 sRet += i;
97 } 104 }
98 } 105 }
99 106
100 return sRet; 107 return sRet;
101} 108}
102 109
103Gats::Object *Gats::Object::strToGats( QByteArray::const_iterator &i ) 110Gats::Object *Gats::Object::strToGats( QByteArray::const_iterator &i )
104{ 111{
105 skipWs( i ); 112 skipWs( i );
106 113
107 switch( *i ) 114 switch( *i )
108 { 115 {
109 case '[': 116 case '[':
110 { 117 {
111 Gats::List *pLst = new Gats::List(); 118 Gats::List *pLst = new Gats::List();
112 i++; 119 i++;
113 for(;;) 120 for(;;)
114 { 121 {
115 Gats::Object *pObj = strToGats( i ); 122 Gats::Object *pObj = strToGats( i );
116 if( !pObj ) 123 if( !pObj )
117 break; 124 break;
118 pLst->append( pObj ); 125 pLst->append( pObj );
119 skipWs( i ); 126 skipWs( i );
120 switch( *i ) 127 switch( *i )
121 { 128 {
122 case ',': 129 case ',':
123 i++; 130 i++;
124 break; 131 break;
125 132
126 case ']': 133 case ']':
127 i++; 134 i++;
128 return pLst; 135 return pLst;
129 136
130 default: 137 default:
131 throw "PUT GOOD EXCEPTION HERE"; 138 throw "PUT GOOD EXCEPTION HERE";
132 } 139 }
133 } 140 }
134 } 141 }
135 break; 142 break;
136 143
137 case '{': 144 case '{':
138 { 145 {
139 Gats::Dictionary *pDict = new Gats::Dictionary(); 146 Gats::Dictionary *pDict = new Gats::Dictionary();
140 i++; 147 i++;
141 for(;;) 148 for(;;)
142 { 149 {
143 skipWs( i ); 150 skipWs( i );
144 if( *i != '\"' ) 151 if( *i != '\"' )
145 throw "PUT GOOD EXCEPTION HERE"; 152 throw "PUT GOOD EXCEPTION HERE";
146 QByteArray sKey = token( i ); 153 QByteArray sKey = token( i );
147 skipWs( i ); 154 skipWs( i );
@@ -172,144 +179,144 @@ Gats::Object *Gats::Object::strToGats( QByteArray::const_iterator &i )
172 break; 179 break;
173 180
174 case '\"': 181 case '\"':
175 return new Gats::String( token( i ) ); 182 return new Gats::String( token( i ) );
176 break; 183 break;
177 184
178 case '0': 185 case '0':
179 case '1': 186 case '1':
180 case '2': 187 case '2':
181 case '3': 188 case '3':
182 case '4': 189 case '4':
183 case '5': 190 case '5':
184 case '6': 191 case '6':
185 case '7': 192 case '7':
186 case '8': 193 case '8':
187 case '9': 194 case '9':
188 case '.': 195 case '.':
189 case '+': 196 case '+':
190 case '-': 197 case '-':
191 { 198 {
192 QByteArray s = token( i ); 199 QByteArray s = token( i );
193 int iSize = s.getSize(); 200 int iSize = s.getSize();
194 if( s[iSize-1] == 'i' ) 201 if( s[iSize-1] == 'i' )
195 { 202 {
196 return new Gats::Integer( 203 return new Gats::Integer(
197 strtoll( s.getStr(), NULL, 10 ) 204 strtoll( s.getStr(), NULL, 10 )
198 ); 205 );
199 } 206 }
200 else if( s[iSize-1] == 'f' ) 207 else if( s[iSize-1] == 'f' )
201 { 208 {
202 return new Gats::Float( 209 return new Gats::Float(
203 strtod( s.getStr(), NULL ) 210 strtod( s.getStr(), NULL )
204 ); 211 );
205 } 212 }
206 else 213 else
207 { 214 {
208 for( QByteArray::iterator i = s.begin(); i; i++ ) 215 for( QByteArray::iterator i = s.begin(); i; i++ )
209 { 216 {
210 if( *i == '.' ) 217 if( *i == '.' )
211 return new Gats::Float( 218 return new Gats::Float(
212 strtod( s.getStr(), NULL ) 219 strtod( s.getStr(), NULL )
213 ); 220 );
214 } 221 }
215 return new Gats::Integer( 222 return new Gats::Integer(
216 strtoll( s.getStr(), NULL, 10 ) 223 strtoll( s.getStr(), NULL, 10 )
217 ); 224 );
218 } 225 }
219 } 226 }
220 break; 227 break;
221 228
222 default: 229 default:
223 { 230 {
224 QByteArray s = token( i ); 231 QByteArray s = token( i );
225 int iSize = s.getSize(); 232 int iSize = s.getSize();
226 // Test for explicit types first 233 // Test for explicit types first
227 if( iSize > 2 ) 234 if( iSize > 2 )
228 { 235 {
229 if( (s[0] >= '0' && s[0] <= '9') || s[0] == '+' || s[0] == '-' ) 236 if( (s[0] >= '0' && s[0] <= '9') || s[0] == '+' || s[0] == '-' )
230 { 237 {
231 } 238 }
232 else 239 else
233 { 240 {
234 QByteArray st = s.toLower(); 241 QByteArray st = s.toLower();
235 if( st == "true" ) 242 if( st == "true" )
236 { 243 {
237 return new Gats::Boolean( true ); 244 return new Gats::Boolean( true );
238 } 245 }
239 else if( st == "false" ) 246 else if( st == "false" )
240 { 247 {
241 return new Gats::Boolean( false ); 248 return new Gats::Boolean( false );
242 } 249 }
243 } 250 }
244 } 251 }
245 } 252 }
246 break; 253 break;
247 } 254 }
248 255
249 return NULL; 256 return NULL;
250} 257}
251 258
252Gats::Object *Gats::Object::strToGats( const QByteArray &sStr ) 259Gats::Object *Gats::Object::strToGats( const QByteArray &sStr )
253{ 260{
254 QByteArray::const_iterator i = sStr.begin(); 261 QByteArray::const_iterator i = sStr.begin();
255 262
256 return strToGats( i ); 263 return strToGats( i );
257} 264}
258 265
259Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Object &obj ) 266Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Object &obj )
260{ 267{
261 switch( obj.getType() ) 268 switch( obj.getType() )
262 { 269 {
263 case Gats::typeDictionary: 270 case Gats::typeDictionary:
264 return f << dynamic_cast<const Gats::Dictionary &>(obj); 271 return f << dynamic_cast<const Gats::Dictionary &>(obj);
265 272
266 case Gats::typeList: 273 case Gats::typeList:
267 return f << dynamic_cast<const Gats::List &>(obj); 274 return f << dynamic_cast<const Gats::List &>(obj);
268 275
269 case Gats::typeString: 276 case Gats::typeString:
270 return f << dynamic_cast<const Gats::String &>(obj); 277 return f << dynamic_cast<const Gats::String &>(obj);
271 278
272 case Gats::typeInteger: 279 case Gats::typeInteger:
273 return f << dynamic_cast<const Gats::Integer &>(obj); 280 return f << dynamic_cast<const Gats::Integer &>(obj);
274 281
275 case Gats::typeFloat: 282 case Gats::typeFloat:
276 return f << dynamic_cast<const Gats::Float &>(obj); 283 return f << dynamic_cast<const Gats::Float &>(obj);
277 284
278 case Gats::typeBoolean: 285 case Gats::typeBoolean:
279 return f << dynamic_cast<const Gats::Boolean &>(obj); 286 return f << dynamic_cast<const Gats::Boolean &>(obj);
280 287
281 default: 288 default:
282 return f << "***ERROR: Bad Gats type***"; 289 return f << "***ERROR: Bad Gats type***";
283 } 290 }
284} 291}
285 292
286Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Type &t ) 293Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Type &t )
287{ 294{
288 switch( t ) 295 switch( t )
289 { 296 {
290 case Gats::typeDictionary: return f << "dictionary"; 297 case Gats::typeDictionary: return f << "dictionary";
291 case Gats::typeList: return f << "list"; 298 case Gats::typeList: return f << "list";
292 case Gats::typeString: return f << "string"; 299 case Gats::typeString: return f << "string";
293 case Gats::typeInteger: return f << "integer"; 300 case Gats::typeInteger: return f << "integer";
294 case Gats::typeFloat: return f << "float"; 301 case Gats::typeFloat: return f << "float";
295 case Gats::typeBoolean: return f << "boolean"; 302 case Gats::typeBoolean: return f << "boolean";
296 } 303 }
297 304
298 return f << "***unknown***"; 305 return f << "***unknown***";
299} 306}
300*/ 307*/
301const char *Gats::typeToStr( Gats::Type t ) 308const char *Gats::typeToStr( Gats::Type t )
302{ 309{
303 switch( t ) 310 switch( t )
304 { 311 {
305 case Gats::typeDictionary: return "dictionary"; 312 case Gats::typeDictionary: return "dictionary";
306 case Gats::typeList: return "list"; 313 case Gats::typeList: return "list";
307 case Gats::typeString: return "string"; 314 case Gats::typeString: return "string";
308 case Gats::typeInteger: return "integer"; 315 case Gats::typeInteger: return "integer";
309 case Gats::typeFloat: return "float"; 316 case Gats::typeFloat: return "float";
310 case Gats::typeBoolean: return "boolean"; 317 case Gats::typeBoolean: return "boolean";
311 } 318 }
312 319
313 return "***unknown***"; 320 return "***unknown***";
314} 321}
315 322
diff --git a/c++-qt/src/object.h b/c++-qt/src/object.h
index 008ebef..7e12b87 100644
--- a/c++-qt/src/object.h
+++ b/c++-qt/src/object.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_OBJECT_H 8#ifndef GATS_OBJECT_H
2#define GATS_OBJECT_H 9#define GATS_OBJECT_H
3 10
@@ -8,44 +15,44 @@ class QIODevice;
8 15
9namespace Gats 16namespace Gats
10{ 17{
11 enum Type 18 enum Type
12 { 19 {
13 typeDictionary, 20 typeDictionary,
14 typeList, 21 typeList,
15 typeString, 22 typeString,
16 typeInteger, 23 typeInteger,
17 typeFloat, 24 typeFloat,
18 typeBoolean, 25 typeBoolean,
19 typeNull 26 typeNull
20 }; 27 };
21 28
22 /** 29 /**
23 * The baseclass for every type that can be stored in a packet. 30 * The baseclass for every type that can be stored in a packet.
24 */ 31 */
25 class Object : public QObject 32 class Object : public QObject
26 { 33 {
27 Q_OBJECT; 34 Q_OBJECT;
28 public: 35 public:
29 Object(); 36 Object();
30 virtual ~Object(); 37 virtual ~Object();
31 38
32 virtual Object *clone() const=0; 39 virtual Object *clone() const=0;
33 40
34 virtual Type getType() const =0; 41 virtual Type getType() const =0;
35 42
36 virtual void write( QIODevice &rOut ) const=0; 43 virtual void write( QIODevice &rOut ) const=0;
37 virtual void read( QIODevice &rIn, char cType )=0; 44 virtual void read( QIODevice &rIn, char cType )=0;
38 45
39 static Object *read( QIODevice &rIn ); 46 static Object *read( QIODevice &rIn );
40// static Object *strToGats( const &sStr ); 47// static Object *strToGats( const &sStr );
41 48
42 private: 49 private:
43// static Object *strToGats( QByteArray::const_iterator &i ); 50// static Object *strToGats( QByteArray::const_iterator &i );
44// static QByteArray token( QByteArray::const_iterator &i ); 51// static QByteArray token( QByteArray::const_iterator &i );
45// static void skipWs( QByteArray::const_iterator &i ); 52// static void skipWs( QByteArray::const_iterator &i );
46 }; 53 };
47 54
48 const char *typeToStr( Type t ); 55 const char *typeToStr( Type t );
49}; 56};
50 57
51//Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Object &obj ); 58//Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Object &obj );
diff --git a/c++-qt/src/string.cpp b/c++-qt/src/string.cpp
index ef23829..7d2d20f 100644
--- a/c++-qt/src/string.cpp
+++ b/c++-qt/src/string.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats-qt/string.h" 8#include "gats-qt/string.h"
2 9
3#include "gats-qt/integer.h" 10#include "gats-qt/integer.h"
@@ -7,27 +14,27 @@ Gats::String::String()
7} 14}
8 15
9Gats::String::String( const char *s ) : 16Gats::String::String( const char *s ) :
10 QByteArray( s ) 17 QByteArray( s )
11{ 18{
12} 19}
13 20
14Gats::String::String( const char *s, long iLength ) : 21Gats::String::String( const char *s, long iLength ) :
15 QByteArray( s, iLength ) 22 QByteArray( s, iLength )
16{ 23{
17} 24}
18 25
19Gats::String::String( long iLength ) : 26Gats::String::String( long iLength ) :
20 QByteArray( iLength, '\0' ) 27 QByteArray( iLength, '\0' )
21{ 28{
22} 29}
23 30
24Gats::String::String( const String &s ) : 31Gats::String::String( const String &s ) :
25 QByteArray( s ) 32 QByteArray( s )
26{ 33{
27} 34}
28 35
29Gats::String::String( const QByteArray &s ) : 36Gats::String::String( const QByteArray &s ) :
30 QByteArray( s ) 37 QByteArray( s )
31{ 38{
32} 39}
33 40
@@ -37,29 +44,29 @@ Gats::String::~String()
37 44
38Gats::Object *Gats::String::clone() const 45Gats::Object *Gats::String::clone() const
39{ 46{
40 QByteArray baClone = *this; 47 QByteArray baClone = *this;
41 baClone.detach(); 48 baClone.detach();
42 return new Gats::String( baClone ); 49 return new Gats::String( baClone );
43} 50}
44 51
45void Gats::String::write( QIODevice &rOut ) const 52void Gats::String::write( QIODevice &rOut ) const
46{ 53{
47 rOut.write("s", 1 ); 54 rOut.write("s", 1 );
48 uint32_t iSize = size(); 55 uint32_t iSize = size();
49 Gats::Integer::writePackedInt( rOut, iSize ); 56 Gats::Integer::writePackedInt( rOut, iSize );
50 rOut.write( constData(), iSize ); 57 rOut.write( constData(), iSize );
51} 58}
52 59
53void Gats::String::read( QIODevice &rIn, char cType ) 60void Gats::String::read( QIODevice &rIn, char cType )
54{ 61{
55 uint32_t iSize; 62 uint32_t iSize;
56 Gats::Integer::readPackedInt( rIn, iSize ); 63 Gats::Integer::readPackedInt( rIn, iSize );
57 fill( '\0', iSize ); 64 fill( '\0', iSize );
58 rIn.read( data(), iSize ); 65 rIn.read( data(), iSize );
59} 66}
60/* 67/*
61Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::String &s ) 68Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::String &s )
62{ 69{
63 return f << "(str) \"" << dynamic_cast<const QByteArray &>(s) << "\""; 70 return f << "(str) \"" << dynamic_cast<const QByteArray &>(s) << "\"";
64} 71}
65*/ 72*/
diff --git a/c++-qt/src/string.h b/c++-qt/src/string.h
index 9bf6ce3..a679fc0 100644
--- a/c++-qt/src/string.h
+++ b/c++-qt/src/string.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef GATS_STRING_H 8#ifndef GATS_STRING_H
2#define GATS_STRING_H 9#define GATS_STRING_H
3 10
@@ -6,27 +13,27 @@
6 13
7namespace Gats 14namespace Gats
8{ 15{
9 class String : public Gats::Object, public QByteArray 16 class String : public Gats::Object, public QByteArray
10 { 17 {
11 Q_OBJECT; 18 Q_OBJECT;
12 public: 19 public:
13 String(); 20 String();
14 String( const char *s ); 21 String( const char *s );
15 String( const char *s, long iLength ); 22 String( const char *s, long iLength );
16 String( long iLength ); 23 String( long iLength );
17 String( const String &s ); 24 String( const String &s );
18 String( const QByteArray &s ); 25 String( const QByteArray &s );
19 virtual ~String(); 26 virtual ~String();
20 27
21 virtual Object *clone() const; 28 virtual Object *clone() const;
22 29
23 virtual Type getType() const { return typeString; } 30 virtual Type getType() const { return typeString; }
24 31
25 virtual void write( QIODevice &rOut ) const; 32 virtual void write( QIODevice &rOut ) const;
26 virtual void read( QIODevice &rIn, char cType ); 33 virtual void read( QIODevice &rIn, char cType );
27 34
28 private: 35 private:
29 }; 36 };
30}; 37};
31 38
32//Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::String &s ); 39//Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::String &s );
diff --git a/c++-qt/src/types.h b/c++-qt/src/types.h
index bd1c8ae..1efdf26 100644
--- a/c++-qt/src/types.h
+++ b/c++-qt/src/types.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "gats-qt/object.h" 8#include "gats-qt/object.h"
2#include "gats-qt/boolean.h" 9#include "gats-qt/boolean.h"
3#include "gats-qt/dictionary.h" 10#include "gats-qt/dictionary.h"
diff --git a/c++-qt/tests/echo/main.cpp b/c++-qt/tests/echo/main.cpp
index 43ceae4..4925fc6 100644
--- a/c++-qt/tests/echo/main.cpp
+++ b/c++-qt/tests/echo/main.cpp
@@ -1,14 +1,21 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include <QApplication> 8#include <QApplication>
2 9
3#include "mainwnd.h" 10#include "mainwnd.h"
4 11
5int main( int argc, char *argv[] ) 12int main( int argc, char *argv[] )
6{ 13{
7 QApplication app( argc, argv ); 14 QApplication app( argc, argv );
8 15
9 MainWnd wnd; 16 MainWnd wnd;
10 wnd.show(); 17 wnd.show();
11 18
12 return app.exec(); 19 return app.exec();
13} 20}
14 21
diff --git a/c++-qt/tests/echo/mainwnd.cpp b/c++-qt/tests/echo/mainwnd.cpp
index 13c93a1..3995720 100644
--- a/c++-qt/tests/echo/mainwnd.cpp
+++ b/c++-qt/tests/echo/mainwnd.cpp
@@ -1,10 +1,17 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "mainwnd.h" 8#include "mainwnd.h"
2 9
3MainWnd::MainWnd() 10MainWnd::MainWnd()
4{ 11{
5 pSrv = new QTcpServer( this ); 12 pSrv = new QTcpServer( this );
6 connect( pSrv, SIGNAL(newConnection()), this, SLOT(newConnection())); 13 connect( pSrv, SIGNAL(newConnection()), this, SLOT(newConnection()));
7 pSrv->listen( QHostAddress::Any, 7317 ); 14 pSrv->listen( QHostAddress::Any, 7317 );
8} 15}
9 16
10MainWnd::~MainWnd() 17MainWnd::~MainWnd()
@@ -13,24 +20,24 @@ MainWnd::~MainWnd()
13 20
14void MainWnd::newConnection() 21void MainWnd::newConnection()
15{ 22{
16 while( pSrv->hasPendingConnections() ) 23 while( pSrv->hasPendingConnections() )
17 { 24 {
18 QTcpSocket *pSock = pSrv->nextPendingConnection(); 25 QTcpSocket *pSock = pSrv->nextPendingConnection();
19 Gats::GatsStream *pGats = new Gats::GatsStream( *pSock ); 26 Gats::GatsStream *pGats = new Gats::GatsStream( *pSock );
20 connect( pSock, SIGNAL(readyRead()), pGats, SLOT(readObject()) ); 27 connect( pSock, SIGNAL(readyRead()), pGats, SLOT(readObject()) );
21 connect( pGats, SIGNAL(objectRead( Gats::Object * )), 28 connect( pGats, SIGNAL(objectRead( Gats::Object * )),
22 this, SLOT(objectRead( Gats::Object * ))); 29 this, SLOT(objectRead( Gats::Object * )));
23 } 30 }
24} 31}
25 32
26void MainWnd::objectRead( Gats::Object *pObj ) 33void MainWnd::objectRead( Gats::Object *pObj )
27{ 34{
28 ((Gats::GatsStream *)sender())->writeObject( pObj ); 35 ((Gats::GatsStream *)sender())->writeObject( pObj );
29 36
30 Gats::Object *pCopy = pObj->clone(); 37 Gats::Object *pCopy = pObj->clone();
31 delete pObj; 38 delete pObj;
32 39
33 ((Gats::GatsStream *)sender())->writeObject( pCopy ); 40 ((Gats::GatsStream *)sender())->writeObject( pCopy );
34 41
35 delete pCopy; 42 delete pCopy;
36} 43}
diff --git a/c++-qt/tests/echo/mainwnd.h b/c++-qt/tests/echo/mainwnd.h
index 0afbd6a..71c5c8e 100644
--- a/c++-qt/tests/echo/mainwnd.h
+++ b/c++-qt/tests/echo/mainwnd.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1 8
2#include <QTcpServer> 9#include <QTcpServer>
3#include <QTcpSocket> 10#include <QTcpSocket>
@@ -8,16 +15,16 @@
8 15
9class MainWnd : public QMainWindow 16class MainWnd : public QMainWindow
10{ 17{
11 Q_OBJECT; 18 Q_OBJECT;
12public: 19public:
13 QTcpServer *pSrv; 20 QTcpServer *pSrv;
14 21
15 MainWnd(); 22 MainWnd();
16 virtual ~MainWnd(); 23 virtual ~MainWnd();
17 24
18public slots: 25public slots:
19 void newConnection(); 26 void newConnection();
20 void objectRead( Gats::Object *pObj ); 27 void objectRead( Gats::Object *pObj );
21 28
22signals: 29signals:
23}; 30};
diff --git a/java/FileExample.java b/java/FileExample.java
index e0db728..1bfa710 100644
--- a/java/FileExample.java
+++ b/java/FileExample.java
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1import com.xagasoft.gats.*; 8import com.xagasoft.gats.*;
2 9
3import java.io.FileInputStream; 10import java.io.FileInputStream;
diff --git a/java/com/xagasoft/gats/GatsBoolean.java b/java/com/xagasoft/gats/GatsBoolean.java
index 7e5d217..d54e8de 100644
--- a/java/com/xagasoft/gats/GatsBoolean.java
+++ b/java/com/xagasoft/gats/GatsBoolean.java
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1package com.xagasoft.gats; 8package com.xagasoft.gats;
2 9
3import java.io.InputStream; 10import java.io.InputStream;
diff --git a/java/com/xagasoft/gats/GatsDictionary.java b/java/com/xagasoft/gats/GatsDictionary.java
index e359dfa..7909c68 100644
--- a/java/com/xagasoft/gats/GatsDictionary.java
+++ b/java/com/xagasoft/gats/GatsDictionary.java
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1package com.xagasoft.gats; 8package com.xagasoft.gats;
2 9
3import java.io.InputStream; 10import java.io.InputStream;
diff --git a/java/com/xagasoft/gats/GatsFloat.java b/java/com/xagasoft/gats/GatsFloat.java
index 3d7583e..4440ea5 100644
--- a/java/com/xagasoft/gats/GatsFloat.java
+++ b/java/com/xagasoft/gats/GatsFloat.java
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1package com.xagasoft.gats; 8package com.xagasoft.gats;
2 9
3import java.io.InputStream; 10import java.io.InputStream;
diff --git a/java/com/xagasoft/gats/GatsInputStream.java b/java/com/xagasoft/gats/GatsInputStream.java
index 7d598b4..6502258 100644
--- a/java/com/xagasoft/gats/GatsInputStream.java
+++ b/java/com/xagasoft/gats/GatsInputStream.java
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1package com.xagasoft.gats; 8package com.xagasoft.gats;
2 9
3import java.io.InputStream; 10import java.io.InputStream;
diff --git a/java/com/xagasoft/gats/GatsInteger.java b/java/com/xagasoft/gats/GatsInteger.java
index 0ea5122..de8e343 100644
--- a/java/com/xagasoft/gats/GatsInteger.java
+++ b/java/com/xagasoft/gats/GatsInteger.java
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1package com.xagasoft.gats; 8package com.xagasoft.gats;
2 9
3import java.io.OutputStream; 10import java.io.OutputStream;
diff --git a/java/com/xagasoft/gats/GatsList.java b/java/com/xagasoft/gats/GatsList.java
index 84a9b31..1c3bba8 100644
--- a/java/com/xagasoft/gats/GatsList.java
+++ b/java/com/xagasoft/gats/GatsList.java
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1package com.xagasoft.gats; 8package com.xagasoft.gats;
2 9
3import java.io.InputStream; 10import java.io.InputStream;
diff --git a/java/com/xagasoft/gats/GatsNull.java b/java/com/xagasoft/gats/GatsNull.java
index 7919433..370028e 100644
--- a/java/com/xagasoft/gats/GatsNull.java
+++ b/java/com/xagasoft/gats/GatsNull.java
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1package com.xagasoft.gats; 8package com.xagasoft.gats;
2 9
3import java.io.InputStream; 10import java.io.InputStream;
diff --git a/java/com/xagasoft/gats/GatsObject.java b/java/com/xagasoft/gats/GatsObject.java
index e26ab7b..df489aa 100644
--- a/java/com/xagasoft/gats/GatsObject.java
+++ b/java/com/xagasoft/gats/GatsObject.java
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1package com.xagasoft.gats; 8package com.xagasoft.gats;
2 9
3import java.io.InputStream; 10import java.io.InputStream;
diff --git a/java/com/xagasoft/gats/GatsOutputStream.java b/java/com/xagasoft/gats/GatsOutputStream.java
index c71491b..2a20d99 100644
--- a/java/com/xagasoft/gats/GatsOutputStream.java
+++ b/java/com/xagasoft/gats/GatsOutputStream.java
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1package com.xagasoft.gats; 8package com.xagasoft.gats;
2 9
3import java.io.OutputStream; 10import java.io.OutputStream;
diff --git a/java/com/xagasoft/gats/GatsString.java b/java/com/xagasoft/gats/GatsString.java
index 8e5c5c0..442ef67 100644
--- a/java/com/xagasoft/gats/GatsString.java
+++ b/java/com/xagasoft/gats/GatsString.java
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1package com.xagasoft.gats; 8package com.xagasoft.gats;
2 9
3import java.io.InputStream; 10import java.io.InputStream;
diff --git a/java/com/xagasoft/gats/KeyNotFoundException.java b/java/com/xagasoft/gats/KeyNotFoundException.java
index 49d14e1..ddcde18 100644
--- a/java/com/xagasoft/gats/KeyNotFoundException.java
+++ b/java/com/xagasoft/gats/KeyNotFoundException.java
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1package com.xagasoft.gats; 8package com.xagasoft.gats;
2 9
3/** 10/**
diff --git a/java/com/xagasoft/gats/package-info.java b/java/com/xagasoft/gats/package-info.java
index 6feb5f1..1792bc5 100644
--- a/java/com/xagasoft/gats/package-info.java
+++ b/java/com/xagasoft/gats/package-info.java
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libgats library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1/** 8/**
2 * The Generalized Agile Transport System. 9 * The Generalized Agile Transport System.
3 * 10 *
diff --git a/php/phpgats.php b/php/phpgats.php
index 8a16e09..df9b1ba 100644
--- a/php/phpgats.php
+++ b/php/phpgats.php
@@ -1,4 +1,11 @@
1<?php 1<?php
2/*
3 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
4 *
5 * This file is part of the libgats library and is released under the
6 * terms of the license contained in the file LICENSE.
7 */
8
2 9
3/** @cond */ 10/** @cond */
4if( !defined("phpgats_defined") ) 11if( !defined("phpgats_defined") )
diff --git a/php/phpgats2.php b/php/phpgats2.php
index 1e713fc..11abebe 100644
--- a/php/phpgats2.php
+++ b/php/phpgats2.php
@@ -1,4 +1,11 @@
1<?php 1<?php
2/*
3 * Copyright (C) 2007-2012 Xagasoft, All rights reserved.
4 *
5 * This file is part of the libgats library and is released under the
6 * terms of the license contained in the file LICENSE.
7 */
8
2 9
3/** @cond */ 10/** @cond */
4if( !defined("_phpgats2_defined") ) 11if( !defined("_phpgats2_defined") )
diff --git a/python/client.py b/python/client.py
index 53e38fd..6cc757a 100755
--- a/python/client.py
+++ b/python/client.py
@@ -1,4 +1,10 @@
1#!/usr/bin/python 1#!/usr/bin/python
2#
3# Copyright (C) 2007-2012 Xagasoft, All rights reserved.
4#
5# This file is part of the libgats library and is released under the
6# terms of the license contained in the file LICENSE.
7#
2 8
3import gats 9import gats
4import socket 10import socket
diff --git a/python/gats.py b/python/gats.py
index adf5122..d6704db 100644
--- a/python/gats.py
+++ b/python/gats.py
@@ -1,3 +1,9 @@
1#
2# Copyright (C) 2007-2012 Xagasoft, All rights reserved.
3#
4# This file is part of the libgats library and is released under the
5# terms of the license contained in the file LICENSE.
6#
1 7
2"""Provides pickle-compatible functions for working with Gats packets. 8"""Provides pickle-compatible functions for working with Gats packets.
3Converts to and from normal python structures like dictionaries, lists, 9Converts to and from normal python structures like dictionaries, lists,
diff --git a/python/server.py b/python/server.py
index c36f073..3dc60cb 100755
--- a/python/server.py
+++ b/python/server.py
@@ -1,4 +1,10 @@
1#!/usr/bin/python 1#!/usr/bin/python
2#
3# Copyright (C) 2007-2012 Xagasoft, All rights reserved.
4#
5# This file is part of the libgats library and is released under the
6# terms of the license contained in the file LICENSE.
7#
2 8
3import gats 9import gats
4import socket 10import socket
diff --git a/python/test.py b/python/test.py
index 0057fbf..be58519 100755
--- a/python/test.py
+++ b/python/test.py
@@ -1,4 +1,10 @@
1#!/usr/bin/python 1#!/usr/bin/python
2#
3# Copyright (C) 2007-2012 Xagasoft, All rights reserved.
4#
5# This file is part of the libgats library and is released under the
6# terms of the license contained in the file LICENSE.
7#
2 8
3import gats 9import gats
4 10