OSDN Git Service

・textarrayformat.*をsrc/commonに移動した。
authorderui <derutakayu@user.sourceforge.jp>
Sat, 28 Nov 2009 17:20:39 +0000 (02:20 +0900)
committerderui <derutakayu@user.sourceforge.jp>
Sat, 28 Nov 2009 17:20:39 +0000 (02:20 +0900)
・src/、src/test用にMakefile.in、Makefile.amを追加。
・data_structure_interfaceを削除した。
・data_structure.*をdata_space.*にリネームした。
・lexer.*をscheme_lexer.*にリネーム。
・reader.*をstream_reader.*にリネーム。内容も変化。
・バイナリ読み出しに特化したreader_interface.hを追加。
・文字列読み出しのためのクラスstring_reader.*を追加。
・実際にテストを行うためのstring_reader_test.cppを追加。
・lexerのディスパッチを行うためのlexer_dispatcher.*を追加
・google testの利用に伴い、simpletestを削除。
・disable_copyをuncopyableにリネーム。
・限定スコープ用のスマートポインタscoped_ptrの限定実装を追加。
・ref_deleteの実装から配列サポートを削除。
・gtest-all.ccのコンパイルを行うためのMakefileを追加。
・sublexer.hをlexer_interface.hにリネーム

57 files changed:
.gitignore
Makefile
Makefile.am
Makefile.in
OMakefile
OMakeroot
autom4te.cache/output.1
autom4te.cache/output.2
autom4te.cache/traces.1
autom4te.cache/traces.2
config.log
config.status
configure
configure.in
src/Makefile.am [new file with mode: 0755]
src/Makefile.in [new file with mode: 0644]
src/OMakefile [new file with mode: 0644]
src/base_object.h
src/common/factory.h
src/common/function_callback.h
src/common/proxy_ptr.h [deleted file]
src/common/ref_delete.h
src/common/scoped_ptr.h [new file with mode: 0755]
src/common/smart_function_callback.h [deleted file]
src/common/smart_ptr.h
src/common/textarrayformat.cpp [moved from src/textarrayformat.cpp with 100% similarity]
src/common/textarrayformat.h [new file with mode: 0644]
src/common/uncopyable.h [moved from src/common/disable_copy.h with 55% similarity]
src/data_space.cpp [moved from src/data_structure.cpp with 100% similarity]
src/data_space.h [moved from src/data_structure.h with 93% similarity]
src/data_structure_interface.h [deleted file]
src/encoding_reader.cpp [moved from src/reader.cpp with 100% similarity]
src/encoding_reader.h [new file with mode: 0644]
src/lexeme.h
src/lexer_dispatcher.cpp [new file with mode: 0644]
src/lexer_dispatcher.h [new file with mode: 0755]
src/lexer_interface.h [new file with mode: 0644]
src/object.h
src/reader.h [deleted file]
src/reader_interface.h [new file with mode: 0644]
src/scheme_lexer.cpp [moved from src/lexer.cpp with 100% similarity]
src/scheme_lexer.h [moved from src/lexer.h with 100% similarity]
src/simpletest.cpp [deleted file]
src/simpletest.h [deleted file]
src/string_reader.cpp [new file with mode: 0755]
src/string_reader.h [new file with mode: 0644]
src/sublexer.h [deleted file]
src/sublexer_impl.h [deleted file]
src/test/Makefile
src/test/Makefile.am
src/test/Makefile.in
src/test/OMakefile
src/test/gtest/Makefile
src/test/lexer_dispatcher_test.cpp [new file with mode: 0644]
src/test/string_reader_test.cpp [new file with mode: 0644]
src/textarrayformat.h [deleted file]
src/type.h

index 91d3fa6..268ece6 100644 (file)
@@ -37,3 +37,4 @@ utakata
 /src/test/type_test
 /src/test/unicode_test
 /src/test/utf8_transcoder_test
+/src/test/string_reader_test
index 5c48e68..cedf33a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -158,7 +158,7 @@ top_build_prefix =
 top_builddir = .
 top_srcdir = .
 AM_CPPFLAGS = -Wall
-SUBDIRS = . test
+SUBDIRS = ./src ./src/test
 LC_ALL = C
 all: config.h
        $(MAKE) $(AM_MAKEFLAGS) all-recursive
index 9651882..6c69df2 100755 (executable)
@@ -1,5 +1,5 @@
 AM_CPPFLAGS = -Wall
-SUBDIRS = . test
+SUBDIRS = ./src ./src/test
 LC_ALL=C
 
 # bin_PROGRAMS = utakata
index 6951eb8..a9545a0 100644 (file)
@@ -158,7 +158,7 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 AM_CPPFLAGS = -Wall
-SUBDIRS = . test
+SUBDIRS = ./src ./src/test
 LC_ALL = C
 all: config.h
        $(MAKE) $(AM_MAKEFLAGS) all-recursive
index 4c30a29..8dd1130 100644 (file)
--- a/OMakefile
+++ b/OMakefile
@@ -33,7 +33,7 @@ eprintln($(CWD)/OMakefile is not configured)
 # If so, define the subdirectory targets and uncomment this section.
 #
 
-.SUBDIRS: test
+.SUBDIRS: src src/test
 
 ########################################################################
 # C configuration.
index 9dacacc..f548275 100644 (file)
--- a/OMakeroot
+++ b/OMakeroot
@@ -42,4 +42,4 @@ DefineCommandVars()
 #
 # Include the OMakefile in this directory.
 #
-.SUBDIRS: test
+.SUBDIRS: src src/test
index 05c39dd..602b6a3 100644 (file)
@@ -4936,7 +4936,7 @@ fi
 
 # Checks for library functions.
 
-ac_config_files="$ac_config_files Makefile test/Makefile"
+ac_config_files="$ac_config_files Makefile src/Makefile src/test/Makefile"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -5567,7 +5567,8 @@ do
     "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "src/test/Makefile") CONFIG_FILES="$CONFIG_FILES src/test/Makefile" ;;
 
   *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
 $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
index 05c39dd..602b6a3 100644 (file)
@@ -4936,7 +4936,7 @@ fi
 
 # Checks for library functions.
 
-ac_config_files="$ac_config_files Makefile test/Makefile"
+ac_config_files="$ac_config_files Makefile src/Makefile src/test/Makefile"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -5567,7 +5567,8 @@ do
     "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "src/test/Makefile") CONFIG_FILES="$CONFIG_FILES src/test/Makefile" ;;
 
   *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
 $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
index 17eb081..45c900a 100644 (file)
@@ -675,7 +675,7 @@ m4trace:configure.in:20: -1- m4_pattern_allow([^STDC_HEADERS$])
 m4trace:configure.in:20: -1- m4_pattern_allow([^HAVE__BOOL$])
 m4trace:configure.in:20: -1- m4_pattern_allow([^HAVE_STDBOOL_H$])
 m4trace:configure.in:22: -1- m4_pattern_allow([^size_t$])
-m4trace:configure.in:28: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.in:28: -1- m4_pattern_allow([^LTLIBOBJS$])
-m4trace:configure.in:28: -1- _AC_AM_CONFIG_HEADER_HOOK(["$ac_file"])
-m4trace:configure.in:28: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS
+m4trace:configure.in:29: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:29: -1- m4_pattern_allow([^LTLIBOBJS$])
+m4trace:configure.in:29: -1- _AC_AM_CONFIG_HEADER_HOOK(["$ac_file"])
+m4trace:configure.in:29: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS
index 8244844..3faeeb1 100644 (file)
@@ -378,21 +378,22 @@ m4trace:configure.in:22: -1- m4_pattern_allow([^size_t$])
 m4trace:configure.in:22: -1- AH_OUTPUT([size_t], [/* Define to `unsigned int\' if <sys/types.h> does not define. */
 #undef size_t])
 m4trace:configure.in:26: -1- AC_CONFIG_FILES([Makefile
-                 test/Makefile])
-m4trace:configure.in:28: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs])
-m4trace:configure.in:28: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.in:28: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.in:28: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])
-m4trace:configure.in:28: -1- AC_SUBST_TRACE([LTLIBOBJS])
-m4trace:configure.in:28: -1- m4_pattern_allow([^LTLIBOBJS$])
-m4trace:configure.in:28: -1- AC_SUBST_TRACE([top_builddir])
-m4trace:configure.in:28: -1- AC_SUBST_TRACE([top_build_prefix])
-m4trace:configure.in:28: -1- AC_SUBST_TRACE([srcdir])
-m4trace:configure.in:28: -1- AC_SUBST_TRACE([abs_srcdir])
-m4trace:configure.in:28: -1- AC_SUBST_TRACE([top_srcdir])
-m4trace:configure.in:28: -1- AC_SUBST_TRACE([abs_top_srcdir])
-m4trace:configure.in:28: -1- AC_SUBST_TRACE([builddir])
-m4trace:configure.in:28: -1- AC_SUBST_TRACE([abs_builddir])
-m4trace:configure.in:28: -1- AC_SUBST_TRACE([abs_top_builddir])
-m4trace:configure.in:28: -1- AC_SUBST_TRACE([INSTALL])
-m4trace:configure.in:28: -1- AC_SUBST_TRACE([MKDIR_P])
+                 src/Makefile
+                 src/test/Makefile])
+m4trace:configure.in:29: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:29: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:29: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([LTLIBOBJS])
+m4trace:configure.in:29: -1- m4_pattern_allow([^LTLIBOBJS$])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([top_builddir])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([top_build_prefix])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([srcdir])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([abs_srcdir])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([top_srcdir])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([abs_top_srcdir])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([builddir])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([abs_builddir])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([abs_top_builddir])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([INSTALL])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([MKDIR_P])
index ac27abf..a58c380 100644 (file)
@@ -12,9 +12,9 @@ generated by GNU Autoconf 2.63.  Invocation command line was
 
 hostname = vaio_z
 uname -m = i686
-uname -r = 2.6.30-gentoo-r6
+uname -r = 2.6.31-gentoo-r6
 uname -s = Linux
-uname -v = #8 SMP Mon Sep 21 21:05:27 JST 2009
+uname -v = #3 SMP Sat Nov 28 15:37:19 JST 2009
 
 /usr/bin/uname -p = Intel(R) Core(TM)2 Duo CPU P8800 @ 2.66GHz
 /bin/uname -X     = unknown
@@ -28,7 +28,6 @@ uname -v = #8 SMP Mon Sep 21 21:05:27 JST 2009
 /bin/universe          = unknown
 
 PATH: /home/derui/bin
-PATH: /usr/local/stow/bin
 PATH: /usr/local/bin
 PATH: /usr/local/sbin
 PATH: /usr/sbin
@@ -60,7 +59,7 @@ configure:2393: found /usr/bin/g++
 configure:2404: result: g++
 configure:2431: checking for C++ compiler version
 configure:2439: g++ --version >&5
-g++ (Gentoo 4.3.2-r3 p1.6, pie-10.1.5) 4.3.2
+g++ (Gentoo 4.3.4 p1.0, pie-10.1.5) 4.3.4
 Copyright (C) 2008 Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@@ -69,9 +68,9 @@ configure:2443: $? = 0
 configure:2450: g++ -v >&5
 Using built-in specs.
 Target: i686-pc-linux-gnu
-Configured with: /var/tmp/portage/sys-devel/gcc-4.3.2-r3/work/gcc-4.3.2/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.3.2 --includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.3.2 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.3.2/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.3.2/info --with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec --disable-fixed-point --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-multilib --enable-libmudflap --disable-libssp --enable-libgomp --disable-libgcj --with-arch=i686 --enable-languages=c,c++,treelang,fortran --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --with-bugurl=http://bugs.gentoo.org/ --with-pkgversion='Gentoo 4.3.2-r3 p1.6, pie-10.1.5'
+Configured with: /var/tmp/portage/sys-devel/gcc-4.3.4/work/gcc-4.3.4/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.3.4 --includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.3.4 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.3.4/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.3.4/info --with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec --disable-fixed-point --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-multilib --enable-libmudflap --disable-libssp --enable-libgomp --disable-libgcj --with-arch=i686 --enable-languages=c,c++,treelang,fortran --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --with-bugurl=http://bugs.gentoo.org/ --with-pkgversion='Gentoo 4.3.4 p1.0, pie-10.1.5'
 Thread model: posix
-gcc version 4.3.2 (Gentoo 4.3.2-r3 p1.6, pie-10.1.5) 
+gcc version 4.3.4 (Gentoo 4.3.4 p1.0, pie-10.1.5) 
 configure:2454: $? = 0
 configure:2461: g++ -V >&5
 g++: '-V' option must have argument
@@ -111,7 +110,7 @@ configure:3175: found /usr/bin/gcc
 configure:3186: result: gcc
 configure:3418: checking for C compiler version
 configure:3426: gcc --version >&5
-gcc (Gentoo 4.3.2-r3 p1.6, pie-10.1.5) 4.3.2
+gcc (Gentoo 4.3.4 p1.0, pie-10.1.5) 4.3.4
 Copyright (C) 2008 Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@@ -120,9 +119,9 @@ configure:3430: $? = 0
 configure:3437: gcc -v >&5
 Using built-in specs.
 Target: i686-pc-linux-gnu
-Configured with: /var/tmp/portage/sys-devel/gcc-4.3.2-r3/work/gcc-4.3.2/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.3.2 --includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.3.2 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.3.2/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.3.2/info --with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec --disable-fixed-point --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-multilib --enable-libmudflap --disable-libssp --enable-libgomp --disable-libgcj --with-arch=i686 --enable-languages=c,c++,treelang,fortran --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --with-bugurl=http://bugs.gentoo.org/ --with-pkgversion='Gentoo 4.3.2-r3 p1.6, pie-10.1.5'
+Configured with: /var/tmp/portage/sys-devel/gcc-4.3.4/work/gcc-4.3.4/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.3.4 --includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.3.4 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.3.4/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.3.4/info --with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec --disable-fixed-point --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-multilib --enable-libmudflap --disable-libssp --enable-libgomp --disable-libgcj --with-arch=i686 --enable-languages=c,c++,treelang,fortran --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --with-bugurl=http://bugs.gentoo.org/ --with-pkgversion='Gentoo 4.3.4 p1.0, pie-10.1.5'
 Thread model: posix
-gcc version 4.3.2 (Gentoo 4.3.2-r3 p1.6, pie-10.1.5) 
+gcc version 4.3.4 (Gentoo 4.3.4 p1.0, pie-10.1.5) 
 configure:3441: $? = 0
 configure:3448: gcc -V >&5
 gcc: '-V' option must have argument
@@ -380,11 +379,12 @@ generated by GNU Autoconf 2.63.  Invocation command line was
 
 on vaio_z
 
-config.status:776: creating Makefile
-config.status:776: creating test/Makefile
-config.status:776: creating config.h
-config.status:998: config.h is unchanged
-config.status:1050: executing depfiles commands
+config.status:777: creating Makefile
+config.status:777: creating src/Makefile
+config.status:777: creating src/test/Makefile
+config.status:777: creating config.h
+config.status:999: config.h is unchanged
+config.status:1051: executing depfiles commands
 
 ## ---------------- ##
 ## Cache variables. ##
@@ -573,12 +573,170 @@ generated by GNU Autoconf 2.63.  Invocation command line was
   CONFIG_HEADERS  = 
   CONFIG_LINKS    = 
   CONFIG_COMMANDS = 
-  $ ./config.status test/Makefile depfiles
+  $ ./config.status Makefile
+
+on vaio_z
+
+config.status:777: creating Makefile
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by utakata config.status 0.0.1, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status src/Makefile
+
+on vaio_z
+
+config.status:777: creating src/Makefile
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by utakata config.status 0.0.1, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status src/test/Makefile depfiles
+
+on vaio_z
+
+config.status:777: creating src/test/Makefile
+config.status:1051: executing depfiles commands
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by utakata config.status 0.0.1, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status src/test/Makefile depfiles
+
+on vaio_z
+
+config.status:777: creating src/test/Makefile
+config.status:1051: executing depfiles commands
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by utakata config.status 0.0.1, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status Makefile
+
+on vaio_z
+
+config.status:777: creating Makefile
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by utakata config.status 0.0.1, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status src/Makefile
+
+on vaio_z
+
+config.status:777: creating src/Makefile
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by utakata config.status 0.0.1, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status src/test/Makefile depfiles
 
 on vaio_z
 
-config.status:776: creating test/Makefile
-config.status:1050: executing depfiles commands
+config.status:777: creating src/test/Makefile
+config.status:1051: executing depfiles commands
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by utakata config.status 0.0.1, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status src/test/Makefile depfiles
+
+on vaio_z
+
+config.status:777: creating src/test/Makefile
+config.status:1051: executing depfiles commands
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by utakata config.status 0.0.1, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status src/test/Makefile depfiles
+
+on vaio_z
+
+config.status:777: creating src/test/Makefile
+config.status:1051: executing depfiles commands
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by utakata config.status 0.0.1, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status src/test/Makefile depfiles
+
+on vaio_z
+
+config.status:777: creating src/test/Makefile
+config.status:1051: executing depfiles commands
 
 ## ---------------------- ##
 ## Running config.status. ##
@@ -595,7 +753,24 @@ generated by GNU Autoconf 2.63.  Invocation command line was
 
 on vaio_z
 
-config.status:776: creating Makefile
+config.status:777: creating Makefile
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by utakata config.status 0.0.1, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status src/Makefile
+
+on vaio_z
+
+config.status:777: creating src/Makefile
 
 ## ---------------------- ##
 ## Running config.status. ##
@@ -608,12 +783,12 @@ generated by GNU Autoconf 2.63.  Invocation command line was
   CONFIG_HEADERS  = 
   CONFIG_LINKS    = 
   CONFIG_COMMANDS = 
-  $ ./config.status test/Makefile depfiles
+  $ ./config.status src/test/Makefile depfiles
 
-on dell_xps
+on vaio_z
 
-config.status:776: creating test/Makefile
-config.status:1050: executing depfiles commands
+config.status:777: creating src/test/Makefile
+config.status:1051: executing depfiles commands
 
 ## ---------------------- ##
 ## Running config.status. ##
@@ -628,9 +803,44 @@ generated by GNU Autoconf 2.63.  Invocation command line was
   CONFIG_COMMANDS = 
   $ ./config.status Makefile
 
-on dell_xps
+on vaio_z
+
+config.status:777: creating Makefile
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by utakata config.status 0.0.1, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status src/Makefile
+
+on vaio_z
+
+config.status:777: creating src/Makefile
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by utakata config.status 0.0.1, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status src/test/Makefile depfiles
+
+on vaio_z
 
-config.status:776: creating Makefile
+config.status:777: creating src/test/Makefile
+config.status:1051: executing depfiles commands
 
 ## ---------------------- ##
 ## Running config.status. ##
@@ -643,9 +853,9 @@ generated by GNU Autoconf 2.63.  Invocation command line was
   CONFIG_HEADERS  = 
   CONFIG_LINKS    = 
   CONFIG_COMMANDS = 
-  $ ./config.status test/Makefile depfiles
+  $ ./config.status src/test/Makefile depfiles
 
 on vaio_z
 
-config.status:776: creating test/Makefile
-config.status:1050: executing depfiles commands
+config.status:777: creating src/test/Makefile
+config.status:1051: executing depfiles commands
index 7c2c728..d0ec2e2 100755 (executable)
@@ -322,7 +322,7 @@ on `(hostname || uname -n) 2>/dev/null | sed 1q`
 "
 
 # Files that config.status was made for.
-config_files=" Makefile test/Makefile"
+config_files=" Makefile src/Makefile src/test/Makefile"
 config_headers=" config.h"
 config_commands=" depfiles"
 
@@ -469,7 +469,8 @@ do
     "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "src/test/Makefile") CONFIG_FILES="$CONFIG_FILES src/test/Makefile" ;;
 
   *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
 $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
index a5ce00b..aa1070b 100755 (executable)
--- a/configure
+++ b/configure
@@ -4936,7 +4936,7 @@ fi
 
 # Checks for library functions.
 
-ac_config_files="$ac_config_files Makefile test/Makefile"
+ac_config_files="$ac_config_files Makefile src/Makefile src/test/Makefile"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -5567,7 +5567,8 @@ do
     "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "src/test/Makefile") CONFIG_FILES="$CONFIG_FILES src/test/Makefile" ;;
 
   *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
 $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
index c2d32dd..8e20a72 100644 (file)
@@ -24,5 +24,6 @@ AC_TYPE_SIZE_T
 # Checks for library functions.
 
 AC_CONFIG_FILES([Makefile
-                 test/Makefile])
+                 src/Makefile
+                 src/test/Makefile])
 AC_OUTPUT
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100755 (executable)
index 0000000..fa2ae31
--- /dev/null
@@ -0,0 +1,7 @@
+AM_CPPFLAGS = -Wall
+LC_ALL=C
+
+# bin_PROGRAMS = utakata
+
+# utakata_SOURCES = main.cpp vm.cpp operand.cpp cpu.cpp utf8.cpp \
+#      textarrayformat.cpp utf8_string.cpp
diff --git a/src/Makefile.in b/src/Makefile.in
new file mode 100644 (file)
index 0000000..5234acb
--- /dev/null
@@ -0,0 +1,301 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = src
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -Wall
+LC_ALL = C
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+       distclean-generic distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# bin_PROGRAMS = utakata
+
+# utakata_SOURCES = main.cpp vm.cpp operand.cpp cpu.cpp utf8.cpp \
+#      textarrayformat.cpp utf8_string.cpp
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/OMakefile b/src/OMakefile
new file mode 100644 (file)
index 0000000..4c30a29
--- /dev/null
@@ -0,0 +1,160 @@
+########################################################################
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this file, to deal in the File without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the File, and to permit persons to whom the
+# File is furnished to do so, subject to the following condition:
+#
+# THE FILE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE FILE OR
+# THE USE OR OTHER DEALINGS IN THE FILE.
+
+########################################################################
+# The standard OMakefile.
+# You will usually need to modify this file for your project.
+
+# Delete this line once you have configured this file
+eprintln($(CWD)/OMakefile is not configured)
+
+########################################################################
+# Phony targets are scoped, so you probably want to declare them first.
+#
+
+# .PHONY: all install clean
+
+########################################################################
+# Subdirectories.
+# You may want to include some subdirectories in this project.
+# If so, define the subdirectory targets and uncomment this section.
+#
+
+.SUBDIRS: test
+
+########################################################################
+# C configuration.
+# Delete this section if you are not building C files.
+#
+
+################################################
+# Configuration.  You might want to modify any of these
+# configuration variables.
+#
+
+# CFLAGS +=
+# ASFLAGS +=
+# LDFLAGS +=
+# INCLUDES +=
+
+################################################
+# Uncomment the following section if you want
+# to build a C program in the current directory.
+#
+
+# CFILES[] =
+#    file1
+#    main
+#
+# MAIN = main
+#
+# .DEFAULT: $(CProgram $(MAIN), $(CFILES))
+
+################################################
+# Uncomment the following section if you want to build a C library
+# in the current directory.
+#
+
+# LIBFILES[] =
+#    file1
+#    file2
+#
+# LIB = libxxx
+#
+# .DEFAULT: $(StaticCLibrary $(LIB), $(LIBFILES))
+
+########################################################################
+# OCaml configuration.
+# Delete this section if you are not building OCaml files.
+#
+
+################################################
+# Configuration.  You may want to modify any of these configuration
+# variables.
+#
+
+#
+# This project requires ocamlfind (default - false).
+#
+# USE_OCAMLFIND = true
+#
+# OCAMLPACKS[] =
+#    pack1
+#    pack2
+#
+# if $(not $(OCAMLFIND_EXISTS))
+#    eprintln(This project requires ocamlfind, but is was not found.)
+#    eprintln(You need to install ocamlfind and run "omake --configure".)
+#    exit 1
+
+#
+# Include path
+#
+# OCAMLINCLUDES +=
+
+#
+# Compile native or byte code? 
+#
+# The default values are defined as follows:
+#
+# NATIVE_ENABLED = $(OCAMLOPT_EXISTS)
+# BYTE_ENABLED = $(not $(OCAMLOPT_EXISTS))
+
+#
+# Various options
+#
+# OCAMLFLAGS    +=
+# OCAMLCFLAGS   +=
+# OCAMLOPTFLAGS +=
+# OCAML_LINK_FLAGS +=
+# OCAML_BYTE_LINK_FLAGS +=
+# OCAML_NATIVE_LINK_FLAGS +=
+
+################################################
+# Generated files
+#
+# Workaround for the fact that ocamldep does not pay attention to .mll
+# and .mly files.
+#
+# OCamlGeneratedFiles(parser.ml lexer.ml)
+
+################################################
+# Build an OCaml library
+#
+
+# FILES[] =
+#    file1
+#    file2
+#
+# LIB = main
+#
+# .DEFAULT: $(OCamlLibrary $(LIB), $(FILES))
+
+################################################
+# Build an OCaml program
+#
+
+# FILES[] =
+#    file1
+#    file2
+#
+# PROGRAM =
+# OCAML_LIBS +=
+# OCAML_CLIBS +=
+# OCAML_OTHER_LIBS +=
+# OCAML_LIB_FLAGS +=
+#
+# .DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
index e7d1134..a89387e 100755 (executable)
 #ifndef _UTAKATA_SRC_BASE_OBJECT_H_
 #define _UTAKATA_SRC_BASE_OBJECT_H_
 
-#include "src/common/disable_copy.h"
+#include "src/common/uncopyable.h"
 #include "src/common/smart_ptr.h"
 
 namespace utakata {
 namespace interpreter {
 
-class IObject : private utility::DisableCopy {
+class IObject : private utility::Uncopyable {
   // scheme中の実体オブジェクトのベースとなるインターフェース。
   // scheme中の全ての実体オブジェクトは、このインターフェースを
   // 実装しなければなりません。
@@ -33,7 +33,7 @@ class IObject : private utility::DisableCopy {
   // IObjectはSchemeにおけるオブジェクトの内部表現として取り扱われます。
   // Schemeオブジェクトの定義として、原則的にコピーは行われないため、
   // operator=及びコピーコンストラクタは提供されません。
-  // (utility::DisableCopyインターフェースにおいて無効化されています)
+  // (utility::Uncopyableインターフェースにおいて無効化されています)
  public:
   IObject() {}
   virtual ~IObject() {}
index 73e12cf..7cfeccd 100755 (executable)
@@ -1,32 +1,55 @@
-#ifndef ___HGL___FACTORY___
-#define ___HGL___FACTORY___
+// テンプレートパラメータとして渡された型を生成するための
+// 各種テンプレートを提供します。
+//
+// Factoryは、単純に渡された型を生成して返すためだけのクラス
+// です。InheritFactoryは、ある型の派生クラスを生成するための
+// クラスです。
+// PermutationFactoryは、InheritFactoryを利用して、Factory置換を
+// 行うためのクラスです。
+//
+// Factory<Hoge> o();
+// Hoge* p = o.Create();
+// InheritFactory<Hoge, Hoge2> o2();
+// Hoge2* p2 = o2.Create();
+// p = o2->Create();
+//
+// PermutationFactory<Hoge, Hoge2> pf;
+// p = pf.Create();
+// pf.ReplaceFactory(Hoge3());  // Hoge3 is inherit from Hoge
+// p = pf.Create();  // Create `Hoge3` Instance!
+#ifndef _HOME_DERUI_DEVELOP_UTAKATA_SRC_COMMON_FACTORY_H_
+#define _HOME_DERUI_DEVELOP_UTAKATA_SRC_COMMON_FACTORY_H_
 
-#include "smart_ptr.h"
+#include "src/common/uncopyable.h"
+#include "src/common/scoped_ptr.h"
+
+namespace utility {
 
-/**
- * @brief パラメータとして渡されたクラスをnewして返すだけのfactory
- */
 template<class T>
-class factory {
-public:
-       virtual ~factory(){}
-       virtual T* createInstance() {
-               return new T;
-       }
+class Factory : private utility::Uncopyable {
+  // テンプレートパラメータで渡された型を新規に生成して
+  // 返すFactoryテンプレートです。
+  // 生成は全てnewで行われるため、このクラスから生成したインスタンス
+  // については、利用する側に解体責任が発生します。
+ public:
+  virtual ~Factory() {}
+
+  // テンプレートで渡された型を新規に生成します。
+  virtual T* Create() const {reutrn new T;}
 };
 
-/**
- * @brief Tの派生クラスSをfactoryする。
- * このようにfactory<T>から派生してあるのは、このfactoryを
- * factory2<T, S>からfactory<T>へとアップキャストするためである。
- * このようにすることで、クラスのfactory置換を実装できる。
- */
 template<class T, class S>
-class factory2 : public factory<T> {
-public:
-       virtual T* createInstance() {
-               return new S;
-       }
+class InheritFactory : public Factory<T> : private utility::Uncopyable {
+  // テンプレートパラメータ`S`で渡された型を新規に生成して
+  // 返すFactoryテンプレートです。
+  // 生成は全てnewで行われるため、このクラスから生成したインスタンス
+  // については、利用する側に解体責任が発生します。
+  // テンプレートパラメータ`S`は、テンプレートパラメータ`T`の
+  // 派生クラスである必要があります。
+ public:
+  virtual T* Create() {
+    return new S;
+  }
 };
 
 /**
@@ -35,34 +58,33 @@ public:
  * 可能であるような動作をする。
  */
 template<class T, class S>
-class factory_permutation {
-public:
-
-       factory_permutation() : m_pFactory(new factory2(T, S))
-       {}
+class PermutationFactory {
+ public:
 
-       /**
-        * @brief 基底の型へのポインタを返す。
-        */
-       T* createInstalce() {return m_pFactory->createInstance();}
+  PermutationFactory() : factory_(new InheritFactory(T, S)) {}
+  /**
+   * @brief 基底の型へのポインタを返す。
+   */
+  T* Create() {return factory_->Creater();}
 
-       /**
-        * @brief 基本型のfactoryを返すが、これは実際には派生型を返すものである。
-        */
-       smart_ptr<factory<T> > getFactory() const {
-               return m_pFactory;
-       }
+  /**
+   * @brief 基本型のfactoryを返すが、これは実際には派生型を返すものである。
+   */
+  smart_ptr<Factory<T> > factory() const {
+    return factory_;
+  }
 
-       /**
-        * @brief factoryの置換を行う。
-        * 置換を行うことが出来るのは、UがTの派生型であるときだけである。
-        */
-       template<class U>
-       void setFactory(U* p) {m_pFactory.add(new factory2(T, U));}
+  /**
+   * @brief factoryの置換を行う。
+   * 置換を行うことが出来るのは、UがTの派生型であるときだけである。
+   */
+  template<class U>
+  void ReplaceFactory(U p) {factory_.reset(new InheritFactory(T, U));}
 
-private:
+ private:
 
-       smart_ptr<factory<T> > m_pFactory;
+  scoped_ptr<Factory<T> > factory_;
 };
+}; // end of namespace utility
 
-#endif
\ No newline at end of file
+#endif /* _C:_MEADOW_DEVELOP_UTAKATA_SRC_COMMON_FACTORY_H_ */
index 5607531..2a2248e 100644 (file)
@@ -1,9 +1,9 @@
 #ifndef ___HGL___FUNCTION_CALLBACK___
 #define ___HGL___FUNCTION_CALLBACK___
 
-#include "src/common/disable_copy.h"
+#include "src/common/uncopyable.h"
 
-namespace fc {
+namespace utility {
 
 /**
    function_callback
@@ -11,7 +11,7 @@ namespace fc {
    全てのコールバック関数クラスは、このクラスから派生する。
    smart_ptrの使用が前提である。
 */
-class FunctionCallback : private utility::DisableCopyInterface {
+class FunctionCallback : private utility::UncopyableInterface {
  public:
 
   virtual ~FunctionCallback() {}
diff --git a/src/common/proxy_ptr.h b/src/common/proxy_ptr.h
deleted file mode 100755 (executable)
index c8467ce..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef ___HGL___PROXY_PTR___
-#define ___HGL___PROXY_PTR___
-
-/**
- * @brief 必要な時にだけ生成するようなポインタ。
- */
-template<class T>
-class proxy_ptr {
-public:
-
-       proxy_ptr() : m_pObj(NULL) {}
-       ~proxy_ptr() {
-               if (m_pObj != NULL) {
-                       delete m_pObj;
-               }
-       }
-
-       //ポインタの代わりをするための機能。
-       T* operator->() {checkInstance();return m_pObj;}
-       T& operator*() { checkInstance();return *m_pObj;}
-       const T* operator->() const {checkInstance();return m_pObj;}
-       const T& operator*() const {checkInstance(); return *m_pObj;}
-
-       operator T*() {checkInstance();return m_pObj;}
-
-private:
-
-       void checkInstance() const {
-               proxy_ptr<T>* p = const_cast<proxy_ptr<T>*>(this);
-               if (p->m_pObj == NULL) {
-                       p->m_pObj = new T;
-               }
-       }
-
-       T* m_pObj;
-
-};
-
-#endif
\ No newline at end of file
index 27d0179..bd38824 100755 (executable)
-#ifndef ___HGL___REF_DELETE___
-#define ___HGL___REF_DELETE___
-
-#include <utility>
-
-/**
- ref_delete
- 参照カウントを保持して、
- 0になったときに、保持してあるオブジェクトを破棄するための
- クラス。
- smart_ptr中で、配列と非配列オブジェクトとを区別するために
- 使用される。
-*/
-class ref_delete_base {
-public:
-
-    virtual ~ref_delete_base() {}
-
-    ref_delete_base() : ref_(0), owner_(false),maxnum_(0),
-                        objsize_(0) {}
-    ref_delete_base(const ref_delete_base& base) :
-        ref_(0), owner_(false),maxnum_(0), objsize_(0)
-        {
-            copy(base);
-        }
-
-    ref_delete_base& operator=(const ref_delete_base& base)
-        {
-            copy(base);
-            return *this;
-        }
-
-    /**
-     dec_ref
-     参照カウントのデクリメント。
-     これを実行したとき、参照カウントが0になったら、do_deleteを
-     実行する。
-     @access public
-     @return bool true:削除済み false:未削除
-    */
-    bool dec_ref() {
-        if (--ref_ <= 0) {
-            if (owner_) {
-                do_delete();
-            }
-            return true;
-        }
-        return false;
+#ifndef _UTAKATA_SRC_COMMON_REF_DELETE_H_
+#define _UTAKATA_SRC_COMMON_REF_DELETE_H_
+
+#include "src/common/uncopyable.h"
+
+namespace utility {
+
+class ref_delete_base : private utility::Uncopyable {
+  // 参照カウントの管理を行うオブジェクトのベースです。
+  // このクラスの派生クラスは、参照カウントが0になった場合に、
+  // 保持するインスタンスを廃棄するために、do_deleteメソッドを
+  // 定義しなければなりません。
+ public:
+
+  virtual ~ref_delete_base() {}
+  ref_delete_base() : reference_(0), owner_(false),maxnum_(0),
+                      objsize_(0) {}
+  bool dec_ref() {
+    if (--reference_ <= 0) {
+      if (owner_) {
+        do_delete();
+      }
+      return true;
     }
+    return false;
+  }
 
-    /**
-     inc_ref
-     参照カウントのインクリメント
-     @access public
-     @return void
-    */
-    void inc_ref() {
-        ref_++;
-    }
-
-    /**
-     getRef
-     参照カウントの取得
-     @access public
-     @return int 参照カウント
-    */
-    int getRef() const {return ref_;}
-    
-    /**
-     setRef
-     参照カウントの設定
-     @param int i 参照カウント
-     @access public
-     @return void
-    */
-    void setRef(int i) {ref_ = i;}
-
-    /**
-     setOwner
-     所有権の設定
-     @param bool b 所有権の有無
-     @access public
-     @return void
-    */
-    void setOwner(bool b) {owner_ = b;}
-    
-    /**
-     getOwner
-     所有権の取得
-     @access public
-     @return bool
-    */
-    bool getOwner() {return owner_;}
-
-    /**
-     getObjSize
-     オブジェクトサイズの取得
-     @access public
-     @return int オブジェクトサイズ
-    */
-    int getObjSize() const {return objsize_;}
-    
-    /**
-     setObjSize
-     オブジェクトサイズの設定
-     @param int i オブジェクトサイズ
-     @access public
-     @return void
-    */
-    void setObjSize(int i) {objsize_ = i;}
-
-    /**
-     getMaxNum
-     最大インデックスの取得
-     @access public
-     @return int 最大インデックス
-    */
-    int getMaxNum() const {return maxnum_;}
-    
-    /**
-     setMaxNum
-     最大インデックスの設定
-     @param int i 最大インデックス
-     @access public
-     @return void
-    */
-    void setMaxNum(int i) {maxnum_ = i;}
-
-    /**
-     do_delete
-     参照カウントがゼロになった際に実行される。
-     主に、deleteとdelete[]の違いを埋めるために使う
-     @access protected
-     @return void
-    */
-    virtual void do_delete() = 0;
-
-    void copy(const ref_delete_base& base) {
-        ref_ = base.ref_;
-        owner_ = base.owner_;
-        maxnum_ = base.maxnum_;
-        objsize_ = base.objsize_;
-    }
+  void inc_ref() {reference_++;}
 
-private:
+  int reference() const {return reference_;}
+  void set_reference(int i) {reference_ = i;}
 
-    int ref_;         //参照カウント
-    bool owner_;      //所有権
-    int maxnum_;      //最大インデックス
-    int objsize_;     //オブジェクトのサイズ
+  void set_owner(bool b) {owner_ = b;}
+  bool owner() const {return owner_;}
 
-};
+  int objsize() const {return objsize_;}
+  void set_objsize(int i) {objsize_ = i;}
 
-/**
- ref_noarray_object
- 非配列オブジェクトに対する、
- 参照カウントを保持した削除クラス
-*/
-template<class T>
-class ref_noarray_object : public ref_delete_base {
-public:
-
-    ref_noarray_object(T* p) : obj_(p) {}
-    ref_noarray_object(const ref_noarray_object<T>& o) : obj_(NULL)
-        {
-            copy(o);
-            obj_ = o.obj_;
-        }
-    ref_noarray_object<T>& operator=(const ref_noarray_object<T>& o)
-        {
-            copy(o);
-            obj_ = o.obj_;
-            return *this;
-        }
-
-    virtual void do_delete() {
-        if (obj_ != NULL) {
-            delete obj_;
-        }
-    }
+  int maxnum() const {return maxnum_;}
+  void set_maxnum(int i) {maxnum_ = i;}
 
-protected:
+  // 解体責任を有している場合に、参照カウントが0になった
+  // 時に呼び出されます。
+  virtual void do_delete() = 0;
 
-    T* obj_;
+ private:
 
+  int reference_;         //参照カウント
+  bool owner_;      //所有権
+  int maxnum_;      //最大インデックス
+  int objsize_;     //オブジェクトのサイズ
 };
 
-/**
- ref_array_object
- 配列オブジェクトに対する、
- 参照カウントを保持した削除クラス
-*/
 template<class T>
-class ref_array_object : public ref_delete_base {
-public:
-
-    ref_array_object(T* p) : obj_(p) {}
-    ref_array_object(const ref_array_object& o) : obj_(NULL)
-        {
-            copy(o);
-            obj_ = o.obj_;
-        }
-    ref_array_object<T>& operator=(const ref_array_object& o)
-        {
-            copy(o);
-            obj_ = o.obj_;
-            return *this;
-        }
-
-    virtual void do_delete() {
-
-        if (obj_ != NULL) {
-            delete [] obj_;
-        }
-    }
-
-protected:
+class ref_noarray_object : public ref_delete_base {
+  // 非配列オブジェクトに対する解体を行います。
+ public:
 
-    T* obj_;
+  explicit ref_noarray_object(T* p) : obj_(p) {}
+  virtual void do_delete() {
+    if (obj_ != NULL) {
+      delete obj_;
+    }
+  }
+ private:
 
+  T* obj_;
 };
 
-/**
- ref_null_object
- 所有権を持たないオブジェクトに対する、
- 参照カウントを保持した削除クラス
-*/
 template<class T>
-class ref_null_object : public ref_delete_base{
-public:
-
-    ref_null_object(T* p) : obj_(p) {}
-    ref_null_object(const ref_null_object& o) : obj_(NULL)
-        {
-            copy(o);
-            obj_ = o.obj_;
-        }
-    ref_null_object<T>& operator=(const ref_null_object& o)
-        {
-            copy(o);
-            obj_ = o.obj_;
-            return *this;
-        }
-    
-    virtual void do_delete() {
-    }
+class ref_null_object : public ref_delete_base {
+  // 所有権を持たないオブジェクトに対する解体責任を行います。
+  // 所有権を持たない場合、オブジェクトの解体責任は負わないため、
+  // do_deleteにおいては何も行いません。
+ public:
 
-protected:
+  explicit ref_null_object(T* p) : obj_(p) {}
+  virtual void do_delete() {}
 
-    T* obj_;
+ private:
 
+  T* obj_;
 };
+}; // end of namespace utility
 
-#endif
+#endif /* _UTAKATA_SRC_COMMON_REF_DELETE_H_ */
diff --git a/src/common/scoped_ptr.h b/src/common/scoped_ptr.h
new file mode 100755 (executable)
index 0000000..dc3d31f
--- /dev/null
@@ -0,0 +1,55 @@
+// リファレンスカウンタを利用しない、渡されたポインタの
+// 解体責任を負うためだけのスマートポインタを提供します。
+//
+// ここで言う解体責任とは、scoped_ptrが存在するスコープ
+// を離れた時点で、解体を行うことを保証するものです。
+// scoped_ptrはコピー不可能であるため、スコープが限定されており、
+// 初期化以外は行われないデータにおいて利用されるべきです。
+#ifndef _UTAKATA_SRC_COMMON_PROXY_PTR_H_
+#define _UTAKATA_SRC_COMMON_PROXY_PTR_H_
+
+#include "src/common/uncopyable.h"
+
+namespace utility {
+
+template<class T>
+class scoped_ptr : private Uncopyable {
+  // 利用するscopeが限定されたポインタ専用のスマートポインタです。
+  // smart_ptrと異なる点として、利用されるスコープが限定される
+  // ことで、コピーが不可能であるという点です。コピー不可能である
+  // ため、意図されないポインタのコピーを防ぐことができます。
+ public:
+
+  explicit scoped_ptr(const T* object = NULL) : obj_(object) {}
+  virtual ~scoped_ptr() {reset();}
+
+  T* operator->() const {return obj_;}
+  T& operator*() const {return *obj_;}
+  T* get() const {return obj_;}
+
+  T* release() {
+    T* const p = obj_;
+    obj_ = NULL;
+    return p;
+  }
+
+  // それまで保持していたポインタを、新しく渡されたポインタと
+  // 置換します。
+  // 置換の際、現在保持しているポインタとは別のポインタが渡された
+  // 場合、それまで保持されていた型が空では無い場合、deleteを行います。
+  // 引数が指定されない場合、NULLがデフォルト引数となります。
+  void reset(T* p = NULL) {
+    if (p != obj_) {
+      if (sizeof(T) > 0) {
+        delete obj_;
+      }
+      obj_ = p;
+    }
+  }
+ private:
+
+  T* obj_;
+};
+}; // end of namespace utility
+
+#endif /* _HOME_DERUI_DEVELOP_UTAKATA_SRC_COMMON_SCOPED_PTR_H_ */
diff --git a/src/common/smart_function_callback.h b/src/common/smart_function_callback.h
deleted file mode 100644 (file)
index 61d6f7e..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-#ifndef _SMART_FUNCTION_CALLBACK_H_
-#define _SMART_FUNCTION_CALLBACK_H_
-
-#include "smart_ptr.h"
-#include "function_callback.h"
-
-namespace sfcv {
-
-    typedef smart_ptr<fc::function_callback_v> sfc_v;
-
-    //--------------------------------------------------------------------------------
-    // 各関数コールバッククラス生成関数群の返り値を、
-    // 単純にsmart_ptrにしたもの。
-    //--------------------------------------------------------------------------------
-
-    //引数無し、返り値無しの静的関数のみのコールバック関数クラス作成
-
-    inline smart_ptr<fc::function_callback_v> screate(void (*f)(void)) {
-        return smart_ptr<fc::function_callback_v>(fc::create(f));
-    }
-
-    template<class T>
-    smart_ptr<fc::function_callback_v> screate(void (T::*f)()) {
-        return smart_ptr<fc::function_callback_v>(fc::function_callback_v::create(T::f));
-    }
-
-    //引数あり、静的関数のみ
-    template<class Arg1>
-    smart_ptr<fc::function_callback_v> screate(void (*f)(Arg1),Arg1 a1) {
-        return smart_ptr<fc::function_callback_v>(fc::function_callback_v::create(f,a1));
-    }
-
-    template<class Arg1,class Arg2>
-    smart_ptr<fc::function_callback_v> screate(void (*f)(Arg1,Arg2),Arg1 a1,Arg2 a2) {
-        return smart_ptr<fc::function_callback_v>(fc::function_callback_v::create(f,a1,a2));
-    }
-
-    template<class Arg1,class Arg2,class Arg3>
-    smart_ptr<fc::function_callback_v> screate(void (*f)(Arg1,Arg2,Arg3),Arg1 a1,Arg2 a2,Arg3 a3) {
-        return smart_ptr<fc::function_callback_v>(fc::function_callback_v::create(f,a1,a2,a3));
-    }
-
-    template<class Arg1,class Arg2,class Arg3,class Arg4>
-    smart_ptr<fc::function_callback_v> screate(void (*f)(Arg1,Arg2,Arg3,Arg4),Arg1 a1,Arg2 a2,Arg3 a3,Arg4 a4) {
-        return smart_ptr<fc::function_callback_v>(fc::function_callback_v::create(f,a1,a2,a3,a4));
-    }
-
-    template<class Arg1,class Arg2,class Arg3,class Arg4,class Arg5>
-    smart_ptr<fc::function_callback_v> screate(void (*f)(Arg1,Arg2,Arg3,Arg4,Arg5),
-                                           Arg1 a1,Arg2 a2,Arg3 a3,Arg4 a4,Arg5 a5) {
-        return smart_ptr<fc::function_callback_v>(fc::function_callback_v::create(f,a1,a2,a3,a4,a5));
-    }
-
-    //引数無し、メンバ関数
-    template<class obj>
-    smart_ptr<fc::function_callback_v> screate(void (obj::*f)(),obj* p) {
-        return smart_ptr<fc::function_callback_v>(fc::function_callback_v::create(f,p));
-    }
-
-    template<class obj,class Arg1>
-    smart_ptr<fc::function_callback_v> screate(void (obj::*f)(Arg1),obj* p,Arg1 a1) {
-        return smart_ptr<fc::function_callback_v>(fc::function_callback_v::create(f,p,a1));
-    }
-
-    template<class obj,class Arg1,class Arg2>
-    smart_ptr<fc::function_callback_v> screate(void (obj::*f)(Arg1,Arg2),obj* p,Arg1 a1,Arg2 a2) {
-        return smart_ptr<fc::function_callback_v>(fc::function_callback_v::create(f,p,a1,a2));
-    }
-
-    template<class obj,class Arg1,class Arg2,class Arg3>
-    smart_ptr<fc::function_callback_v> screate(void (obj::*f)(Arg1,Arg2,Arg3),obj* p,Arg1 a1,Arg2 a2,Arg3 a3) {
-        return smart_ptr<fc::function_callback_v>(fc::function_callback_v::create(f,p,a1,a2,a3));
-    }
-
-    template<class obj,class Arg1,class Arg2,class Arg3,class Arg4>
-    smart_ptr<fc::function_callback_v> screate(void (obj::*f)(Arg1,Arg2,Arg3,Arg4),obj* p,
-                                           Arg1 a1,Arg2 a2,Arg3 a3,Arg4 a4) {
-        return smart_ptr<fc::function_callback_v>(fc::function_callback_v::create(f,p,a1,a2,a3,a4));
-    }
-
-    template<class obj,class Arg1,class Arg2,class Arg3,class Arg4,class Arg5>
-    smart_ptr<fc::function_callback_v> screate(void (obj::*f)(Arg1,Arg2,Arg3,Arg4,Arg5),obj* p,
-                                           Arg1 a1,Arg2 a2,Arg3 a3,Arg4 a4,Arg5 a5) {
-        return smart_ptr<fc::function_callback_v>(fc::function_callback_v::create(f,p,a1,a2,a3,a4,a5));
-    }
-
-
-};
-
-
-namespace sfcr {
-
-    template<class T>
-    struct sfc_r
-    {
-        typedef smart_ptr<fc::function_callback_r<T> > type;
-    };
-
-    //--------------------------------------------------------------------------------
-    // 返り値有りの関数コールバックの定義
-    // 返り値はそれぞれ自由に設定することができる。
-    //--------------------------------------------------------------------------------
-
-    template<class Result>
-    smart_ptr<fc::function_callback_r<Result> > screate(Result (*f)(void)) {
-        return smart_ptr<fc::function_callback_r<Result> >(fc::create(f));
-    }
-
-    template<class Result, class T>
-    smart_ptr<fc::function_callback_r<Result> > screate(Result (T::*f)()) {
-        return smart_ptr<fc::function_callback_r<Result> >(fc::function_callback_r<Result>::create(f));
-    }
-
-    //非メンバ関数
-    template<class Result, class Arg1>
-    smart_ptr<fc::function_callback_r<Result> > screate(Result (*f)(Arg1), Arg1 a1) {
-        return smart_ptr<fc::function_callback_r<Result> >(fc::function_callback_r<Result>::create(f,a1));
-    }
-
-    template<class Result, class Arg1,class Arg2>
-    smart_ptr<fc::function_callback_r<Result> > screate(Result (*f)(Arg1,Arg2),Arg1 a1,Arg2 a2) {
-        return smart_ptr<fc::function_callback_r<Result> >(fc::function_callback_r<Result>::create(f,a1,a2));
-    }
-
-    template<class Result, class Arg1,class Arg2,class Arg3>
-    smart_ptr<fc::function_callback_r<Result> > 
-    screate(Result (*f)(Arg1,Arg2,Arg3),Arg1 a1,Arg2 a2,Arg3 a3) {
-        return smart_ptr<fc::function_callback_r<Result> >(fc::function_callback_r<Result>::create(f,a1,a2,a3));
-    }
-    
-    template<class Result, class Arg1,class Arg2,class Arg3,class Arg4>
-    smart_ptr<fc::function_callback_r<Result> > screate(Result (*f)(Arg1,Arg2,Arg3,Arg4),Arg1 a1,Arg2 a2,Arg3 a3,Arg4 a4) {
-        return smart_ptr<fc::function_callback_r<Result> >(fc::function_callback_r<Result>::create(f,a1,a2,a3,a4));
-    }
-
-    template<class Result, class Arg1,class Arg2,class Arg3,class Arg4,class Arg5>
-    smart_ptr<fc::function_callback_r<Result> > screate(Result (*f)(Arg1,Arg2,Arg3,Arg4),
-                                                    Arg1 a1,Arg2 a2,Arg3 a3,Arg4 a4,Arg5 a5) {
-        return smart_ptr<fc::function_callback_r<Result> >(fc::function_callback_r<Result>::create(f,a1,a2,a3,a4,a5));
-    }
-
-    //メンバ関数
-    template<class Result, class T>
-    smart_ptr<fc::function_callback_r<Result> > screate(Result (T::*f)(),T* p) {
-        return smart_ptr<fc::function_callback_r<Result> >(fc::function_callback_r<Result>::create(f,p));
-    }
-
-    template<class Result, class T,class Arg1>
-    smart_ptr<fc::function_callback_r<Result> > screate(Result (T::*f)(Arg1),T* p,Arg1 a1) {
-        return smart_ptr<fc::function_callback_r<Result> >(fc::function_callback_r<Result>::create(f,p,a1));
-    }
-
-    template<class Result, class T,class Arg1,class Arg2>
-    smart_ptr<fc::function_callback_r<Result> > screate(Result (T::*f)(Arg1,Arg2),T* p,Arg1 a1,Arg2 a2) {
-        return smart_ptr<fc::function_callback_r<Result> >(fc::function_callback_r<Result>::create(f,p,a1,a2));
-    }
-
-    template<class Result, class T,class Arg1,class Arg2,class Arg3>
-    smart_ptr<fc::function_callback_r<Result> > screate(Result (T::*f)(Arg1,Arg2,Arg3),T* p,Arg1 a1,Arg2 a2,Arg3 a3) {
-        return smart_ptr<fc::function_callback_r<Result> >(fc::function_callback_r<Result>::create(f,p,a1,a2,a3));
-    }
-
-    template<class Result, class T,class Arg1,class Arg2,class Arg3,class Arg4>
-    smart_ptr<fc::function_callback_r<Result> > screate(Result (T::*f)(Arg1,Arg2,Arg3,Arg4),T* p,
-                                                    Arg1 a1,Arg2 a2,Arg3 a3,Arg4 a4) {
-        return smart_ptr<fc::function_callback_r<Result> >(fc::function_callback_r<Result>::create(f,p,a1,a2,a3,a4));
-    }
-
-    template<class Result, class T,class Arg1,class Arg2,class Arg3,class Arg4,class Arg5>
-    smart_ptr<fc::function_callback_r<Result> > screate(Result (T::*f)(Arg1,Arg2,Arg3,Arg4,Arg5),T* p,
-                                                    Arg1 a1,Arg2 a2,Arg3 a3,Arg4 a4,Arg5 a5) {
-        return smart_ptr<fc::function_callback_r<Result> >(fc::function_callback_r<Result>::create(f,p,a1,a2,a3,a4,a5));
-    }
-
-
-};
-
-
-#endif /* _SMART_FUNCTION_CALLBACK_H_ */
index 30d312e..f7c8204 100755 (executable)
@@ -1,18 +1,26 @@
-#ifndef ___HGL___smart_ptr___
-#define ___HGL___smart_ptr___
-
-#include <iostream>
-#include "ref_delete.h"
-
-/**
-   smart_ptr_base
-   スマートポインタの基底クラス。
-   特に何をするわけでもない。
-*/
-class smart_ptr_base {
-public:
-    virtual ~smart_ptr_base(){}
-};
+// 参照カウンタによるスマートポインタを提供します。
+//
+// ここで定義されるスマートポインタは、scoped_ptrとは異なり、
+// 最終的に参照しているデータが、解体責任を負う点で異なります。
+// 最終的に参照しているデータを判定するため、参照カウンタ形式で
+// 解体責任を移譲していきます。
+//
+// また、このスマートポインタは配列を扱うことができます。
+//
+// example
+// -------
+// smart_ptr<CHoge> h(new CHoge());
+//
+// smart_ptr<CHoge> ha();
+// h.addArray(true,10);
+// h.addArray(new SHoge[10],true,10);
+
+#ifndef _UTAKATA_SRC_COMMON_SMART_PTR_H_
+#define _UTAKATA_SRC_COMMON_SMART_PTR_H_
+
+#include "src/common/ref_delete.h"
+
+namespace utility {
 
 /**
    smart_ptr
@@ -26,433 +34,428 @@ public:
 
    配列を生成する際には、
 
-   smart_ptr<CHoge> h;
-   h.addArray(true,10);
-   のように生成するか、
-   もしくは、CHogeの派生クラスSHogeを生成したりする場合は、
-   h.addArray(new SHoge[10],true,10);
 
    のようにする。
 */
 template<class T>
-class smart_ptr // : public smart_ptr_base
-{
-public:
-
-    //暗黙の型変換を行わない。
-    //このコンストラクタでは、配列の生成は出来ないことになっている。
-    template<class S> explicit 
-    smart_ptr(S* p, bool owner = true, ref_delete_base* ref = NULL) : 
-        obj_(NULL),ref_obj_(NULL),index_(0) {
-        if (p != NULL) {
-            init(p,owner,1, ref);
-        }
+class smart_ptr {
+ public:
+
+  //暗黙の型変換を行わない。
+  //このコンストラクタでは、配列の生成は出来ないことになっている。
+  template<class S> explicit 
+  smart_ptr(S* p, bool owner = true, ref_delete_base* ref = NULL) : 
+      obj_(NULL),ref_obj_(NULL),index_(0) {
+    if (p != NULL) {
+      init(p,owner,1, ref);
     }
+  }
 
-    //デフォルトコンストラクタ
-    smart_ptr() : obj_(NULL),ref_obj_(NULL),index_(0) {
-    }
+  //デフォルトコンストラクタ
+  smart_ptr() : obj_(NULL),ref_obj_(NULL),index_(0) {
+  }
     
-    //コピーコンストラクタ
-    smart_ptr(const smart_ptr<T>& p) : 
-        obj_(NULL),ref_obj_(NULL),index_(0) {
-        //参照カウントを増やしつつ、コピー。
-        inc(p);
-    }
-
-    smart_ptr<T>& operator=(const smart_ptr<T>& obj) {
-        // 自分にコピーされる前に、前のオブジェクトの参照カウントを
-        // 減らしておく。
-        dec();
+  //コピーコンストラクタ
+  smart_ptr(const smart_ptr<T>& p) : 
+      obj_(NULL),ref_obj_(NULL),index_(0) {
+    //参照カウントを増やしつつ、コピー。
+    inc(p);
+  }
+
+  smart_ptr<T>& operator=(const smart_ptr<T>& obj) {
+    // 自分にコピーされる前に、前のオブジェクトの参照カウントを
+    // 減らしておく。
+    dec();
         
-        smart_ptr<T> tmp(obj);
-        swap(tmp);
-        return *this;
-    }
-
-    //参照数を減らすだけ。
-    virtual ~smart_ptr() {dec();}
-
-    //明示的に削除するための構文
-    virtual void release() {dec();}
-
-    //ここからは、ポインタの振りをするための仕掛け。
-    T& operator*() const {return *get();}
-    T* operator->() const {return get();}
-
-    //擬似的な配列操作のため。
-    smart_ptr<T>& operator++() {incIndex();return *this;}
-    smart_ptr<T> operator++(int n) {
-        smart_ptr<T> tmp(*this);
-        incIndex();
-        return tmp;
-    }
-    smart_ptr<T>& operator--() {decIndex();return *this;}
-    smart_ptr<T> operator--(int n) {
-        smart_ptr<T> tmp(*this);
-        decIndex();
-        return tmp;
-    }
-
-    // 同一かどうかをチェックする。
-    bool operator==(const smart_ptr<T>& rh)
-        {
-            return obj_ == rh.obj_;
-        }
-    bool operator!=(const smart_ptr<T>& rh)
-        {
-            return !(*this == rh);
-        }
-
-    //配列からの取得のため。
-    T& operator[](int n) const {return *get(n + 1);}
-
-    /**
-       get
-       保持するメモリから、指定された場所のメモリを取得する。
-       @param int n デフォルトは1
-       @access public
-       @return 指定された位置のテンプレートで指定されたオブジェクト
-    */
-    T* get(int n = 1) const {
-        //配列、単一変数どちらにでも対応するため、
-        //引数で場所を取る。
+    smart_ptr<T> tmp(obj);
+    swap(tmp);
+    return *this;
+  }
+
+  //参照数を減らすだけ。
+  virtual ~smart_ptr() {dec();}
+
+  //明示的に削除するための構文
+  virtual void release() {dec();}
+
+  //ここからは、ポインタの振りをするための仕掛け。
+  T& operator*() const {return *get();}
+  T* operator->() const {return get();}
+
+  //擬似的な配列操作のため。
+  smart_ptr<T>& operator++() {incIndex();return *this;}
+  smart_ptr<T> operator++(int n) {
+    smart_ptr<T> tmp(*this);
+    incIndex();
+    return tmp;
+  }
+  smart_ptr<T>& operator--() {decIndex();return *this;}
+  smart_ptr<T> operator--(int n) {
+    smart_ptr<T> tmp(*this);
+    decIndex();
+    return tmp;
+  }
+
+  // 同一かどうかをチェックする。
+  bool operator==(const smart_ptr<T>& rh)
+  {
+    return obj_ == rh.obj_;
+  }
+  bool operator!=(const smart_ptr<T>& rh)
+  {
+    return !(*this == rh);
+  }
+
+  //配列からの取得のため。
+  T& operator[](int n) const {return *get(n + 1);}
+
+  /**
+     get
+     保持するメモリから、指定された場所のメモリを取得する。
+     @param int n デフォルトは1
+     @access public
+     @return 指定された位置のテンプレートで指定されたオブジェクト
+  */
+  T* get(int n = 1) const {
+    //配列、単一変数どちらにでも対応するため、
+    //引数で場所を取る。
         
 
-        if (ref_obj_ == NULL) {
-            return NULL;
-        }
-
-        if (index_ + n > ref_obj_->getMaxNum() || index_ + n < 0) {
-            return NULL;
-        }
-
-        //取得すべきメモリは、
-        //オブジェクトの先頭アドレス+オブジェクトのサイズ*(インデックス+引数)
-        //なお、この際に、index_ = 0かつ、n = 1である場合、
-        //先頭アドレス+オブジェクトサイズということになり、どう考えてもアクセス違反になる。
-        return (T*)((unsigned char*)obj_ + (ref_obj_->getObjSize() * (index_ + n - 1)));
-    }
-
-    //==============================================
-    //疑似イテレーターとして使用するための関数群
-    //==============================================
-
-    /**
-       isEnd
-       インデックスが、限界に達していないかどうか
-       ここで言う限界とは、MaxNumで、つまり添え字+1をさす。
-       @access public
-       @return bool 達している場合はtrue
-    */
-    bool isEnd() {
-        if (ref_obj_ != NULL) {
-            return ref_obj_->getMaxNum()-1 < index_?true:false;
-        } else {
-            return true;
-        }
-    }
-
-    /**
-       isBegin
-       インデックスが、先頭であるかどうか
-       @access public
-       @return bool 先頭である場合はtrue
-    */
-    bool isBegin() {
-        return index_ == 0?true:false;
+    if (ref_obj_ == NULL) {
+      return NULL;
     }
 
-    /**
-       オブジェクトがNULLかどうか
-       @access public
-       @return bool
-    */
-    bool isNull() const {
-        return ref_obj_==NULL&&obj_==NULL?true:false;
+    if (index_ + n > ref_obj_->getMaxNum() || index_ + n < 0) {
+      return NULL;
     }
 
-    // オブジェクトが単一の場所からのみ参照されているか。
-    bool isOnlyRef() const {
-        return ref_obj_->getRef() == 1 ? true : false;
+    //取得すべきメモリは、
+    //オブジェクトの先頭アドレス+オブジェクトのサイズ*(インデックス+引数)
+    //なお、この際に、index_ = 0かつ、n = 1である場合、
+    //先頭アドレス+オブジェクトサイズということになり、どう考えてもアクセス違反になる。
+    return (T*)((unsigned char*)obj_ + (ref_obj_->getObjSize() * (index_ + n - 1)));
+  }
+
+  //==============================================
+  //疑似イテレーターとして使用するための関数群
+  //==============================================
+
+  /**
+     isEnd
+     インデックスが、限界に達していないかどうか
+     ここで言う限界とは、MaxNumで、つまり添え字+1をさす。
+     @access public
+     @return bool 達している場合はtrue
+  */
+  bool isEnd() {
+    if (ref_obj_ != NULL) {
+      return ref_obj_->getMaxNum()-1 < index_?true:false;
+    } else {
+      return true;
     }
+  }
+
+  /**
+     isBegin
+     インデックスが、先頭であるかどうか
+     @access public
+     @return bool 先頭である場合はtrue
+  */
+  bool isBegin() {
+    return index_ == 0?true:false;
+  }
+
+  /**
+     オブジェクトがNULLかどうか
+     @access public
+     @return bool
+  */
+  bool isNull() const {
+    return ref_obj_==NULL&&obj_==NULL?true:false;
+  }
+
+  // オブジェクトが単一の場所からのみ参照されているか。
+  bool isOnlyRef() const {
+    return ref_obj_->getRef() == 1 ? true : false;
+  }
     
-    /**
-       end
-       インデックスを、最後尾に位置させる
-       @access public
-       @return void
-    */
-    void end() {
-        if (ref_obj_ != NULL) {
-            index_ = ref_obj_->getMaxNum()-1;
-        } else {
-            index_ = 0;
-        }
-    }
-
-    /**
-       begin
-       インデックスを、先頭に位置させる
-       @access public
-       @return void
-    */
-    void begin() {
-        index_ = 0;
+  /**
+     end
+     インデックスを、最後尾に位置させる
+     @access public
+     @return void
+  */
+  void end() {
+    if (ref_obj_ != NULL) {
+      index_ = ref_obj_->getMaxNum()-1;
+    } else {
+      index_ = 0;
     }
-
-    //=============================================
-    //追加生成関数群
-    //=============================================
-
-    /**
-     * @brief アップキャストを行う。SはTの派生クラスであること。
-     * また、その特性上同一性チェックが困難であるので、こればかりは仕方がない。
-     * @param const smart_ptr<S>& スマートポインタ
-     * @return smart_ptr<T>& アップキャスト後の自身。
-     */
-    template<class S>
-    smart_ptr<T>& upcast(const smart_ptr<S>& p) {
+  }
+
+  /**
+     begin
+     インデックスを、先頭に位置させる
+     @access public
+     @return void
+  */
+  void begin() {
+    index_ = 0;
+  }
+
+  //=============================================
+  //追加生成関数群
+  //=============================================
+
+  /**
+   * @brief アップキャストを行う。SはTの派生クラスであること。
+   * また、その特性上同一性チェックが困難であるので、こればかりは仕方がない。
+   * @param const smart_ptr<S>& スマートポインタ
+   * @return smart_ptr<T>& アップキャスト後の自身。
+   */
+  template<class S>
+  smart_ptr<T>& upcast(const smart_ptr<S>& p) {
         
-        if (reinterpret_cast<void*>(this) != 
-            reinterpret_cast<void*>(const_cast<smart_ptr<S>*>(&p)) ) {
-            //pがさすオブジェクトをこのオブジェクトもさすことになるので、
-            //まずはdec
-            dec();
+    if (reinterpret_cast<void*>(this) != 
+        reinterpret_cast<void*>(const_cast<smart_ptr<S>*>(&p)) ) {
+      //pがさすオブジェクトをこのオブジェクトもさすことになるので、
+      //まずはdec
+      dec();
             
-            //あとはincとほぼ同じ処理になる。
-            obj_ = p.getObj();
-            ref_obj_ = p.getRefObj();
-            index_ = p.getIndex();
-
-            if (ref_obj_ != NULL) {
-                ref_obj_->inc_ref();
-            }
-        }
-
-        return *this;
+      //あとはincとほぼ同じ処理になる。
+      obj_ = p.getObj();
+      ref_obj_ = p.getRefObj();
+      index_ = p.getIndex();
+
+      if (ref_obj_ != NULL) {
+        ref_obj_->inc_ref();
+      }
     }
 
-    /**
-     * @brief 指定した型の追加生成構文
-     * コンストラクタで何も指定しない場合、これを実行することで、再生成を行う。
-     */
-    void add() {
-        dec();
-        init(new T, true, 1);
+    return *this;
+  }
+
+  /**
+   * @brief 指定した型の追加生成構文
+   * コンストラクタで何も指定しない場合、これを実行することで、再生成を行う。
+   */
+  void add() {
+    dec();
+    init(new T, true, 1);
+  }
+
+  /**
+     add
+     新しく生成させる。
+     関数テンプレートを使ってはいるが、必ずTとおなじ、
+     もしくはTの派生クラスであること。
+     @param S* p 対象とするオブジェクト
+     @param bool owner 所有権の有無
+     @access public
+     @return void
+  */
+  template<class S>
+  void add(S* _p, bool owner = true) {
+    dec();
+    if (_p != NULL) {
+      init(_p,owner,1);
     }
-
-    /**
-       add
-       新しく生成させる。
-       関数テンプレートを使ってはいるが、必ずTとおなじ、
-       もしくはTの派生クラスであること。
-       @param S* p 対象とするオブジェクト
-       @param bool owner 所有権の有無
-       @access public
-       @return void
-    */
-    template<class S>
-    void add(S* _p, bool owner = true) {
-        dec();
-        if (_p != NULL) {
-            init(_p,owner,1);
-        }
+  }
+
+  /**
+   * @brief デリータを指定した追加生成構文。
+   * これは配列では使用できない。
+   */
+  template<class S>
+  void add(S* _p, bool owner, ref_delete_base* ref) {
+    dec();
+    if (_p != NULL && ref != NULL) {
+      init(_p, owner, 1, ref);
     }
-
-    /**
-     * @brief デリータを指定した追加生成構文。
-     * これは配列では使用できない。
-     */
-    template<class S>
-    void add(S* _p, bool owner, ref_delete_base* ref) {
-        dec();
-        if (_p != NULL && ref != NULL) {
-            init(_p, owner, 1, ref);
-        }
+  }
+
+  /**
+     addArray
+     配列オブジェクト生成関数
+     現在のオブジェクトの型を、指定個数作成する場合。
+     @param bool owner 所有権の有無
+     @param int n 個数
+     @access public
+     @return void
+  */
+  void addArray(bool owner, int n) { 
+    dec();
+    if (n > 1) {
+      init(new T[n], owner, n);
+    } else if (n == 1) {
+      init(new T, owner, 1);
     }
-
-    /**
-       addArray
-       配列オブジェクト生成関数
-       現在のオブジェクトの型を、指定個数作成する場合。
-       @param bool owner 所有権の有無
-       @param int n 個数
-       @access public
-       @return void
-    */
-    void addArray(bool owner, int n) { 
-        dec();
-        if (n > 1) {
-            init(new T[n], owner, n);
-        } else if (n == 1) {
-            init(new T, owner, 1);
-        }
-    }
-
-    /**
-       addArray
-       配列オブジェクト生成関数
-       こちらは、配列オブジェクトを生成する際に使用される関数。
-       @param S p 対象とするオブジェクト
-       @param bool owner 所有権の有無
-       @param int n 個数
-       @access public
-       @return void
-    */
-    template<class S>
-    void addArray(S _p, bool owner, int n) { 
-        dec();
-        if (n > 1) {
-            init(new S[n], owner, n);
-        }
+  }
+
+  /**
+     addArray
+     配列オブジェクト生成関数
+     こちらは、配列オブジェクトを生成する際に使用される関数。
+     @param S p 対象とするオブジェクト
+     @param bool owner 所有権の有無
+     @param int n 個数
+     @access public
+     @return void
+  */
+  template<class S>
+  void addArray(S _p, bool owner, int n) { 
+    dec();
+    if (n > 1) {
+      init(new S[n], owner, n);
     }
-
-
-private:
-
-    /**
-       init
-       スマートポインタの初期化補助関数
-       渡されたオブジェクトを元にして、所有権、
-       参照カウント、オブジェクトの個数を設定する。
-       @param template _p 保持するべきオブジェクト
-       @param bool owner 所有権の湯有無
-       @param int n オブジェクトの個数
-       @param ref_delete_base* ref デフォルトはNULL。外部からのコピーならば非NULL
-       @access protected
-       @return void
-    */
-    template<class S>
-    void init(S* _p, bool owner, int n, ref_delete_base* ref = NULL) {
+  }
+
+
+ private:
+
+  /**
+     init
+     スマートポインタの初期化補助関数
+     渡されたオブジェクトを元にして、所有権、
+     参照カウント、オブジェクトの個数を設定する。
+     @param template _p 保持するべきオブジェクト
+     @param bool owner 所有権の湯有無
+     @param int n オブジェクトの個数
+     @param ref_delete_base* ref デフォルトはNULL。外部からのコピーならば非NULL
+     @access protected
+     @return void
+  */
+  template<class S>
+  void init(S* _p, bool owner, int n, ref_delete_base* ref = NULL) {
         
-        index_ = 0;
-        obj_ = _p;
-
-        if (ref_obj_ != NULL) {
-            //このとき、すでにdec_refとかはやってあることが前提。
-            ref_obj_ = NULL;
-        }
-
-        if (ref != NULL) {
-            ref_obj_ = ref;
-        } else if (owner) {
-            if (n == 1) {
-                //非配列オブジェクト
-                ref_obj_ = new ref_noarray_object<S>(_p);
-            } else if (n > 1){
-                ref_obj_ = new ref_array_object<S>(_p);
-            }
-        } else {
-            //非所有権オブジェクト
-            ref_obj_ = new ref_null_object<S>(_p);
-        }
-
-        //オブジェクトの情報を追加
-        ref_obj_->setRef(1);
-        ref_obj_->setMaxNum(n);
-        ref_obj_->setObjSize(sizeof(S));
-        ref_obj_->setOwner(owner);
+    index_ = 0;
+    obj_ = _p;
 
+    if (ref_obj_ != NULL) {
+      //このとき、すでにdec_refとかはやってあることが前提。
+      ref_obj_ = NULL;
     }
 
-    /**
-       inc
-       渡されたsmart_ptrの参照数を一つ増やす。
-       @param const smart_ptr<T>& p 参照カウントを増やすオブジェクト
-       @access protected
-       @return void
-    */
-    void inc(const smart_ptr<T>& p) {
-        index_    = p.getIndex();
-        ref_obj_   = p.getRefObj();
-        obj_      = p.getObj();
-        
-        if (ref_obj_ != NULL) {
-            ref_obj_->inc_ref();
-        }
+    if (ref != NULL) {
+      ref_obj_ = ref;
+    } else if (owner) {
+      if (n == 1) {
+        //非配列オブジェクト
+        ref_obj_ = new ref_noarray_object<S>(_p);
+      } else if (n > 1){
+        ref_obj_ = new ref_array_object<S>(_p);
+      }
+    } else {
+      //非所有権オブジェクト
+      ref_obj_ = new ref_null_object<S>(_p);
     }
 
-    void swap(smart_ptr<T>& p)
-    {
-        // 対象となっているオブジェクトとデータを入れ替える。
-        std::swap(index_, p.index_);
-        std::swap(ref_obj_, p.ref_obj_);
-        std::swap(obj_, p.obj_);
+    //オブジェクトの情報を追加
+    ref_obj_->setRef(1);
+    ref_obj_->setMaxNum(n);
+    ref_obj_->setObjSize(sizeof(S));
+    ref_obj_->setOwner(owner);
+
+  }
+
+  /**
+     inc
+     渡されたsmart_ptrの参照数を一つ増やす。
+     @param const smart_ptr<T>& p 参照カウントを増やすオブジェクト
+     @access protected
+     @return void
+  */
+  void inc(const smart_ptr<T>& p) {
+    index_    = p.getIndex();
+    ref_obj_   = p.getRefObj();
+    obj_      = p.getObj();
+        
+    if (ref_obj_ != NULL) {
+      ref_obj_->inc_ref();
     }
-
-    /**
-       dec
-       自分の分の参照カウントを減らす。
-       実行されたら、ref_obj_およびobj_は
-       NULLになる。
-       @access protected
-       @return void
-    */
-    void dec() {
-        //dec_refは、オブジェクトを削除したかどうかを返す。
-        //削除されている場合は、参照オブジェクトを削除しなければならない。
-        if (ref_obj_ != NULL) {
-            if (ref_obj_->dec_ref()) {
-                delete ref_obj_;
-            }
-        }
-        ref_obj_ = NULL;
-        obj_ = NULL;
+  }
+
+  void swap(smart_ptr<T>& p)
+  {
+    // 対象となっているオブジェクトとデータを入れ替える。
+    std::swap(index_, p.index_);
+    std::swap(ref_obj_, p.ref_obj_);
+    std::swap(obj_, p.obj_);
+  }
+
+  /**
+     dec
+     自分の分の参照カウントを減らす。
+     実行されたら、ref_obj_およびobj_は
+     NULLになる。
+     @access protected
+     @return void
+  */
+  void dec() {
+    //dec_refは、オブジェクトを削除したかどうかを返す。
+    //削除されている場合は、参照オブジェクトを削除しなければならない。
+    if (ref_obj_ != NULL) {
+      if (ref_obj_->dec_ref()) {
+        delete ref_obj_;
+      }
     }
-
-    /**
-       incIndex
-       インデックスカウントを増やす
-       @access protected
-       @return void
-    */
-    void incIndex() {index_++;}
-
-    /**
-       decIndex
-       インデックスカウントを減らす
-       @access protected
-       @return void
-    */
-    void decIndex() {index_--;}
-
-    //========================================
-    //コピーの際に使用するconst関数群
-    //========================================
-
-    /**
-       getIndex
-       現在のインデックスを返す
-       @access public
-       @return int 現在のインデックス
-    */
-    int getIndex() const {return index_;}
-
-    /**
-       getRefObj
-       削除オブジェクトを返す
-       @access public
-       @return ref_delete_base* 削除オブジェクトのポインタ
-    */
-    ref_delete_base* getRefObj() const {return ref_obj_;}
+    ref_obj_ = NULL;
+    obj_ = NULL;
+  }
+
+  /**
+     incIndex
+     インデックスカウントを増やす
+     @access protected
+     @return void
+  */
+  void incIndex() {index_++;}
+
+  /**
+     decIndex
+     インデックスカウントを減らす
+     @access protected
+     @return void
+  */
+  void decIndex() {index_--;}
+
+  //========================================
+  //コピーの際に使用するconst関数群
+  //========================================
+
+  /**
+     getIndex
+     現在のインデックスを返す
+     @access public
+     @return int 現在のインデックス
+  */
+  int getIndex() const {return index_;}
+
+  /**
+     getRefObj
+     削除オブジェクトを返す
+     @access public
+     @return ref_delete_base* 削除オブジェクトのポインタ
+  */
+  ref_delete_base* getRefObj() const {return ref_obj_;}
     
-    /**
-       getObj
-       オブジェクトを返す
-       @access public
-       @return T* オブジェクトのポインタ
-    */
-    T* getObj() const {return obj_;}
+  /**
+     getObj
+     オブジェクトを返す
+     @access public
+     @return T* オブジェクトのポインタ
+  */
+  T* getObj() const {return obj_;}
 
-private:
+ private:
 
-    T* obj_;      //保持すべきオブジェクト。参照カウントオブジェクトと同一
+  T* obj_;      //保持すべきオブジェクト。参照カウントオブジェクトと同一
 
-    ref_delete_base* ref_obj_;     //参照カウントオブジェクト
+  ref_delete_base* ref_obj_;     //参照カウントオブジェクト
 
-    int index_;       //現在のインデックス
+  int index_;       //現在のインデックス
 
 };
+}; // end of namespace utility
 
-#endif
+#endif /* _UTAKATA_SRC_COMMON_SMART_PTR_H_ */
diff --git a/src/common/textarrayformat.h b/src/common/textarrayformat.h
new file mode 100644 (file)
index 0000000..81f6e0f
--- /dev/null
@@ -0,0 +1,62 @@
+// テキスト処理を行うテストのデバッグ用途に利用される、
+// 簡単なテキストフォーマットであるTextArrayFormatの実装を提供します。
+// TextArrayFormatは、TextArrayGeneratorにて文字列からの生成を行い
+// TextArrayReaderによって、テキストブロックを取得することができます。
+// 
+// これらは柔軟に行うことができるため、テキストを扱うテストデータを
+// 複数作成したい場合に有用です。
+#ifndef _UTAKATA_SRC_COMMON_TEXTARRAYFORMAT_H_
+#define _UTAKATA_SRC_COMMON_TEXTARRAYFORMAT_H_
+
+#include <string>
+#include <vector>
+#include <exception>
+
+namespace utility {
+
+namespace textarrayformat {
+
+class OutOfIndexException : public std::exception
+{
+ public:
+  OutOfIndexException(const std::string& str);
+  virtual ~OutOfIndexException() throw() {}
+
+  virtual const char* what() const throw();
+
+ private:
+  const std::string str_;
+};
+
+class TextArrayReader
+{
+ public:
+
+  explicit TextArrayReader(const TextArrayGenerator& is);
+  virtual ~TextArrayReader() {}
+
+  // 指定したストリームの先頭からフォーマットに従ってブロック単位
+  // への切り出しを行う。
+  // この関数が成功した場合、以前のブロックなどは保存されない。
+  void open(std::istream& is);
+
+  // 指定したブロックを取得する。
+  // 番号を指定しない場合には、最初に取得したブロックが取得される。
+  std::string get(int = 0);
+
+  // ブロックのリストを取得する。
+  const std::vector<std::string>& getBlock() const {return blocks_;}
+
+ private:
+
+  // ファイル中のスプリッタを行ごと退避する。
+  std::string splitter_;
+
+  // テキストのブロックを退避しておくリスト
+  std::vector<std::string> blocks_;
+};
+
+};
+}; // end of namespace utility
+
+#endif /* _C:_MEADOW_DEVELOP_UTAKATA_SRC_COMMON_TEXTARRAYFORMAT_H_ */
similarity index 55%
rename from src/common/disable_copy.h
rename to src/common/uncopyable.h
index 18b02de..8967cce 100755 (executable)
@@ -1,20 +1,22 @@
-#ifndef _UTAKATA_SRC_COMMON_DISABLE_COPY_H_
-#define _UTAKATA_SRC_COMMON_DISABLE_COPY_H_
+#ifndef _UTAKATA_SRC_COMMON_UNCOPYABLE_H_
+#define _UTAKATA_SRC_COMMON_UNCOPYABLE_H_
 
 namespace utility {
 
 // 継承したクラスで、コピー不可であることを明示するためのインターフェース。
 // コピー不可であることを明示する以外に利用方法は無い。
 // また、このクラスはprivate継承を用いて継承するべきである。
-class DisableCopy {
+class Uncopyable {
  public:
-  virtual ~DisableCopy() {}
+  Uncopyable() {}
+  ~Uncopyable() {}
 
  private:
 
-  DisableCopy(const DisableCopy& c);
-  DisableCopy& operator=(const DisableCopy& c);
+  Uncopyable(const Uncopyable& c);
+  Uncopyable& operator=(const Uncopyable& c);
 };
 };  // end of namespace utility
 
-#endif /* _UTAKATA_SRC_COMMON_DISABLE_COPY_H_ */
+#endif /* __HOME_DERUI_DEVELOP_UTAKATA_SRC_COMMON_UNCOPYABLE_H_ */
+
similarity index 100%
rename from src/data_structure.cpp
rename to src/data_space.cpp
similarity index 93%
rename from src/data_structure.h
rename to src/data_space.h
index daf13ef..9114d84 100755 (executable)
@@ -10,8 +10,9 @@
 // DataSpace同士の比較においては、utakata::type名前空間において、
 // 内部の利便性のためにオペレータオーバロードが実装されています。
 // DataSpace自体にはオペレータオーバロードは実装されません。
-#ifndef _DATA_STRUCTURE_H_
-#define _DATA_STRUCTURE_H_
+#ifndef _DEVELOP_UTAKATA_SRC_DATA_SPACE_H_
+#define _DEVELOP_UTAKATA_SRC_DATA_SPACE_H_
+
 
 #include <algorithm>
 #include "src/common/smart_ptr.h"
@@ -58,4 +59,4 @@ bool operator!=(const DataSpace& space);
 };
 };
 
-#endif /* _DATA_STRUCTURE_H_ */
+#endif /* __HOME_DERUI_DEVELOP_UTAKATA_SRC_DATA_SPACE_H_ */
diff --git a/src/data_structure_interface.h b/src/data_structure_interface.h
deleted file mode 100755 (executable)
index 0a83189..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-// IObjectの解放責任を負うクラス
-//
-// DataEntityは、データの最終的な解放を行うためのインターフェースを
-// GCに提供するクラスです。
-// GCが作成した各IObject派生クラスへのポインタを、内部で保持し、
-// 最終的な解放責任を負います。
-//
-// DataEntityから取得できる、IObjectのポインタは、各smart_ptr等で
-// 管理してはなりません。
-#ifndef _DATA_STRUCTURE_INTERFACE_H_
-#define _DATA_STRUCTURE_INTERFACE_H_
-
-#include "src/common/disable_copy.h"
-
-namespace utakata {
-
-namespace interpreter {
-class IObject;
-};
-
-namespace data {
-
-class DataEntity : private utility::DisableCopy {
-  // IObject派生クラスの各実体へのポインタを保持し、
-  // また実体へのキャストを行うためのクラスです。
-  // このクラスが保持する実体は、GCより作成された各IObjectとなり、
-  // GCが格納しているデータの形となります。
-  //
-  // DataEntity自体はデータの型を判別せず、単純にIObject*を返すための
-  // オブジェクトであり、キャストは別のインターフェースによって行われます。
-  // (DataCastor,CastingData参照下さい)
-  //
-  // DataEntityが保持するポインタは、DataEntityが最終的に削除を
-  // 行うため、smart_ptrによる管理は行ってはなりません。
- public:
-
-  explicit DataEntity(interpreter::IObject* obj) : obj_(obj, true) {}
-  virtual ~DataEntity() {}
-
-  // 内部で保持しているIObjectへのポインタを返します。
-  virtual interpreter::IObject* getAddress() {
-    return obj_;
-  }
-
-  // 内部で保持しているIObjectへのconstポインタを返します。
-  virtual const interpreter::IObject* getAddress() const {
-    return obj_;
-  }
-
- private:
-
-  // GCから渡されたIObjectのポインタ。
-  smart_ptr<interpreter::IObject> obj_;
-};
-};
-};
-
-#endif /* _DATA_STRUCTURE_INTERFACE_H_ */
similarity index 100%
rename from src/reader.cpp
rename to src/encoding_reader.cpp
diff --git a/src/encoding_reader.h b/src/encoding_reader.h
new file mode 100644 (file)
index 0000000..cf7bb12
--- /dev/null
@@ -0,0 +1,65 @@
+// 文字列、あるいはファイルからデータを読みだすためのフロントエンドです。
+// このフロントエンドは、文字列・ファイル等からデータを読出すだけの
+// 機能を持つ別のインターフェースと組み合わせ、ITranscoderを適用した
+// データを取得します。
+#ifndef _UTAKATA_SRC_READER_H_
+#define _UTAKATA_SRC_READER_H_
+
+#include <iostream>
+#include <vector>
+#include <string>
+#include <exception>
+
+#include "smart_ptr.h"
+
+namespace utakata {
+
+namespace transcoder {
+class ITranscoder;
+};
+
+namespace reader {
+
+
+class EncodingReader {
+  // 渡されたistreamから、Unicodeスカラー値を抽出する。
+  // istreamからUnicodeスカラー値を抽出するのは、全て
+  // Transcoderを介するようにする。
+ public:
+
+  // 利用するistreamを指定する。
+  StreamReader(smart_ptr<std::istream>& s,
+               const smart_ptr<transcoder::ITranscoder>& t);
+  virtual ~StreamReader() {}
+
+  virtual unsigned long read();
+  virtual std::vector<unsigned long> read(size_t num);
+
+  virtual unsigned long peek();
+
+  // 現在streamのどこまでを読んでいるのかを返す。
+  virtual size_t pos() const;
+
+  // 渡されたvectorをstreamに戻す。
+  virtual void unget(unsigned long ch);
+
+  // 現在のportが終了時点かどうかを返す。
+  virtual bool isEOF();
+
+ private:
+
+  // 内部のvalidチェックを行う。
+  // validチェックは成功しない場合にはPortExceptionが発生する。
+  void validate();
+
+  smart_ptr<std::istream> stream_;
+  smart_ptr<transcoder::ITranscoder> trans_;
+
+  // 文字の変換単位で取得した文字の個数
+  size_t pos_;
+};
+};
+
+};
+
+#endif /* __HOME_DERUI_DEVELOP_UTAKATA_SRC_READER_H_ */
index a56129e..99adb5e 100755 (executable)
@@ -1,7 +1,7 @@
 #ifndef _LEXEME_H_
 #define _LEXEME_H_
 
-#include "src/common/disable_copy.h"
+#include "src/common/uncopyable.h"
 #include "src/common/smart_ptr.h"
 
 namespace utakata {
@@ -14,7 +14,7 @@ namespace lexeme {
 
 class LexemeID;
 struct LexemeData;
-class ILexeme : private utility::DisableCopy {
+class ILexeme : private utility::Uncopyable {
   // 非終端記号、及び終端記号を表すクラス。
   // それぞれを取得するためのインターフェースはこれから派生して作成される。
  public:
@@ -24,11 +24,11 @@ class ILexeme : private utility::DisableCopy {
   virtual const LexemeID getID() const = 0;
 
   // stringのデータ型において、文字列を取得する。
-  virtual smart_ptr<utakata::unicode::UniString> toString() const = 0;
+  virtual utakata::unicode::UniString* toString() const = 0;
 
   // リテラルとして扱うためのデータを取得する。各リテラルのうち、
   // lexeme Datumとして扱うことができるデータについてはこれらとなる。
-  virtual smart_ptr<LexemeData> getData() const = 0;
+  virtual const LexemeData& data() const = 0;
 };
 };
 };
diff --git a/src/lexer_dispatcher.cpp b/src/lexer_dispatcher.cpp
new file mode 100644 (file)
index 0000000..3957499
--- /dev/null
@@ -0,0 +1,2 @@
+#include "src/lexer_dispatcher.h"
+
diff --git a/src/lexer_dispatcher.h b/src/lexer_dispatcher.h
new file mode 100755 (executable)
index 0000000..1ace602
--- /dev/null
@@ -0,0 +1,217 @@
+// SchemeLexer内部で利用される、各非終端記号毎の字句解析器への振り分けを
+// 行うためのLexerDispatcherを定義します。
+// LexerDispatcherは、ILexerCreaterインターフェースを実装した各クラスを、
+// LexerDispatchTermsと対にして保持し、抽出した文字列から、LexerDispatchTerms
+// に一致したIPartOfLexerインターフェースのLexerを実行します。
+//
+// example
+// -------
+// LexerDispatcher dis();
+// dis.Append(new CLexerCreator());
+// UniString str("hoge");
+// ILexeme i;
+// bool b = dis.Dispatch(str, &i);
+#ifndef _UTAKATA_SRC_SUBLEXER_IMPL_H_
+#define _UTAKATA_SRC_SUBLEXER_IMPL_H_
+
+#include <string>
+
+#include "src/common/uncopyable.h"
+#include "src/common/smart_ptr.h"
+
+namespace utakata {
+
+namespace unicode {
+class UniString;
+class UniChar;
+};
+
+namespace reader {
+class StreamReader;
+};
+
+namespace lexer {
+
+class ILexerCreator;
+class IPartOfLexer;
+class LexerDispatcher : private utility::Uncopyable {
+  // IPartOfLexerインターフェースを実装したクラスを、同じくIPartOfLexer
+  // インターフェースから返されるLexerDispatchTermsと対にし、
+  // LexerDispatchTermsと一致した場合に、ILexerCreatorより生成された
+  // Lexerに処理を委譲します。
+ public:
+  LexerDispatcher() : dispatch_lexer_() {}
+  virtual ~LexerDispatcher() {}
+
+  // 渡された文字列から、各Lexerへの条件チェックを行い、ディスパッチ
+  // される場合、該当するLexerを返します。
+  // Lexerにディスパッチした場合、trueが返されます。
+  // Lexerにディスパッチされなかった場合、引数のlexerの値は操作されず、
+  // 渡した時の値が保持されます。
+  bool Dispatch(const unicode::UniString& string,
+                IPartOfLexer* lexer);
+
+  // 追加するLexerを生成するILexerCreatorを渡し、ディスパッチ
+  // 対象として追加します。
+  // ILexerCreatorから生成されるIPartOfLexerは、自身を適用させるための
+  // 判定に利用するLexerDispatchTermsを返す必要があります。
+  void AppendLexer(const ILexerCreator& creator);
+
+ private:
+
+  // ディスパッチ条件と、ディスパッチ対象の対です。
+  std::map<smart_ptr<ILexerDispatchTerms>, smart_ptr<IPartOfLexer> > dispatch_lexer_;
+};
+
+class StringLexer : public ISubLexer
+{
+  // 文字列だと判断された場合に実行されるsublexer。
+  // 文字列が不正に終わったりしている場合には、その時点で例
+  // 外を発行する。
+ public:
+  StringLexer() {}
+  virtual ~StringLexer() {}
+
+  smart_ptr<lexeme::ILexeme> lex(smart_ptr<reader::StreamReader> stream,
+                                 smart_ptr<ISubLexer>& next);
+};
+
+class OneLineCommentLexer : public ISubLexer
+{
+  // コメントを返す。
+  // と言っても、;から開始されるコメントは完全に無視されるので、lexeme
+  // を保存する必要すらない。
+ public:
+
+  OneLineCommentLexer(){}
+  virtual ~OneLineCommentLexer(){}
+
+  smart_ptr<lexeme::ILexeme> lex(smart_ptr<reader::StreamReader> stream,
+                                 smart_ptr<ISubLexer>& next);
+};
+
+class NestedCommentLexer : public ISubLexer
+{
+  // コメントを返す。
+  // と言っても、;から開始されるコメントは完全に無視されるので、lexeme
+  // を保存する必要すらない。
+ public:
+
+  NestedCommentLexer(){}
+  virtual ~NestedCommentLexer(){}
+
+  smart_ptr<lexeme::ILexeme> lex(smart_ptr<reader::StreamReader> stream,
+                                 smart_ptr<ISubLexer>& next);
+};
+
+class CharactorLexer : public ISubLexer
+{
+  // 文字名、及び16進数による文字指定の解析を行なう。
+  // #\文字名、#\x<hex>;の両方を解釈する。
+ public:
+
+  CharactorLexer(){}
+  virtual ~CharactorLexer(){}
+
+  smart_ptr<lexeme::ILexeme> lex(smart_ptr<reader::StreamReader> stream,
+                                 smart_ptr<ISubLexer>& next);
+ private:
+
+  // 渡された文字列に該当するunicodeスカラー値を取得する。
+  unsigned long parseCharSpec(const unicode::UniString& s);
+
+};
+
+class NumberLexer : public ISubLexer
+{
+  // 数値を解析する。
+  // ここで解析する数値は、<number>に相当する。
+  const unsigned char BINARY;
+  const unsigned char OCTET;
+  const unsigned char DECIMAL;
+  const unsigned char HEX;
+ public:
+
+  NumberLexer(const utakata::unicode::UniString& str);
+  virtual ~NumberLexer(){}
+
+  smart_ptr<lexeme::ILexeme> lex(smart_ptr<reader::StreamReader> stream,
+                                 smart_ptr<ISubLexer>& next);
+ private:
+
+  smart_ptr<lexeme::ILexeme> innerLex_(smart_ptr<reader::StreamReader> stream,
+                                       smart_ptr<ISubLexer>& next,
+                                       const utakata::unicode::UniString& str);
+
+
+  // 渡した文字列からprefixを抽出して返す。
+  unsigned char getPrefix_(const utakata::unicode::UniString& str);
+  // 正確性を抽出して返す。
+  void checkExactness_(const utakata::unicode::UniString& str); 
+
+ private:
+            
+  smart_ptr<utakata::unicode::UniString> str_;
+
+  bool exact_;        // 正確性を設定する。
+  unsigned char prefix_;       // prefixを設定する。
+            
+};
+
+class IdentifierLexer : public ISubLexer
+{
+  // コメントを返す。
+  // と言っても、;から開始されるコメントは完全に無視されるので、lexeme
+  // を保存する必要すらない。
+ public:
+
+  IdentifierLexer(const utakata::unicode::UniString& str);
+  virtual ~IdentifierLexer(){}
+
+  smart_ptr<lexeme::ILexeme> lex(smart_ptr<reader::StreamReader> stream,
+                                 smart_ptr<ISubLexer>& next);
+
+ private:
+
+  smart_ptr<utakata::unicode::UniString> str_;
+};
+
+class BooleanLexer : public ISubLexer
+{
+  // #t、または#fを返す。
+  // いずれかの次には、必ず区切り文字がなければならない。
+ public:
+
+  BooleanLexer(const utakata::unicode::UniChar& ch);
+  virtual ~BooleanLexer(){}
+
+  smart_ptr<lexeme::ILexeme> lex(smart_ptr<reader::StreamReader> stream,
+                                 smart_ptr<ISubLexer>& next);
+
+ private:
+
+  smart_ptr<utakata::unicode::UniChar> ch_;
+};
+
+class ByteVectorLexer : public ISubLexer
+{
+  // #vu8であるかどうかを検査する。
+  // vu8ではない場合には、エラーとなる。
+ public:
+
+  ByteVectorLexer(const utakata::unicode::UniChar& ch);
+  virtual ~ByteVectorLexer(){}
+
+  smart_ptr<lexeme::ILexeme> lex(smart_ptr<reader::StreamReader> stream,
+                                 smart_ptr<ISubLexer>& next);
+
+ private:
+
+  smart_ptr<utakata::unicode::UniChar> ch_;
+};
+
+};
+
+};
+
+#endif /* __HOME_DERUI_DEVELOP_UTAKATA_SRC_SUBLEXER_IMPL_H_ */
diff --git a/src/lexer_interface.h b/src/lexer_interface.h
new file mode 100644 (file)
index 0000000..b997a3a
--- /dev/null
@@ -0,0 +1,84 @@
+// SchemeLexer内部で利用されるインターフェースを定義します。
+// IPartOfLexerインターフェースは、各非終端記号の字句解析を
+// 行う、部分的な字句解析器のインターフェースです。
+// ILexerCreatorは、IPartsOfLexerと、そのLexerの適用条件を
+// 記述したLexerDispatchTermを返します。
+// ILexerCreatorは、IPartsOfLexerと1:1で対応していなければなりません。
+//
+// IPartsOfLexerは、実際に字句解析を行います。解析結果として、ILexemeを
+// 返すようにします。
+#ifndef _UTAKATA_SRC_LEXER_INTERFACE_H_
+#define _UTAKATA_SRC_LEXER_INTERFACE_H_
+
+#include "smart_ptr.h"
+
+namespace utakata {
+
+namespace unicode {
+class UniString;
+}
+
+namespace reader {
+class StreamReader;
+};
+
+namespace lexeme {
+class ILexeme;
+};
+
+namespace lexer {
+
+class LexException : public std::exception
+{
+ public:
+  LexException(size_t pos, std::string str);
+  virtual ~LexException() throw() {}
+  const char* what() const throw();
+
+ private:
+
+  size_t pos_;
+  std::string str_;
+};
+
+class ILexerDispatchTerm {
+  // 各LexerへのDispatchを行うための判定を行うためのクラスです。
+  // 各Lexerに対応するILexerDispatchTermが一つ存在する必要があります。
+ public:
+  virtual ~ILexerDispatchTerm() {}
+
+  // ディスパッチを行うかどうかを判定します。
+  virtual bool IsDispatch(const unicode::UniString& string) const = 0;
+};
+
+class IPartOfLexer {
+  // 各非終端記号の字句解析を行うクラスのインターフェースです。
+  // IPartOfLexerを継承したクラスは、Lexメソッドを実装する必要があります。
+  // Lexは必ず何らかのILexeme派生クラスを返す必要があります。
+ public:
+  virtual ~IPartOfLexer() {}
+
+  // 読出しストリームへのポインタを受け取って、結果として生成した
+  // ILexemeインターフェースの派生クラスを返します。
+  virtual smart_ptr<lexeme::ILexeme> Lex(const unicode::UniString& string,
+      reader::StreamReader* stream) = 0;
+};
+
+class ILexerCreator {
+  // IPartOfLexerの生成と、生成したLexerの条件を設定した
+  // LexerDispatchTerm生成するインターフェースとなります。
+  // LexerDispatchTermには、Lexerの条件を設定する必要があります。
+ public:
+  virtual ~ILexerCreator() {}
+
+  // 各非終端記号に該当するIPartOfLexer派生のLexerを作成します。
+  virtual IPartOfLexer* Create() const = 0;
+
+  // このILexerCreatorが生成するIPartOfLexerへとDispatchする条件を記載
+  // したDispatchTermを返します。
+  virtual ILexerDispatchTerm* GetTerm() const = 0;
+};
+};
+};
+
+#endif /* __HOME_DERUI_DEVELOP_UTAKATA_SRC_LEXER_INTERFACE_H_ */
index 1c94938..d7a1214 100755 (executable)
@@ -1,77 +1,77 @@
 #ifndef _OBJECT_H_
 #define _OBJECT_H_
 
-#include "smart_ptr.h"
-#include "data_structure.h"
+#include "src/data_space.h"
+#include "src/common/smart_ptr.h"
 
 namespace utakata {
 
-    namespace type {
-        class Type;
-    };
-
-    namespace data {
-
-        class Object
-        {
-
-            // インタプリタ中でオブジェクトとして扱われる全てのオブジェクト
-            // となる。
-            // 構文データも含め、全てのデータを取り扱う。
-            // 全てのオブジェクトは、このオブジェクトに単純に「束縛」されるのみと
-            // なり、実装はその先のオブジェクトに完全に移譲されている。
-            // このオブジェクトは、そのままschemeでの変数となり、このオブジェクト
-            // が保持するのは、「変更可能性」と「オブジェクト格納領域」のみ
-            // となる。
+namespace type {
+class Type;
+};
 
-        public:
+namespace data {
 
-            Object(bool changeable, const smart_ptr<DataSpace>& space);
-            Object(const data::Object& o);
+class Object
+{
 
-            Object& operator=(const Object& o);
-            virtual ~Object(){}
-            // 変更可能なオブジェクトであるかどうかを返す。
-            virtual bool enableChange() const;
+  // インタプリタ中でオブジェクトとして扱われる全てのオブジェクト
+  // となる。
+  // 構文データも含め、全てのデータを取り扱う。
+  // 全てのオブジェクトは、このオブジェクトに単純に「束縛」されるのみと
+  // なり、実装はその先のオブジェクトに完全に移譲されている。
+  // このオブジェクトは、そのままschemeでの変数となり、このオブジェクト
+  // が保持するのは、「変更可能性」と「オブジェクト格納領域」のみ
+  // となる。
 
-            // 実体のデータが格納されている領域を返す。
-            virtual const smart_ptr<DataSpace> getSpace() const;
-            virtual void setSpace(const smart_ptr<DataSpace>& space);
+ public:
 
-        private:
+  Object(bool changeable, const smart_ptr<DataSpace>& space);
+  Object(const data::Object& o);
 
-            void swap(const Object& o);
+  Object& operator=(const Object& o);
+  virtual ~Object(){}
+  // 変更可能なオブジェクトであるかどうかを返す。
+  virtual bool enableChange() const;
 
-            smart_ptr<DataSpace> space_;
-            bool changeable_;
-        };
+  // 実体のデータが格納されている領域を返す。
+  virtual const smart_ptr<DataSpace> getSpace() const;
+  virtual void setSpace(const smart_ptr<DataSpace>& space);
 
-        class NullObject : public Object
-        {
-            // ObjectのNull実装。このオブジェクトは、ObjectがNULL = 値
-            // を保持していないことを保証する。
-            // 通常のObjectでは、getSpace().isNullは成立しないが、このオブジェクトは
-            // 必ず成立する。
-            // このオブジェクトは、Nilと=であるconsに設定される。
-            // nilオブジェクトと、NullObjectは全く違う。
-        public:
+ private:
 
-            NullObject();
-            virtual ~NullObject() {}
+  void swap(const Object& o);
 
-            // 変更可能なオブジェクトであるかどうかを返す。
-            virtual bool enableChange() const {return false;}
+  smart_ptr<DataSpace> space_;
+  bool changeable_;
+};
 
-            // 実体のデータが格納されている領域を返す。
-            virtual smart_ptr<DataSpace> getSpace() {return smart_ptr<DataSpace>();}
-            virtual void setSpace(const smart_ptr<DataSpace>& space) {}
-        };
+class NullObject : public Object
+{
+  // ObjectのNull実装。このオブジェクトは、ObjectがNULL = 値
+  // を保持していないことを保証する。
+  // 通常のObjectでは、getSpace().isNullは成立しないが、このオブジェクトは
+  // 必ず成立する。
+  // このオブジェクトは、Nilと=であるconsに設定される。
+  // nilオブジェクトと、NullObjectは全く違う。
+ public:
+
+  NullObject();
+  virtual ~NullObject() {}
+
+  // 変更可能なオブジェクトであるかどうかを返す。
+  virtual bool enableChange() const {return false;}
+
+  // 実体のデータが格納されている領域を返す。
+  virtual smart_ptr<DataSpace> getSpace() {return smart_ptr<DataSpace>();}
+  virtual void setSpace(const smart_ptr<DataSpace>& space) {}
+};
 
-        // 渡されたオブジェクトが、同一のTypeであるかどうかを返す。
-        // type::toTypeと合わせて利用するイメージで利用される。
-        bool instanceof(const data::Object& o, const type::Type& type);
+// 渡されたオブジェクトが、同一のTypeであるかどうかを返す。
+// type::toTypeと合わせて利用するイメージで利用される。
+bool instanceof(const data::Object& o, const type::Type& type);
 
-    };
+};
 
 };
 
diff --git a/src/reader.h b/src/reader.h
deleted file mode 100644 (file)
index b5d62a0..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#ifndef _READER_H_
-#define _READER_H_
-
-#include <iostream>
-#include <vector>
-#include <string>
-#include <exception>
-
-#include "smart_ptr.h"
-
-namespace utakata {
-
-    namespace transcoder {
-        class ITranscoder;
-    };
-    
-    namespace reader {
-
-        class ReaderException : public std::exception
-        {
-        public:
-            ReaderException(std::string str);
-            virtual ~ReaderException() throw() {};
-            const char* what() const throw();
-
-        private:
-
-            std::string str_;
-        };
-
-        class StreamReader
-        {
-            // 渡されたistreamから、Unicodeスカラー値を抽出する。
-            // istreamからUnicodeスカラー値を抽出するのは、全て
-            // Transcoderを介するようにする。
-        public:
-
-            // 利用するistreamを指定する。
-            StreamReader(smart_ptr<std::istream>& s,
-                         const smart_ptr<transcoder::ITranscoder>& t);
-            virtual ~StreamReader() {}
-
-            virtual unsigned long read();
-            virtual std::vector<unsigned long> read(size_t num);
-
-            virtual unsigned long peek();
-
-            // 現在streamのどこまでを読んでいるのかを返す。
-            virtual size_t pos() const;
-
-            // 渡されたvectorをstreamに戻す。
-            virtual void unget(unsigned long ch);
-
-            // 現在のportが終了時点かどうかを返す。
-            virtual bool isEOF();
-
-        private:
-
-            // 内部のvalidチェックを行う。
-            // validチェックは成功しない場合にはPortExceptionが発生する。
-            void validate();
-
-            smart_ptr<std::istream> stream_;
-            smart_ptr<transcoder::ITranscoder> trans_;
-
-            // 文字の変換単位で取得した文字の個数
-            size_t pos_;
-        };
-    };
-
-};
-
-
-#endif /* _READER_H_ */
diff --git a/src/reader_interface.h b/src/reader_interface.h
new file mode 100644 (file)
index 0000000..8eb6548
--- /dev/null
@@ -0,0 +1,84 @@
+// 各種デバイスからバイナリデータを読みだすためのインターフェースを
+// 定義します。
+// ここで定義されたインターフェースでは、文字列には変換されず、
+// バイナリだけを読出します。
+#ifndef _UTAKATA_SRC_READER_INTERFACE_H_
+#define _UTAKATA_SRC_READER_INTERFACE_H_
+
+#include <vector>
+#include <exception>
+
+namespace utakata {
+
+namespace reader {
+
+class EndOfDeviceException : public std::exception {
+  // reader::IReaderインターフェースの派生クラスにおいて、
+  // 末尾に到達しているにも関わらず読み出しが行われた場合に送出されます。
+ public:
+  // 表示する文字列を渡します。
+  explicit EndOfDeviceException(std::string str) : str_() {
+    const std::string prefix("end of device : ");
+    str_ = prefix + str;
+  }
+
+  virtual ~EndOfDeviceException() throw() {};
+  const char* what() const throw() {
+    return str_.c_str();
+  }
+
+ private:
+
+  std::string str_;
+};
+
+
+class IReader {
+  // 各種デバイスから読み出しを行うためのインターフェースです。
+  // このインターフェースを実装したクラスは、すべてのインターフェース
+  // を実装する必要があります。
+ public:
+
+  virtual ~IReader() {}
+
+  enum SeekDirection {
+    kForward, kBackward,
+  };
+
+  // 各種デバイスから一文字読出します。
+  // 末尾に到達してなお読み出しが行われた場合、reader::EndOfDeviceException
+  // 例外を投げなければなりません。
+  // readでは、読み出し位置を更新します。
+  virtual unsigned char Read() = 0;
+  virtual std::vector<unsigned char> Read(size_t num) = 0;
+
+  // デバイスから1バイトの読出しを行いますが、内部の読み出し位置は変化
+  // しません。
+  // peekした後、readを行うと、全く同一のバイトが得られます。
+  virtual unsigned char Peek() = 0;
+  virtual std::vector<unsigned char> Peek(size_t num) = 0;
+
+  // 読出したバイト数を返します。
+  virtual size_t GetPos() const = 0;
+
+  // 読み出し位置を1バイト分だけ戻します。読み出し位置がすでに先頭
+  // である場合でも、例外を発生させる必要はありません。
+  virtual void Unget() = 0;
+
+  // 現在位置から、指定された方向に指定された量だけ読み出し位置を進めます。
+  // 指定された移動量のうち、実際に移動した量を返します。
+  virtual size_t Seek(size_t seekpos, SeekDirection direciton) = 0;
+
+  // 読み出し位置を先頭に戻します。
+  virtual void Begin() = 0;
+
+  // 読み出し対象のサイズを返します。
+  virtual size_t GetSize() const = 0;
+
+  // 読み出し位置が末尾であるかどうかを返します。
+  virtual bool IsEof() const = 0;
+};
+};
+};
+
+#endif /* __HOME_DERUI_DEVELOP_UTAKATA_SRC_READER_INTERFACE_H_ */
similarity index 100%
rename from src/lexer.cpp
rename to src/scheme_lexer.cpp
similarity index 100%
rename from src/lexer.h
rename to src/scheme_lexer.h
diff --git a/src/simpletest.cpp b/src/simpletest.cpp
deleted file mode 100755 (executable)
index ab7d812..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-#include <vector>
-#include <iostream>
-#include <string>
-#include <algorithm>
-
-#include "simpletest.h"
-
-using namespace simpletest;
-
-SimpleTestSuite::SimpleTestSuite(const std::string& name, bool enableCatch) :
-    name_("[" + name + "]"), prefix_(">>"), testers_(), strm_(std::cout),
-    runner_()
-{
-    runner_.add(new SimpleTestRunner(strm_, prefix_, enableCatch));
-}
-
-SimpleTestSuite::SimpleTestSuite(const std::string& name,
-                                 std::ostream& strm, bool enableCatch) :
-    name_("[" + name + "]"), prefix_(">>"), testers_(), strm_(strm)
-{
-    runner_.add(new SimpleTestRunner(strm_, prefix_, enableCatch));
-}
-
-bool SimpleTestSuite::addTester(const sfcr::sfc_r<bool>::type& func)
-{
-    // テストを追加する。中身がNULLの場合には触らない。
-    if (func.isNull())
-    {
-        return false;
-    }
-    testers_.push_back(func);
-    return true;
-}
-
-int SimpleTestSuite::run(bool enableCatch)
-{
-    // この場合、標準出力される、std::coutが利用される。
-    // 現在保持しているテストをまとめて実行する。
-    // 実行した結果は、全て出力されるようになる。
-    
-    printBeginMessage();
-
-    std::for_each(testers_.begin(), testers_.end(),
-                  *runner_);
-
-    printEndMessage();
-
-    return runner_->getFail() > 0 || runner_->getException() ? 1 : 0;
-}
-
-void simpletest::SimpleTestSuite::printBeginMessage()
-{
-    // 開始メッセージを、指定されたストリームに出力する。
-
-    const std::string separates("==================================================");
-    const std::string run(" is running...");
-    const std::string suite("Test suite is ");
-
-    strm_ << separates << std::endl;
-    strm_ << prefix_ << suite << name_ << run << std::endl;
-    strm_ << separates << std::endl;
-}
-
-void simpletest::SimpleTestSuite::printEndMessage()
-{
-    // テストの終了メッセージを、指定されたストリームに出力する。
-    const std::string separates("==================================================");
-    const std::string message("SimpleTest Results.");
-    
-    strm_ << separates << std::endl;
-    strm_ << prefix_ << message << std::endl;
-
-    // 結果を利用して出力する。
-    {
-        const std::string mes("executes tests ");
-        int count = testers_.size();
-        strm_ << prefix_ << mes << count << " --> ";
-        strm_ << "success [" << runner_->getSuccess() << "] : ";
-        strm_ << "fail [" << runner_->getFail() << "] : ";
-        strm_ << "exception [" << runner_->getException() << "]" << std::endl;
-    }
-
-    strm_ << separates << std::endl;
-}
-
-smart_ptr<SimpleTestAsserter> simpletest::SimpleTestSuite::getAsserter()
-{
-    return smart_ptr<simpletest::SimpleTestAsserter>(new
-                                                      simpletest::SimpleTestAsserter(strm_, prefix_));
-}
-
-
-simpletest::SimpleTestRunner::SimpleTestRunner(std::ostream& strm,
-                                               const std::string& prefix,
-                                               bool enableCheck) :
-    strm_(strm), prefix_(prefix), pImpl(new simpletest::SimpleTestRunner::PImpl)
-{
-    pImpl->enable = enableCheck;
-}
-
-void simpletest::SimpleTestRunner::innerCheck(bool b)
-{
-    // 関数が例外を返さなかった場合に実行されるチェック関数
-    pImpl->count++;
-    if (b)
-    {
-        pImpl->success++;
-        printSuccess();
-    } else {
-        pImpl->fail++;
-        printFail();
-    }
-}
-
-void simpletest::SimpleTestRunner::innerCheck(std::exception& e) {
-    // 例外が発行された場合、とりあえずはe.whatsを
-    // std::stringとして保持しておく。
-    pImpl->exception++;
-    printException(e);
-}
-
-void simpletest::SimpleTestRunner::printSuccess()
-{
-    // 成功した場合のメッセージを出力する。
-    int count = pImpl->success + pImpl->fail + pImpl->exception;
-    strm_ << prefix_ << "test number ";
-    strm_ << count << " is success." << std::endl;
-}
-
-void simpletest::SimpleTestRunner::printFail()
-{
-    // 成功した場合のメッセージを出力する。
-    int count = pImpl->success + pImpl->fail + pImpl->exception;
-    strm_ << prefix_ << "test number ";
-    strm_ << count << " is fail." << std::endl;
-}
-
-void simpletest::SimpleTestRunner::printException(const std::exception& e)
-{
-    // 成功した場合のメッセージを出力する。
-    int count = pImpl->success + pImpl->fail + pImpl->exception;
-    strm_ << prefix_ << "test number ";
-    strm_ << count << " is throw exception." << std::endl;
-    strm_ << e.what() << std::endl;
-}
-
-
-//================================================================================
-
-
-simpletest::SimpleTestAsserter::SimpleTestAsserter(std::ostream& strm,
-                                                     const std::string& prefix) :
-    strm_(strm), prefix_(prefix), count_(0)
-{
-}
-
-simpletest::SimpleTestAsserter::SimpleTestAsserter(const SimpleTestAsserter& asserter) :
-    strm_(asserter.strm_), prefix_(asserter.prefix_), count_(asserter.count_)
-{
-}
-
-SimpleTestAsserter& simpletest::SimpleTestAsserter::operator=(const SimpleTestAsserter& asserter)
-{
-    // 代入によってコピーを作成するための処理
-    SimpleTestAsserter a(asserter);
-    std::swap(*this, a);
-    return *this;
-}
-
-bool simpletest::SimpleTestAsserter::isOk() const
-{
-    // count_は、checkの比較関数が失敗する度にこれがインクリメントされることに
-    // なっている。
-    return count_ == 0 ? true : false;
-}
diff --git a/src/simpletest.h b/src/simpletest.h
deleted file mode 100755 (executable)
index 63ed7ff..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-#ifndef _SIMPLETEST_H_
-#define _SIMPLETEST_H_
-
-#include <vector>
-#include <string>
-#include <exception>
-#include <iostream>
-#include <functional>
-
-#include "smart_function_callback.h"
-
-namespace simpletest {
-
-//     C++にて、シンプルなテストを実行するための簡易環境。
-//     基本的な使いかたは次のようになる。
-
-//     #include "simpletest.h"
-//     #include <assert.h>
-
-//     bool hoge() {
-//         int o = 100;
-//         if (o != 100)
-//         {
-//             return false;
-//         } else {
-//             return true;
-//         }
-//     }
-
-//     int main(int argc, char *argv[])
-//     {
-//         simpletest::SimpleTestSuite suite;
-//         suite.addTester(fc::screate(hoge));
-//         suite.run();
-
-//         return 0;
-//     }
-
-//     出力結果 ->
-//     ============================================================
-//     - running...
-//     ============================================================
-//     - SimpleTestSuite Results
-//     - ran tests 1 --> success [1] : failed [0] : exception [0]
-//     ============================================================
-    
-//     という形で、非常にシンプルな形で使用することができる。
-//     基本的に、add_suiteで追加できるのはbool (*T)()な関数のみである。
-//     そして、追加した関数がtrueを返せば成功、falseを返せば失敗として、
-//     一応例外が実行されたかどうかをチェックし、例外が投げられたことで関数が
-//     終了している場合、それも記述される。
-
-    class SimpleTestRunner;
-
-    class SimpleTestAsserter;
-    
-    class SimpleTestSuite
-    {
-        // セパレータ以外の文字列の表記時に利用されるprefix
-        const std::string name_;
-        const std::string prefix_;
-
-    public:
-        
-        SimpleTestSuite(const std::string& name, bool enableCatch = true);
-        SimpleTestSuite(const std::string& name, std::ostream& strm,
-                        bool enableCatch = true);
-        virtual ~SimpleTestSuite(){}
-
-        // 指定された形式の関数コールバックを渡す。
-        // 返り値以外は指定されてりない。
-        bool addTester(const sfcr::sfc_r<bool>::type& func);
-
-        // ostreamが指定された場合、なんらかの媒体に出力することができ
-        // る。
-        // デフォルトで指定されない場合には、std::coutが利用される。
-        int run(bool enableCatch = true);
-
-        // assertを行う部分を切り出したクラスを返す。
-        smart_ptr<SimpleTestAsserter> getAsserter();
-
-    private:
-
-        // テストの開始と終了を表示するための関数
-        void printBeginMessage();
-        void printEndMessage();
-
-    private:
-
-        std::vector<sfcr::sfc_r<bool>::type> testers_;
-        std::ostream& strm_;
-
-        smart_ptr<SimpleTestRunner> runner_;
-
-    };
-
-    
-    //================================================================================
-
-    class SimpleTestRunner
-    {
-        /**
-           テスト結果をシンプルに表示するだけの機能を持つ。
-        */
-    public:
-        SimpleTestRunner(std::ostream& strm,
-                         const std::string& prefix,
-                         bool enableCatch);
-        
-        void printSuccess();
-        void printFail();
-        void printException(const std::exception& e);
-
-        // 自身をそのまま実行可能な状態とする。
-        template<class T>
-        void operator()(T& test)
-            {
-                // デフォルトで有効となっているenableCatchが
-                // 無効である場合、例外が一番上まで伝播する。
-                if (pImpl->enable)
-                {
-                    try {
-                        test->run();
-                        innerCheck(test->getResult());
-                    } catch (std::exception& e) {
-                        innerCheck(e);
-                    }
-                }
-                else
-                {
-                    test->run();
-                    innerCheck(test->getResult());
-                }
-            }
-
-        int getSuccess() const {return pImpl->success;}
-        int getFail() const {return pImpl->fail;}
-        int getException() const {return pImpl->exception;}
-
-    private:
-
-        void innerCheck(bool b);
-        void innerCheck(std::exception& e);
-
-    private:
-
-        std::ostream& strm_;
-        const std::string prefix_;
-
-        struct PImpl;
-        smart_ptr<PImpl> pImpl;
-
-        struct PImpl
-        {
-            PImpl() : success(0), fail(0), exception(0), count(0), enable(false) {}
-            int success;
-            int fail;
-            int exception;
-            int count;
-            bool enable;
-        };
-
-    };
-
-    //================================================================================
-    // 単純なassertを行うためだけのクラス。
-    //================================================================================
-
-    template<class T, class S>
-    struct equal : public std::binary_function<T, S, bool>
-    {
-        // 渡された二項が等しいことを表すためのテンプレート。
-        // 基本的には==のオペレータオーバーロードが利用されるはず
-        // なので特に不要とも思われるけれど、他のオペレータを
-        // 用いることができるようにもしておきたいため。
-        bool operator()(const T& f1, const S& f2) {
-            return (f1 == f2);
-        }
-
-    };
-
-    template<class T, class S>
-    struct not_equal : public std::binary_function<T, S, bool>
-    {
-        // 渡された二項が等しくないことを表すテンプレート。
-        // 基本的には!=のオペレータオーバーロードが利用されるはず
-        // なので特に不要とも思われるけれど、他のオペレータを
-        // 用いることができるようにもしておきたいため。
-        bool operator()(const T& f1, const S& f2) {
-            return (f1 != f2);
-        }
-    };
-
-    class SimpleTestAsserter
-    {
-    public:
-        SimpleTestAsserter(std::ostream& strm,
-                            const std::string& prefix);
-        SimpleTestAsserter(const SimpleTestAsserter& asserter);
-        virtual ~SimpleTestAsserter() {}
-
-        SimpleTestAsserter& operator=(const SimpleTestAsserter& asserter);
-
-        // 外部から利用される簡単なassert。
-        // 基本的にはstd::equal_toを利用することになっている。
-        // それ以外も同様に定義されているが、独自にbinary_functionから派生して
-        // 作成することも当然許可されている。
-        // binary_functionから派生する場合、返り値はboolにすること。
-        template<class First, class Second, class Compare>
-        void check_(const First& f, const Second& s, const std::string& mes, Compare c) {
-            if (!c(f, s))
-            {
-                // 失敗したら簡単なメッセージを設定することにする。
-                if (!mes.empty())
-                {
-                    strm_ << prefix_ << "fail assert between [" << f << "] and [" << s << "] "
-                          << std::endl;
-                    strm_ << (prefix_ + prefix_) << "message is --> " << mes << std::endl;
-                }
-                else
-                {
-                    strm_ << prefix_ << "fail assert between [" << f << "] and [" << s << "]" << std::endl;
-                }
-                ++count_;
-            }
-        }
-
-        template<class First, class Second, class Compare>
-        void checkOnly_(const First& f, const Second& s, const std::string& mes, Compare c) {
-            if (!c(f, s))
-            {
-                // 値を表示せず、成功したか失敗したかだけを表示する。
-                if (!mes.empty())
-                {
-                    strm_ << prefix_ << "fail assert number : " << count_ + 1 << std::endl;
-                    strm_ << (prefix_ + prefix_) << "message is --> " << mes << std::endl;
-                }
-                else
-                {
-                    strm_ << prefix_ << "fail assert number : " << count_ + 1 << std::endl;
-                }
-                ++count_;
-            }
-        }
-
-        // デフォルトでstd::equal_toを比較関数として利用する。
-        // 比較関数を渡す必要のない場合にはこれが利用される。
-        template<class First, class Second>
-        void check(const First& f, const Second& s, const std::string& mes = std::string()) {
-            check_(f, s, mes, equal<First,Second>());
-        }
-
-        template<class First, class Second>
-        void checkOnly(const First& f, const Second& s, const std::string& mes = std::string()) {
-            checkOnly_(f, s, mes, equal<First, Second>());
-        }
-
-        // assertの結果が満足いくものかどうかを返す。
-        bool isOk() const;
-
-    private:
-
-        std::ostream& strm_;
-        std::string prefix_;
-
-        int count_;
-
-    };
-    
-
-};
-
-#endif /* _SIMPLETEST_H_ */
diff --git a/src/string_reader.cpp b/src/string_reader.cpp
new file mode 100755 (executable)
index 0000000..7d6c0f6
--- /dev/null
@@ -0,0 +1,164 @@
+//
+// reader::StringReaderの実装を提供します。
+//
+// StringReaderは、単純な文字列から、バイト単位の読み出しをサポートするための
+// 実装です。
+// StringReaderでは、渡された文字列のエンコーディングを考慮しません。
+// そのため、マルチバイト文字列を渡した場合、マルチバイトの解釈は行わず、
+// その場合でも単純なバイト列として扱います。
+//
+// StringReaderにおける読み出し位置は、先頭が0であるとされます。
+// 4文字渡して、2文字読出した時点で2となります。
+//
+#include "src/string_reader.h"
+
+namespace reader = utakata::reader;
+
+// 保持している文字列の現在の読み出し位置から1バイト読み出して返します。
+// この関数では、読み出し位置を更新します。
+//
+// IsEofがtrueを返す場合に実行すると、reader::EndOfDeviceExceptionが送出
+// されます。
+// コンストラクタに空文字列が渡されている場合、常に例外を返します。
+unsigned char reader::StringReader::Read()
+{
+  if (iterator_ == buffer_.end()) {
+    throw reader::EndOfDeviceException("end of String `" + buffer_ + "`");
+  }
+
+  unsigned char byte = *iterator_++;
+  ++pos_;
+  return byte;
+}
+
+// 保持している文字列の現在の読み出し位置から指定されたバイト数だけ
+// 読み出して返します。この関数では、読み出し位置を更新します。
+// 指定されたバイト数未満で末尾に到達した場合、読出したデータだけが返されます。
+//
+// IsEofがtrueを返す場合に実行すると、reader::EndOfDeviceExceptionが送出
+// されます。
+// コンストラクタに空文字列が渡されている場合、常に例外を返します。
+//
+// 引数としてゼロ以下の数値が渡された場合、返されるバイト列のサイズは0になります。
+std::vector<unsigned char> reader::StringReader::Read(size_t num) {
+  if (num <= 0)
+  {
+    return std::vector<unsigned char>();
+  }
+
+  if (iterator_ == buffer_.end()) {
+    throw reader::EndOfDeviceException("end of String `" + buffer_ + "`");
+  }
+
+  std::vector<unsigned char> ret;
+  for (size_t i = 0; i < num && iterator_ != buffer_.end(); ++i) {
+    ret.push_back(*iterator_++);
+  }
+
+  pos_ += num;
+
+  return ret;
+}
+
+// 保持している文字列の現在の読み出し位置から、1バイトだけ
+// 読み出して返します。この関数では、読み出し位置は更新されません。
+// 指定されたバイト数未満で末尾に到達した場合、読出したデータだけが返されます。
+//
+// IsEofがtrueを返す場合に実行すると、reader::EndOfDeviceExceptionが送出
+// されます。
+// コンストラクタに空文字列が渡されている場合、常に例外を返します。
+unsigned char reader::StringReader::Peek() {
+  if (iterator_ == buffer_.end()) {
+    throw reader::EndOfDeviceException("end of String `" + buffer_ + "`");
+  }
+
+  return *iterator_;
+}
+
+// 保持している文字列の現在の読み出し位置から、指定されたバイト数だけ
+// 読み出して返します。この関数では、読み出し位置は更新されません。
+// 指定されたバイト数未満で末尾に到達した場合、読出したデータだけが返されます。
+//
+// IsEofがtrueを返す場合に実行すると、reader::EndOfDeviceExceptionが送出
+// されます。
+// コンストラクタに空文字列が渡されている場合、常に例外を返します。
+//
+// 引数としてゼロ以下の値が渡された場合、返り値のサイズは0となります。
+std::vector<unsigned char> reader::StringReader::Peek(size_t num) {
+  if (num <= 0) {
+    return std::vector<unsigned char>();
+  }
+
+  if (iterator_ == buffer_.end()) {
+    throw reader::EndOfDeviceException("end of String `" + buffer_ + "`");
+  }
+
+  reader::StringReader::internal_iterator peeker = iterator_;
+  std::vector<unsigned char> ret;
+  for (size_t i = 0; i < num && peeker != buffer_.end(); ++i) {
+    ret.push_back(*peeker++);
+  }
+
+  return ret;
+}
+
+// 現在の読み出し位置を返します。PeekではGetPosの値は更新されません。
+size_t reader::StringReader::GetPos() const {
+  return pos_;
+}
+
+// 読み出し位置を1バイト分だけ戻します。
+// 先頭で実行された場合には何も行いません。
+void reader::StringReader::Unget() {
+  if (iterator_ != buffer_.begin()) {
+    --iterator_;
+    --pos_;
+  }
+}
+
+// 読み出し位置を、指定された方向に指定された量だけ移動します。
+// 移動量が、先頭、または末尾を超えた場合、それぞれ先頭、末尾に
+// 位置します。
+// seekpos以下の値で、移動した量を返します。
+//
+// seekposにゼロ以下の値が渡された場合、何も行いません。
+size_t reader::StringReader::Seek(
+    size_t seekpos, reader::StringReader::SeekDirection direction) {
+  if (seekpos <= 0) {
+    return 0;
+  }
+
+  int count = 0;
+  if (direction == reader::IReader::kForward) {
+    for (size_t i = 0; i < seekpos && iterator_ != buffer_.end();
+         ++i, ++pos_, ++iterator_, ++count) {}
+    if (pos_ > buffer_.size()) {
+      pos_ = buffer_.size();
+    }
+
+  } else {
+    for (size_t i = 0; i < seekpos && iterator_ != buffer_.begin();
+         ++i, --pos_, --iterator_, ++count) {}
+    if (pos_ < 0) {
+      pos_ = 0;
+    }
+  }
+
+  return count;
+}
+
+// 読み出し位置を先頭に戻します。
+void reader::StringReader::Begin() {
+  pos_ = 0;
+  iterator_ = buffer_.begin();
+}
+
+// 現在保持している読出し対象のサイズを返します。
+size_t reader::StringReader::GetSize() const {
+  return buffer_.size();
+}
+
+// 現在の読み出し位置が末尾である場合、trueを返します。
+bool reader::StringReader::IsEof() const {
+  return iterator_ == buffer_.end();
+}
diff --git a/src/string_reader.h b/src/string_reader.h
new file mode 100644 (file)
index 0000000..673965a
--- /dev/null
@@ -0,0 +1,91 @@
+// 文字列から1バイト単位での読み出しを行うクラスを定義します。
+// StringReaderは、渡された文字列から1バイト単位での読み出し機能を
+// 提供します。
+//
+// example
+// -------
+// StringReader reader("hoge");
+// reader.read(); // == 'h'
+// reader.peek(); // == 'o'
+// reader.read(); // == 'o'
+// reader.read(2); // == "ge"
+//
+// reader.begin(); reader.seek(1, IReader::kForward);
+// reader.read(); // == 'o'
+// reader.read(2);
+// reader.eof(); // == true
+#ifndef _UTAKATA_SRC_STRING_READER_H_
+#define _UTAKATA_SRC_STRING_READER_H_
+
+#include <string>
+#include "src/reader_interface.h"
+#include "src/common/uncopyable.h"
+
+namespace utakata {
+
+namespace reader {
+
+class StringReader : public IReader, private utility::Uncopyable {
+  // 各種デバイスから読み出しを行うためのインターフェースです。
+  // このインターフェースを実装したクラスは、すべてのインターフェース
+  // を実装する必要があります。
+ public:
+
+  typedef std::string::const_iterator internal_iterator;
+
+  explicit inline StringReader(const std::string& string)
+      : buffer_(string), iterator_(), pos_(0) {
+    iterator_ = buffer_.begin();
+  }
+
+  virtual ~StringReader() {}
+
+  // 各種デバイスから一文字読出します。
+  // 末尾に到達してなお読み出しが行われた場合、reader::EndOfDeviceException
+  // 例外を投げなければなりません。
+  // readでは、読み出し位置を更新します。
+  unsigned char Read();
+  std::vector<unsigned char> Read(size_t num);
+
+  // デバイスから1バイトの読出しを行いますが、内部の読み出し位置は変化
+  // しません。
+  // peekした後、readを行うと、全く同一のバイトが得られます。
+  unsigned char Peek();
+  std::vector<unsigned char> Peek(size_t num);
+
+  // 現在の読み出し位置を返します。
+  size_t GetPos() const;
+
+  // 読み出し位置を1バイト分だけ戻します。読み出し位置がすでに先頭
+  // である場合でも、例外を発生させる必要はありません。
+  void Unget();
+
+  // 現在位置から、指定された方向に指定された量だけ読み出し位置を進めます。
+  // 指定された移動量のうち、実際に移動した量を返します。
+  size_t Seek(size_t seekpos, SeekDirection direciton);
+
+  // 読み出し位置を先頭に戻します。
+  void Begin();
+
+  // 読み出し対象のサイズを返します。
+  size_t GetSize() const;
+
+  // 読み出し位置が末尾であるかどうかを返します。
+  bool IsEof() const;
+
+ private:
+
+  // 初期化された読出し用の文字列です。内部では書込みなどは行われないため、
+  // constです。
+  const std::string buffer_;
+
+  // std::stringの中で現在指している位置を表すためのiteratorです。
+  internal_iterator iterator_;
+
+  // 内部文字列中で現在の位置を表します。
+  size_t pos_;
+};
+};
+};
+
+#endif /* _UTAKATA_SRC_STRING_READER_H_ */
diff --git a/src/sublexer.h b/src/sublexer.h
deleted file mode 100644 (file)
index f5293f9..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef _SUBLEXER_H_
-#define _SUBLEXER_H_
-
-#include "smart_ptr.h"
-
-// これはあくまで抽象なので、定義に依存させる。
-namespace utakata {
-
-    namespace reader {
-        class StreamReader;
-    };
-
-    namespace lexeme {
-        class ILexeme;
-    };
-    
-    namespace sublexer {
-
-        class ISubLexer
-        {
-            /**
-               lexerのlex内で、数々の条件分岐を行わなければならない場合に、
-               それぞれのsublexerからの結果、追加で返されるsublexerを、
-               次の文字における判定として利用することにしておく。
-               このようにすることで、インターフェースを完全に統一しながら、
-               sublexerからsublexerを返すようにしていくだけで、
-               lex内部をシンプルにすることができる。
-
-               これは完全にインターフェースのみを提供する。
-            */
-               
-        public:
-            ISubLexer() {}
-            virtual ~ISubLexer() {}
-
-            // ストリームを受け取り、lexemeを返す。
-            // 次に処理すべきlexerが存在する場合、nextに設定しておくと、
-            // 返されたlexemeは無視され、nextが実行される。
-            virtual smart_ptr<lexeme::ILexeme> lex(
-                smart_ptr<reader::StreamReader> stream,
-                smart_ptr<ISubLexer>& next) = 0;
-        };
-
-    };
-
-};
-
-#endif /* _SUBLEXER_H_ */
diff --git a/src/sublexer_impl.h b/src/sublexer_impl.h
deleted file mode 100755 (executable)
index 41bf0f1..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-#ifndef _SUBLEXER_IMPL_H_
-#define _SUBLEXER_IMPL_H_
-
-#include <string>
-
-#include "sublexer.h"
-#include "smart_ptr.h"
-#include "lexeme.h"
-
-namespace utakata {
-
-    namespace unicode {
-        class UniString;
-        class UniChar;
-    };
-
-    namespace reader {
-        class StreamReader;
-    };
-
-    namespace sublexer {
-
-        class LexException : public std::exception
-        {
-        public:
-            LexException(size_t pos, std::string str);
-            virtual ~LexException() throw() {}
-            const char* what() const throw();
-
-        private:
-
-            size_t pos_;
-            std::string str_;
-        };
-
-        class FirstLexer : public ISubLexer
-        {
-            // lex関数の内部で最初に実行される。
-            // ここから返されない場合は、一文字の構文構成文字が返されるということになる。
-        public:
-            FirstLexer() {}
-            virtual ~FirstLexer() {}
-
-            smart_ptr<lexeme::ILexeme> lex(smart_ptr<reader::StreamReader> stream,
-                                           smart_ptr<ISubLexer>& next);
-
-        private:
-
-            // lex関数中で利用される、雑多になった字句解析関数の分割
-            smart_ptr<lexeme::ILexeme> lex_(const utakata::unicode::UniString& str,
-                                            smart_ptr<reader::StreamReader> stream,
-                                            smart_ptr<ISubLexer>& next);
-
-        };
-
-        class StringLexer : public ISubLexer
-        {
-            // 文字列だと判断された場合に実行されるsublexer。
-            // 文字列が不正に終わったりしている場合には、その時点で例
-            // 外を発行する。
-        public:
-            StringLexer() {}
-            virtual ~StringLexer() {}
-
-            smart_ptr<lexeme::ILexeme> lex(smart_ptr<reader::StreamReader> stream,
-                                           smart_ptr<ISubLexer>& next);
-        };
-
-        class OneLineCommentLexer : public ISubLexer
-        {
-            // コメントを返す。
-            // と言っても、;から開始されるコメントは完全に無視されるので、lexeme
-            // を保存する必要すらない。
-        public:
-
-            OneLineCommentLexer(){}
-            virtual ~OneLineCommentLexer(){}
-
-            smart_ptr<lexeme::ILexeme> lex(smart_ptr<reader::StreamReader> stream,
-                                           smart_ptr<ISubLexer>& next);
-        };
-
-        class NestedCommentLexer : public ISubLexer
-        {
-            // コメントを返す。
-            // と言っても、;から開始されるコメントは完全に無視されるので、lexeme
-            // を保存する必要すらない。
-        public:
-
-            NestedCommentLexer(){}
-            virtual ~NestedCommentLexer(){}
-
-            smart_ptr<lexeme::ILexeme> lex(smart_ptr<reader::StreamReader> stream,
-                                           smart_ptr<ISubLexer>& next);
-        };
-
-        class CharactorLexer : public ISubLexer
-        {
-            // 文字名、及び16進数による文字指定の解析を行なう。
-            // #\文字名、#\x<hex>;の両方を解釈する。
-        public:
-
-            CharactorLexer(){}
-            virtual ~CharactorLexer(){}
-
-            smart_ptr<lexeme::ILexeme> lex(smart_ptr<reader::StreamReader> stream,
-                                           smart_ptr<ISubLexer>& next);
-        private:
-
-            // 渡された文字列に該当するunicodeスカラー値を取得する。
-            unsigned long parseCharSpec(const unicode::UniString& s);
-
-        };
-
-        class NumberLexer : public ISubLexer
-        {
-            // 数値を解析する。
-            // ここで解析する数値は、<number>に相当する。
-            const unsigned char BINARY;
-            const unsigned char OCTET;
-            const unsigned char DECIMAL;
-            const unsigned char HEX;
-        public:
-
-            NumberLexer(const utakata::unicode::UniString& str);
-            virtual ~NumberLexer(){}
-
-            smart_ptr<lexeme::ILexeme> lex(smart_ptr<reader::StreamReader> stream,
-                                           smart_ptr<ISubLexer>& next);
-        private:
-
-            smart_ptr<lexeme::ILexeme> innerLex_(smart_ptr<reader::StreamReader> stream,
-                                                 smart_ptr<ISubLexer>& next,
-                                                 const utakata::unicode::UniString& str);
-
-
-            // 渡した文字列からprefixを抽出して返す。
-            unsigned char getPrefix_(const utakata::unicode::UniString& str);
-            // 正確性を抽出して返す。
-            void checkExactness_(const utakata::unicode::UniString& str); 
-
-        private:
-            
-            smart_ptr<utakata::unicode::UniString> str_;
-
-            bool exact_;        // 正確性を設定する。
-            unsigned char prefix_;       // prefixを設定する。
-            
-        };
-
-        class IdentifierLexer : public ISubLexer
-        {
-            // コメントを返す。
-            // と言っても、;から開始されるコメントは完全に無視されるので、lexeme
-            // を保存する必要すらない。
-        public:
-
-            IdentifierLexer(const utakata::unicode::UniString& str);
-            virtual ~IdentifierLexer(){}
-
-            smart_ptr<lexeme::ILexeme> lex(smart_ptr<reader::StreamReader> stream,
-                                           smart_ptr<ISubLexer>& next);
-
-        private:
-
-            smart_ptr<utakata::unicode::UniString> str_;
-        };
-
-        class BooleanLexer : public ISubLexer
-        {
-            // #t、または#fを返す。
-            // いずれかの次には、必ず区切り文字がなければならない。
-        public:
-
-            BooleanLexer(const utakata::unicode::UniChar& ch);
-            virtual ~BooleanLexer(){}
-
-            smart_ptr<lexeme::ILexeme> lex(smart_ptr<reader::StreamReader> stream,
-                                           smart_ptr<ISubLexer>& next);
-
-        private:
-
-            smart_ptr<utakata::unicode::UniChar> ch_;
-        };
-
-        class ByteVectorLexer : public ISubLexer
-        {
-            // #vu8であるかどうかを検査する。
-            // vu8ではない場合には、エラーとなる。
-        public:
-
-            ByteVectorLexer(const utakata::unicode::UniChar& ch);
-            virtual ~ByteVectorLexer(){}
-
-            smart_ptr<lexeme::ILexeme> lex(smart_ptr<reader::StreamReader> stream,
-                                           smart_ptr<ISubLexer>& next);
-
-        private:
-
-            smart_ptr<utakata::unicode::UniChar> ch_;
-        };
-
-    };
-
-};
-
-
-#endif /* _SUBLEXER_IMPL_H_ */
index d9ee875..8fac137 100644 (file)
@@ -1,5 +1,5 @@
 # Makefile.in generated by automake 1.10.2 from Makefile.am.
-# test/Makefile.  Generated from Makefile.in by configure.
+# src/test/Makefile.  Generated from Makefile.in by configure.
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
 # 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
@@ -30,12 +30,8 @@ POST_INSTALL = :
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
-bin_PROGRAMS = utf8_transcoder_test$(EXEEXT) \
-       textarrayformat_test$(EXEEXT) unicode_test$(EXEEXT) \
-       lexer_test$(EXEEXT) sublexer_test$(EXEEXT) \
-       parser_test$(EXEEXT) environment_test$(EXEEXT) \
-       type_test$(EXEEXT) bignum_test$(EXEEXT)
-subdir = test
+bin_PROGRAMS = string_reader_test$(EXEEXT)
+subdir = src/test
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/configure.in
@@ -47,56 +43,10 @@ CONFIG_CLEAN_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)"
 binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
-am_bignum_test_OBJECTS = bignum.$(OBJEXT) bignum_test.$(OBJEXT) \
-       simpletest.$(OBJEXT)
-bignum_test_OBJECTS = $(am_bignum_test_OBJECTS)
-bignum_test_LDADD = $(LDADD)
-am_environment_test_OBJECTS = environment.$(OBJEXT) \
-       environment_test.$(OBJEXT) simpletest.$(OBJEXT) \
-       unicode.$(OBJEXT) utf8_transcoder.$(OBJEXT) object.$(OBJEXT) \
-       type.$(OBJEXT) data_structure.$(OBJEXT)
-environment_test_OBJECTS = $(am_environment_test_OBJECTS)
-environment_test_LDADD = $(LDADD)
-am_lexer_test_OBJECTS = lexer_test.$(OBJEXT) unicode.$(OBJEXT) \
-       simpletest.$(OBJEXT) utf8_transcoder.$(OBJEXT) \
-       textarrayformat.$(OBJEXT) lexeme_impl.$(OBJEXT) \
-       delimiter.$(OBJEXT) sublexer_impl.$(OBJEXT) lexer.$(OBJEXT) \
-       lexeme_data.$(OBJEXT) reader.$(OBJEXT)
-lexer_test_OBJECTS = $(am_lexer_test_OBJECTS)
-lexer_test_LDADD = $(LDADD)
-am_parser_test_OBJECTS = parser_test.$(OBJEXT) sublexer_impl.$(OBJEXT) \
-       simpletest.$(OBJEXT) utf8_transcoder.$(OBJEXT) \
-       unicode.$(OBJEXT) lexeme_impl.$(OBJEXT) parser.$(OBJEXT) \
-       delimiter.$(OBJEXT) textarrayformat.$(OBJEXT) lexer.$(OBJEXT) \
-       parser_handler.$(OBJEXT) reader.$(OBJEXT) object.$(OBJEXT) \
-       type.$(OBJEXT) data_structure.$(OBJEXT) primitive.$(OBJEXT) \
-       lexeme_data.$(OBJEXT) primitive_util.$(OBJEXT) gc.$(OBJEXT)
-parser_test_OBJECTS = $(am_parser_test_OBJECTS)
-parser_test_LDADD = $(LDADD)
-am_sublexer_test_OBJECTS = sublexer_test.$(OBJEXT) \
-       sublexer_impl.$(OBJEXT) simpletest.$(OBJEXT) unicode.$(OBJEXT) \
-       utf8_transcoder.$(OBJEXT) lexeme_impl.$(OBJEXT) \
-       delimiter.$(OBJEXT) lexeme_data.$(OBJEXT)
-sublexer_test_OBJECTS = $(am_sublexer_test_OBJECTS)
-sublexer_test_LDADD = $(LDADD)
-am_textarrayformat_test_OBJECTS = textarrayformat_test.$(OBJEXT) \
-       textarrayformat.$(OBJEXT) simpletest.$(OBJEXT)
-textarrayformat_test_OBJECTS = $(am_textarrayformat_test_OBJECTS)
-textarrayformat_test_LDADD = $(LDADD)
-am_type_test_OBJECTS = type.$(OBJEXT) type_test.$(OBJEXT) \
-       simpletest.$(OBJEXT)
-type_test_OBJECTS = $(am_type_test_OBJECTS)
-type_test_LDADD = $(LDADD)
-am_unicode_test_OBJECTS = unicode_test.$(OBJEXT) unicode.$(OBJEXT) \
-       simpletest.$(OBJEXT) utf8_transcoder.$(OBJEXT) \
-       reader.$(OBJEXT)
-unicode_test_OBJECTS = $(am_unicode_test_OBJECTS)
-unicode_test_LDADD = $(LDADD)
-am_utf8_transcoder_test_OBJECTS = utf8_transcoder_test.$(OBJEXT) \
-       utf8_transcoder.$(OBJEXT) simpletest.$(OBJEXT) \
-       reader.$(OBJEXT)
-utf8_transcoder_test_OBJECTS = $(am_utf8_transcoder_test_OBJECTS)
-utf8_transcoder_test_LDADD = $(LDADD)
+am_string_reader_test_OBJECTS = string_reader_test.$(OBJEXT) \
+       string_reader.$(OBJEXT) gtest-all.$(OBJEXT)
+string_reader_test_OBJECTS = $(am_string_reader_test_OBJECTS)
+string_reader_test_LDADD = $(LDADD)
 DEFAULT_INCLUDES = -I. -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
@@ -105,20 +55,8 @@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 CXXLD = $(CXX)
 CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
        -o $@
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(bignum_test_SOURCES) $(environment_test_SOURCES) \
-       $(lexer_test_SOURCES) $(parser_test_SOURCES) \
-       $(sublexer_test_SOURCES) $(textarrayformat_test_SOURCES) \
-       $(type_test_SOURCES) $(unicode_test_SOURCES) \
-       $(utf8_transcoder_test_SOURCES)
-DIST_SOURCES = $(bignum_test_SOURCES) $(environment_test_SOURCES) \
-       $(lexer_test_SOURCES) $(parser_test_SOURCES) \
-       $(sublexer_test_SOURCES) $(textarrayformat_test_SOURCES) \
-       $(type_test_SOURCES) $(unicode_test_SOURCES) \
-       $(utf8_transcoder_test_SOURCES)
+SOURCES = $(string_reader_test_SOURCES)
+DIST_SOURCES = $(string_reader_test_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -168,8 +106,8 @@ SET_MAKE =
 SHELL = /bin/sh
 STRIP = 
 VERSION = 0.0.1
-abs_builddir = /home/derui/develop/utakata/test
-abs_srcdir = /home/derui/develop/utakata/test
+abs_builddir = /home/derui/develop/utakata/src/test
+abs_srcdir = /home/derui/develop/utakata/src/test
 abs_top_builddir = /home/derui/develop/utakata
 abs_top_srcdir = /home/derui/develop/utakata
 ac_ct_CC = gcc
@@ -208,45 +146,41 @@ sharedstatedir = ${prefix}/com
 srcdir = .
 sysconfdir = ${prefix}/etc
 target_alias = 
-top_build_prefix = ../
-top_builddir = ..
-top_srcdir = ..
+top_build_prefix = ../../
+top_builddir = ../..
+top_srcdir = ../..
 
 # 警告レベルを最大にする。
-AM_CPPFLAGS = -Wall -fno-default-inline
-INCLUDES = -I$(top_srcdir)
-SRC_DIR = /home/derui/develop/utakata
+AM_CPPFLAGS = -Wall -fno-default-inline -lsrc/test/gtest/gtest-all.o
+INCLUDES = -I$(top_srcdir) -Isrc/test/gtest/gtest.h
+SRC_DIR = ..
 LC_ALL = C
-unicode_test_SOURCES = unicode_test.cpp ${SRC_DIR}/unicode.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/utf8_transcoder.cpp \
-       ${SRC_DIR}/reader.cpp
 
-utf8_transcoder_test_SOURCES = utf8_transcoder_test.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/simpletest.cpp \
-       ${SRC_DIR}/reader.cpp
-
-textarrayformat_test_SOURCES = textarrayformat_test.cpp ${SRC_DIR}/textarrayformat.cpp ${SRC_DIR}/simpletest.cpp
-lexer_test_SOURCES = ${SRC_DIR}/lexeme_id.h lexer_test.cpp ${SRC_DIR}/unicode.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/textarrayformat.cpp ${SRC_DIR}/lexeme_impl.cpp \
-        ${SRC_DIR}/delimiter.cpp  ${SRC_DIR}/sublexer_impl.cpp  ${SRC_DIR}/lexer.cpp ${SRC_DIR}/lexeme_data.cpp \
-        ${SRC_DIR}/reader.cpp
-
-sublexer_test_SOURCES = sublexer_test.cpp ${SRC_DIR}/sublexer_impl.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/unicode.cpp ${SRC_DIR}/utf8_transcoder.cpp \
-       ${SRC_DIR}/lexeme_impl.cpp ${SRC_DIR}/delimiter.cpp ${SRC_DIR}/lexeme_data.cpp
-
-parser_test_SOURCES = parser_test.cpp ${SRC_DIR}/sublexer_impl.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/unicode.cpp \
-       ${SRC_DIR}/lexeme_impl.cpp ${SRC_DIR}/parser.cpp ${SRC_DIR}/delimiter.cpp ${SRC_DIR}/textarrayformat.cpp ${SRC_DIR}/lexer.cpp \
-       ${SRC_DIR}/parser_handler.cpp ${SRC_DIR}/reader.cpp ${SRC_DIR}/object.cpp ${SRC_DIR}/type.cpp ${SRC_DIR}/data_structure.cpp \
-       ${SRC_DIR}/primitive.cpp ${SRC_DIR}/lexeme_data.cpp ${SRC_DIR}/primitive_util.cpp ${SRC_DIR}/gc.cpp
-
-environment_test_SOURCES = ${SRC_DIR}/environment.cpp environment_test.cpp ${SRC_DIR}/simpletest.cpp \
-       ${SRC_DIR}/unicode.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/object.cpp ${SRC_DIR}/type.cpp ${SRC_DIR}/data_structure.cpp
-
-type_test_SOURCES = ${SRC_DIR}/type.cpp type_test.cpp ${SRC_DIR}/simpletest.cpp
-bignum_test_SOURCES = ${SRC_DIR}/bignum.cpp bignum_test.cpp ${SRC_DIR}/simpletest.cpp
+# unicode_test_SOURCES = unicode_test.cpp ${SRC_DIR}/unicode.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/utf8_transcoder.cpp \
+#      ${SRC_DIR}/reader.cpp
+# utf8_transcoder_test_SOURCES = utf8_transcoder_test.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/simpletest.cpp \
+#      ${SRC_DIR}/reader.cpp
+# textarrayformat_test_SOURCES = textarrayformat_test.cpp ${SRC_DIR}/textarrayformat.cpp ${SRC_DIR}/simpletest.cpp
+# lexer_test_SOURCES = ${SRC_DIR}/lexeme_id.h lexer_test.cpp ${SRC_DIR}/unicode.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/textarrayformat.cpp ${SRC_DIR}/lexeme_impl.cpp \
+#       ${SRC_DIR}/delimiter.cpp  ${SRC_DIR}/sublexer_impl.cpp  ${SRC_DIR}/lexer.cpp ${SRC_DIR}/lexeme_data.cpp \
+#       ${SRC_DIR}/reader.cpp
+# sublexer_test_SOURCES = sublexer_test.cpp ${SRC_DIR}/sublexer_impl.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/unicode.cpp ${SRC_DIR}/utf8_transcoder.cpp \
+#      ${SRC_DIR}/lexeme_impl.cpp ${SRC_DIR}/delimiter.cpp ${SRC_DIR}/lexeme_data.cpp
+# parser_test_SOURCES = parser_test.cpp ${SRC_DIR}/sublexer_impl.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/unicode.cpp \
+#      ${SRC_DIR}/lexeme_impl.cpp ${SRC_DIR}/parser.cpp ${SRC_DIR}/delimiter.cpp ${SRC_DIR}/textarrayformat.cpp ${SRC_DIR}/lexer.cpp \
+#      ${SRC_DIR}/parser_handler.cpp ${SRC_DIR}/reader.cpp ${SRC_DIR}/object.cpp ${SRC_DIR}/type.cpp ${SRC_DIR}/data_structure.cpp \
+#      ${SRC_DIR}/primitive.cpp ${SRC_DIR}/lexeme_data.cpp ${SRC_DIR}/primitive_util.cpp ${SRC_DIR}/gc.cpp
+# environment_test_SOURCES = ${SRC_DIR}/environment.cpp environment_test.cpp ${SRC_DIR}/simpletest.cpp \
+#      ${SRC_DIR}/unicode.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/object.cpp ${SRC_DIR}/type.cpp ${SRC_DIR}/data_structure.cpp
+# type_test_SOURCES = ${SRC_DIR}/type.cpp type_test.cpp ${SRC_DIR}/simpletest.cpp
+# bignum_test_SOURCES = ${SRC_DIR}/bignum.cpp bignum_test.cpp ${SRC_DIR}/simpletest.cpp
 check_PROGRANS = $(bin_PROGRAMS)
 TESTS = $(bin_PROGRAMS)
+string_reader_test_SOURCES = string_reader_test.cpp ../string_reader.cpp gtest/gtest-all.cc
 all: all-am
 
 .SUFFIXES:
-.SUFFIXES: .cpp .o .obj
+.SUFFIXES: .cc .cpp .o .obj
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
@@ -256,9 +190,9 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/test/Makefile'; \
        cd $(top_srcdir) && \
-         $(AUTOMAKE) --gnu  test/Makefile
+         $(AUTOMAKE) --gnu  src/test/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
@@ -299,33 +233,9 @@ uninstall-binPROGRAMS:
 
 clean-binPROGRAMS:
        -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
-bignum_test$(EXEEXT): $(bignum_test_OBJECTS) $(bignum_test_DEPENDENCIES) 
-       @rm -f bignum_test$(EXEEXT)
-       $(CXXLINK) $(bignum_test_OBJECTS) $(bignum_test_LDADD) $(LIBS)
-environment_test$(EXEEXT): $(environment_test_OBJECTS) $(environment_test_DEPENDENCIES) 
-       @rm -f environment_test$(EXEEXT)
-       $(CXXLINK) $(environment_test_OBJECTS) $(environment_test_LDADD) $(LIBS)
-lexer_test$(EXEEXT): $(lexer_test_OBJECTS) $(lexer_test_DEPENDENCIES) 
-       @rm -f lexer_test$(EXEEXT)
-       $(CXXLINK) $(lexer_test_OBJECTS) $(lexer_test_LDADD) $(LIBS)
-parser_test$(EXEEXT): $(parser_test_OBJECTS) $(parser_test_DEPENDENCIES) 
-       @rm -f parser_test$(EXEEXT)
-       $(CXXLINK) $(parser_test_OBJECTS) $(parser_test_LDADD) $(LIBS)
-sublexer_test$(EXEEXT): $(sublexer_test_OBJECTS) $(sublexer_test_DEPENDENCIES) 
-       @rm -f sublexer_test$(EXEEXT)
-       $(CXXLINK) $(sublexer_test_OBJECTS) $(sublexer_test_LDADD) $(LIBS)
-textarrayformat_test$(EXEEXT): $(textarrayformat_test_OBJECTS) $(textarrayformat_test_DEPENDENCIES) 
-       @rm -f textarrayformat_test$(EXEEXT)
-       $(CXXLINK) $(textarrayformat_test_OBJECTS) $(textarrayformat_test_LDADD) $(LIBS)
-type_test$(EXEEXT): $(type_test_OBJECTS) $(type_test_DEPENDENCIES) 
-       @rm -f type_test$(EXEEXT)
-       $(CXXLINK) $(type_test_OBJECTS) $(type_test_LDADD) $(LIBS)
-unicode_test$(EXEEXT): $(unicode_test_OBJECTS) $(unicode_test_DEPENDENCIES) 
-       @rm -f unicode_test$(EXEEXT)
-       $(CXXLINK) $(unicode_test_OBJECTS) $(unicode_test_LDADD) $(LIBS)
-utf8_transcoder_test$(EXEEXT): $(utf8_transcoder_test_OBJECTS) $(utf8_transcoder_test_DEPENDENCIES) 
-       @rm -f utf8_transcoder_test$(EXEEXT)
-       $(CXXLINK) $(utf8_transcoder_test_OBJECTS) $(utf8_transcoder_test_LDADD) $(LIBS)
+string_reader_test$(EXEEXT): $(string_reader_test_OBJECTS) $(string_reader_test_DEPENDENCIES) 
+       @rm -f string_reader_test$(EXEEXT)
+       $(CXXLINK) $(string_reader_test_OBJECTS) $(string_reader_test_LDADD) $(LIBS)
 
 mostlyclean-compile:
        -rm -f *.$(OBJEXT)
@@ -333,329 +243,65 @@ mostlyclean-compile:
 distclean-compile:
        -rm -f *.tab.c
 
-include ./$(DEPDIR)/bignum.Po
-include ./$(DEPDIR)/bignum_test.Po
-include ./$(DEPDIR)/data_structure.Po
-include ./$(DEPDIR)/delimiter.Po
-include ./$(DEPDIR)/environment.Po
-include ./$(DEPDIR)/environment_test.Po
-include ./$(DEPDIR)/gc.Po
-include ./$(DEPDIR)/lexeme_data.Po
-include ./$(DEPDIR)/lexeme_impl.Po
-include ./$(DEPDIR)/lexer.Po
-include ./$(DEPDIR)/lexer_test.Po
-include ./$(DEPDIR)/object.Po
-include ./$(DEPDIR)/parser.Po
-include ./$(DEPDIR)/parser_handler.Po
-include ./$(DEPDIR)/parser_test.Po
-include ./$(DEPDIR)/primitive.Po
-include ./$(DEPDIR)/primitive_util.Po
-include ./$(DEPDIR)/reader.Po
-include ./$(DEPDIR)/simpletest.Po
-include ./$(DEPDIR)/sublexer_impl.Po
-include ./$(DEPDIR)/sublexer_test.Po
-include ./$(DEPDIR)/textarrayformat.Po
-include ./$(DEPDIR)/textarrayformat_test.Po
-include ./$(DEPDIR)/type.Po
-include ./$(DEPDIR)/type_test.Po
-include ./$(DEPDIR)/unicode.Po
-include ./$(DEPDIR)/unicode_test.Po
-include ./$(DEPDIR)/utf8_transcoder.Po
-include ./$(DEPDIR)/utf8_transcoder_test.Po
+include ./$(DEPDIR)/gtest-all.Po
+include ./$(DEPDIR)/string_reader.Po
+include ./$(DEPDIR)/string_reader_test.Po
 
-.cpp.o:
+.cc.o:
        $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
        mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 #      source='$<' object='$@' libtool=no \
 #      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
 #      $(CXXCOMPILE) -c -o $@ $<
 
-.cpp.obj:
+.cc.obj:
        $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
        mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 #      source='$<' object='$@' libtool=no \
 #      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
 #      $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
-bignum.o: ${SRC_DIR}/bignum.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bignum.o -MD -MP -MF $(DEPDIR)/bignum.Tpo -c -o bignum.o `test -f '${SRC_DIR}/bignum.cpp' || echo '$(srcdir)/'`${SRC_DIR}/bignum.cpp
-       mv -f $(DEPDIR)/bignum.Tpo $(DEPDIR)/bignum.Po
-#      source='${SRC_DIR}/bignum.cpp' object='bignum.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bignum.o `test -f '${SRC_DIR}/bignum.cpp' || echo '$(srcdir)/'`${SRC_DIR}/bignum.cpp
-
-bignum.obj: ${SRC_DIR}/bignum.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bignum.obj -MD -MP -MF $(DEPDIR)/bignum.Tpo -c -o bignum.obj `if test -f '${SRC_DIR}/bignum.cpp'; then $(CYGPATH_W) '${SRC_DIR}/bignum.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/bignum.cpp'; fi`
-       mv -f $(DEPDIR)/bignum.Tpo $(DEPDIR)/bignum.Po
-#      source='${SRC_DIR}/bignum.cpp' object='bignum.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bignum.obj `if test -f '${SRC_DIR}/bignum.cpp'; then $(CYGPATH_W) '${SRC_DIR}/bignum.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/bignum.cpp'; fi`
-
-simpletest.o: ${SRC_DIR}/simpletest.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT simpletest.o -MD -MP -MF $(DEPDIR)/simpletest.Tpo -c -o simpletest.o `test -f '${SRC_DIR}/simpletest.cpp' || echo '$(srcdir)/'`${SRC_DIR}/simpletest.cpp
-       mv -f $(DEPDIR)/simpletest.Tpo $(DEPDIR)/simpletest.Po
-#      source='${SRC_DIR}/simpletest.cpp' object='simpletest.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o simpletest.o `test -f '${SRC_DIR}/simpletest.cpp' || echo '$(srcdir)/'`${SRC_DIR}/simpletest.cpp
-
-simpletest.obj: ${SRC_DIR}/simpletest.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT simpletest.obj -MD -MP -MF $(DEPDIR)/simpletest.Tpo -c -o simpletest.obj `if test -f '${SRC_DIR}/simpletest.cpp'; then $(CYGPATH_W) '${SRC_DIR}/simpletest.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/simpletest.cpp'; fi`
-       mv -f $(DEPDIR)/simpletest.Tpo $(DEPDIR)/simpletest.Po
-#      source='${SRC_DIR}/simpletest.cpp' object='simpletest.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o simpletest.obj `if test -f '${SRC_DIR}/simpletest.cpp'; then $(CYGPATH_W) '${SRC_DIR}/simpletest.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/simpletest.cpp'; fi`
-
-environment.o: ${SRC_DIR}/environment.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT environment.o -MD -MP -MF $(DEPDIR)/environment.Tpo -c -o environment.o `test -f '${SRC_DIR}/environment.cpp' || echo '$(srcdir)/'`${SRC_DIR}/environment.cpp
-       mv -f $(DEPDIR)/environment.Tpo $(DEPDIR)/environment.Po
-#      source='${SRC_DIR}/environment.cpp' object='environment.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o environment.o `test -f '${SRC_DIR}/environment.cpp' || echo '$(srcdir)/'`${SRC_DIR}/environment.cpp
-
-environment.obj: ${SRC_DIR}/environment.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT environment.obj -MD -MP -MF $(DEPDIR)/environment.Tpo -c -o environment.obj `if test -f '${SRC_DIR}/environment.cpp'; then $(CYGPATH_W) '${SRC_DIR}/environment.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/environment.cpp'; fi`
-       mv -f $(DEPDIR)/environment.Tpo $(DEPDIR)/environment.Po
-#      source='${SRC_DIR}/environment.cpp' object='environment.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o environment.obj `if test -f '${SRC_DIR}/environment.cpp'; then $(CYGPATH_W) '${SRC_DIR}/environment.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/environment.cpp'; fi`
-
-unicode.o: ${SRC_DIR}/unicode.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT unicode.o -MD -MP -MF $(DEPDIR)/unicode.Tpo -c -o unicode.o `test -f '${SRC_DIR}/unicode.cpp' || echo '$(srcdir)/'`${SRC_DIR}/unicode.cpp
-       mv -f $(DEPDIR)/unicode.Tpo $(DEPDIR)/unicode.Po
-#      source='${SRC_DIR}/unicode.cpp' object='unicode.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o unicode.o `test -f '${SRC_DIR}/unicode.cpp' || echo '$(srcdir)/'`${SRC_DIR}/unicode.cpp
-
-unicode.obj: ${SRC_DIR}/unicode.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT unicode.obj -MD -MP -MF $(DEPDIR)/unicode.Tpo -c -o unicode.obj `if test -f '${SRC_DIR}/unicode.cpp'; then $(CYGPATH_W) '${SRC_DIR}/unicode.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/unicode.cpp'; fi`
-       mv -f $(DEPDIR)/unicode.Tpo $(DEPDIR)/unicode.Po
-#      source='${SRC_DIR}/unicode.cpp' object='unicode.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o unicode.obj `if test -f '${SRC_DIR}/unicode.cpp'; then $(CYGPATH_W) '${SRC_DIR}/unicode.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/unicode.cpp'; fi`
-
-utf8_transcoder.o: ${SRC_DIR}/utf8_transcoder.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT utf8_transcoder.o -MD -MP -MF $(DEPDIR)/utf8_transcoder.Tpo -c -o utf8_transcoder.o `test -f '${SRC_DIR}/utf8_transcoder.cpp' || echo '$(srcdir)/'`${SRC_DIR}/utf8_transcoder.cpp
-       mv -f $(DEPDIR)/utf8_transcoder.Tpo $(DEPDIR)/utf8_transcoder.Po
-#      source='${SRC_DIR}/utf8_transcoder.cpp' object='utf8_transcoder.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o utf8_transcoder.o `test -f '${SRC_DIR}/utf8_transcoder.cpp' || echo '$(srcdir)/'`${SRC_DIR}/utf8_transcoder.cpp
-
-utf8_transcoder.obj: ${SRC_DIR}/utf8_transcoder.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT utf8_transcoder.obj -MD -MP -MF $(DEPDIR)/utf8_transcoder.Tpo -c -o utf8_transcoder.obj `if test -f '${SRC_DIR}/utf8_transcoder.cpp'; then $(CYGPATH_W) '${SRC_DIR}/utf8_transcoder.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/utf8_transcoder.cpp'; fi`
-       mv -f $(DEPDIR)/utf8_transcoder.Tpo $(DEPDIR)/utf8_transcoder.Po
-#      source='${SRC_DIR}/utf8_transcoder.cpp' object='utf8_transcoder.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o utf8_transcoder.obj `if test -f '${SRC_DIR}/utf8_transcoder.cpp'; then $(CYGPATH_W) '${SRC_DIR}/utf8_transcoder.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/utf8_transcoder.cpp'; fi`
-
-object.o: ${SRC_DIR}/object.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT object.o -MD -MP -MF $(DEPDIR)/object.Tpo -c -o object.o `test -f '${SRC_DIR}/object.cpp' || echo '$(srcdir)/'`${SRC_DIR}/object.cpp
-       mv -f $(DEPDIR)/object.Tpo $(DEPDIR)/object.Po
-#      source='${SRC_DIR}/object.cpp' object='object.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o object.o `test -f '${SRC_DIR}/object.cpp' || echo '$(srcdir)/'`${SRC_DIR}/object.cpp
-
-object.obj: ${SRC_DIR}/object.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT object.obj -MD -MP -MF $(DEPDIR)/object.Tpo -c -o object.obj `if test -f '${SRC_DIR}/object.cpp'; then $(CYGPATH_W) '${SRC_DIR}/object.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/object.cpp'; fi`
-       mv -f $(DEPDIR)/object.Tpo $(DEPDIR)/object.Po
-#      source='${SRC_DIR}/object.cpp' object='object.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o object.obj `if test -f '${SRC_DIR}/object.cpp'; then $(CYGPATH_W) '${SRC_DIR}/object.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/object.cpp'; fi`
-
-type.o: ${SRC_DIR}/type.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT type.o -MD -MP -MF $(DEPDIR)/type.Tpo -c -o type.o `test -f '${SRC_DIR}/type.cpp' || echo '$(srcdir)/'`${SRC_DIR}/type.cpp
-       mv -f $(DEPDIR)/type.Tpo $(DEPDIR)/type.Po
-#      source='${SRC_DIR}/type.cpp' object='type.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o type.o `test -f '${SRC_DIR}/type.cpp' || echo '$(srcdir)/'`${SRC_DIR}/type.cpp
-
-type.obj: ${SRC_DIR}/type.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT type.obj -MD -MP -MF $(DEPDIR)/type.Tpo -c -o type.obj `if test -f '${SRC_DIR}/type.cpp'; then $(CYGPATH_W) '${SRC_DIR}/type.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/type.cpp'; fi`
-       mv -f $(DEPDIR)/type.Tpo $(DEPDIR)/type.Po
-#      source='${SRC_DIR}/type.cpp' object='type.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o type.obj `if test -f '${SRC_DIR}/type.cpp'; then $(CYGPATH_W) '${SRC_DIR}/type.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/type.cpp'; fi`
-
-data_structure.o: ${SRC_DIR}/data_structure.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT data_structure.o -MD -MP -MF $(DEPDIR)/data_structure.Tpo -c -o data_structure.o `test -f '${SRC_DIR}/data_structure.cpp' || echo '$(srcdir)/'`${SRC_DIR}/data_structure.cpp
-       mv -f $(DEPDIR)/data_structure.Tpo $(DEPDIR)/data_structure.Po
-#      source='${SRC_DIR}/data_structure.cpp' object='data_structure.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o data_structure.o `test -f '${SRC_DIR}/data_structure.cpp' || echo '$(srcdir)/'`${SRC_DIR}/data_structure.cpp
-
-data_structure.obj: ${SRC_DIR}/data_structure.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT data_structure.obj -MD -MP -MF $(DEPDIR)/data_structure.Tpo -c -o data_structure.obj `if test -f '${SRC_DIR}/data_structure.cpp'; then $(CYGPATH_W) '${SRC_DIR}/data_structure.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/data_structure.cpp'; fi`
-       mv -f $(DEPDIR)/data_structure.Tpo $(DEPDIR)/data_structure.Po
-#      source='${SRC_DIR}/data_structure.cpp' object='data_structure.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o data_structure.obj `if test -f '${SRC_DIR}/data_structure.cpp'; then $(CYGPATH_W) '${SRC_DIR}/data_structure.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/data_structure.cpp'; fi`
-
-textarrayformat.o: ${SRC_DIR}/textarrayformat.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT textarrayformat.o -MD -MP -MF $(DEPDIR)/textarrayformat.Tpo -c -o textarrayformat.o `test -f '${SRC_DIR}/textarrayformat.cpp' || echo '$(srcdir)/'`${SRC_DIR}/textarrayformat.cpp
-       mv -f $(DEPDIR)/textarrayformat.Tpo $(DEPDIR)/textarrayformat.Po
-#      source='${SRC_DIR}/textarrayformat.cpp' object='textarrayformat.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o textarrayformat.o `test -f '${SRC_DIR}/textarrayformat.cpp' || echo '$(srcdir)/'`${SRC_DIR}/textarrayformat.cpp
-
-textarrayformat.obj: ${SRC_DIR}/textarrayformat.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT textarrayformat.obj -MD -MP -MF $(DEPDIR)/textarrayformat.Tpo -c -o textarrayformat.obj `if test -f '${SRC_DIR}/textarrayformat.cpp'; then $(CYGPATH_W) '${SRC_DIR}/textarrayformat.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/textarrayformat.cpp'; fi`
-       mv -f $(DEPDIR)/textarrayformat.Tpo $(DEPDIR)/textarrayformat.Po
-#      source='${SRC_DIR}/textarrayformat.cpp' object='textarrayformat.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o textarrayformat.obj `if test -f '${SRC_DIR}/textarrayformat.cpp'; then $(CYGPATH_W) '${SRC_DIR}/textarrayformat.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/textarrayformat.cpp'; fi`
-
-lexeme_impl.o: ${SRC_DIR}/lexeme_impl.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lexeme_impl.o -MD -MP -MF $(DEPDIR)/lexeme_impl.Tpo -c -o lexeme_impl.o `test -f '${SRC_DIR}/lexeme_impl.cpp' || echo '$(srcdir)/'`${SRC_DIR}/lexeme_impl.cpp
-       mv -f $(DEPDIR)/lexeme_impl.Tpo $(DEPDIR)/lexeme_impl.Po
-#      source='${SRC_DIR}/lexeme_impl.cpp' object='lexeme_impl.o' libtool=no \
+string_reader.o: ../string_reader.cpp
+       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT string_reader.o -MD -MP -MF $(DEPDIR)/string_reader.Tpo -c -o string_reader.o `test -f '../string_reader.cpp' || echo '$(srcdir)/'`../string_reader.cpp
+       mv -f $(DEPDIR)/string_reader.Tpo $(DEPDIR)/string_reader.Po
+#      source='../string_reader.cpp' object='string_reader.o' libtool=no \
 #      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lexeme_impl.o `test -f '${SRC_DIR}/lexeme_impl.cpp' || echo '$(srcdir)/'`${SRC_DIR}/lexeme_impl.cpp
+#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o string_reader.o `test -f '../string_reader.cpp' || echo '$(srcdir)/'`../string_reader.cpp
 
-lexeme_impl.obj: ${SRC_DIR}/lexeme_impl.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lexeme_impl.obj -MD -MP -MF $(DEPDIR)/lexeme_impl.Tpo -c -o lexeme_impl.obj `if test -f '${SRC_DIR}/lexeme_impl.cpp'; then $(CYGPATH_W) '${SRC_DIR}/lexeme_impl.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/lexeme_impl.cpp'; fi`
-       mv -f $(DEPDIR)/lexeme_impl.Tpo $(DEPDIR)/lexeme_impl.Po
-#      source='${SRC_DIR}/lexeme_impl.cpp' object='lexeme_impl.obj' libtool=no \
+string_reader.obj: ../string_reader.cpp
+       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT string_reader.obj -MD -MP -MF $(DEPDIR)/string_reader.Tpo -c -o string_reader.obj `if test -f '../string_reader.cpp'; then $(CYGPATH_W) '../string_reader.cpp'; else $(CYGPATH_W) '$(srcdir)/../string_reader.cpp'; fi`
+       mv -f $(DEPDIR)/string_reader.Tpo $(DEPDIR)/string_reader.Po
+#      source='../string_reader.cpp' object='string_reader.obj' libtool=no \
 #      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lexeme_impl.obj `if test -f '${SRC_DIR}/lexeme_impl.cpp'; then $(CYGPATH_W) '${SRC_DIR}/lexeme_impl.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/lexeme_impl.cpp'; fi`
+#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o string_reader.obj `if test -f '../string_reader.cpp'; then $(CYGPATH_W) '../string_reader.cpp'; else $(CYGPATH_W) '$(srcdir)/../string_reader.cpp'; fi`
 
-delimiter.o: ${SRC_DIR}/delimiter.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT delimiter.o -MD -MP -MF $(DEPDIR)/delimiter.Tpo -c -o delimiter.o `test -f '${SRC_DIR}/delimiter.cpp' || echo '$(srcdir)/'`${SRC_DIR}/delimiter.cpp
-       mv -f $(DEPDIR)/delimiter.Tpo $(DEPDIR)/delimiter.Po
-#      source='${SRC_DIR}/delimiter.cpp' object='delimiter.o' libtool=no \
+gtest-all.o: gtest/gtest-all.cc
+       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gtest-all.o -MD -MP -MF $(DEPDIR)/gtest-all.Tpo -c -o gtest-all.o `test -f 'gtest/gtest-all.cc' || echo '$(srcdir)/'`gtest/gtest-all.cc
+       mv -f $(DEPDIR)/gtest-all.Tpo $(DEPDIR)/gtest-all.Po
+#      source='gtest/gtest-all.cc' object='gtest-all.o' libtool=no \
 #      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o delimiter.o `test -f '${SRC_DIR}/delimiter.cpp' || echo '$(srcdir)/'`${SRC_DIR}/delimiter.cpp
+#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gtest-all.o `test -f 'gtest/gtest-all.cc' || echo '$(srcdir)/'`gtest/gtest-all.cc
 
-delimiter.obj: ${SRC_DIR}/delimiter.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT delimiter.obj -MD -MP -MF $(DEPDIR)/delimiter.Tpo -c -o delimiter.obj `if test -f '${SRC_DIR}/delimiter.cpp'; then $(CYGPATH_W) '${SRC_DIR}/delimiter.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/delimiter.cpp'; fi`
-       mv -f $(DEPDIR)/delimiter.Tpo $(DEPDIR)/delimiter.Po
-#      source='${SRC_DIR}/delimiter.cpp' object='delimiter.obj' libtool=no \
+gtest-all.obj: gtest/gtest-all.cc
+       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gtest-all.obj -MD -MP -MF $(DEPDIR)/gtest-all.Tpo -c -o gtest-all.obj `if test -f 'gtest/gtest-all.cc'; then $(CYGPATH_W) 'gtest/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/gtest/gtest-all.cc'; fi`
+       mv -f $(DEPDIR)/gtest-all.Tpo $(DEPDIR)/gtest-all.Po
+#      source='gtest/gtest-all.cc' object='gtest-all.obj' libtool=no \
 #      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o delimiter.obj `if test -f '${SRC_DIR}/delimiter.cpp'; then $(CYGPATH_W) '${SRC_DIR}/delimiter.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/delimiter.cpp'; fi`
+#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gtest-all.obj `if test -f 'gtest/gtest-all.cc'; then $(CYGPATH_W) 'gtest/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/gtest/gtest-all.cc'; fi`
 
-sublexer_impl.o: ${SRC_DIR}/sublexer_impl.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT sublexer_impl.o -MD -MP -MF $(DEPDIR)/sublexer_impl.Tpo -c -o sublexer_impl.o `test -f '${SRC_DIR}/sublexer_impl.cpp' || echo '$(srcdir)/'`${SRC_DIR}/sublexer_impl.cpp
-       mv -f $(DEPDIR)/sublexer_impl.Tpo $(DEPDIR)/sublexer_impl.Po
-#      source='${SRC_DIR}/sublexer_impl.cpp' object='sublexer_impl.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o sublexer_impl.o `test -f '${SRC_DIR}/sublexer_impl.cpp' || echo '$(srcdir)/'`${SRC_DIR}/sublexer_impl.cpp
-
-sublexer_impl.obj: ${SRC_DIR}/sublexer_impl.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT sublexer_impl.obj -MD -MP -MF $(DEPDIR)/sublexer_impl.Tpo -c -o sublexer_impl.obj `if test -f '${SRC_DIR}/sublexer_impl.cpp'; then $(CYGPATH_W) '${SRC_DIR}/sublexer_impl.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/sublexer_impl.cpp'; fi`
-       mv -f $(DEPDIR)/sublexer_impl.Tpo $(DEPDIR)/sublexer_impl.Po
-#      source='${SRC_DIR}/sublexer_impl.cpp' object='sublexer_impl.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o sublexer_impl.obj `if test -f '${SRC_DIR}/sublexer_impl.cpp'; then $(CYGPATH_W) '${SRC_DIR}/sublexer_impl.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/sublexer_impl.cpp'; fi`
-
-lexer.o: ${SRC_DIR}/lexer.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lexer.o -MD -MP -MF $(DEPDIR)/lexer.Tpo -c -o lexer.o `test -f '${SRC_DIR}/lexer.cpp' || echo '$(srcdir)/'`${SRC_DIR}/lexer.cpp
-       mv -f $(DEPDIR)/lexer.Tpo $(DEPDIR)/lexer.Po
-#      source='${SRC_DIR}/lexer.cpp' object='lexer.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lexer.o `test -f '${SRC_DIR}/lexer.cpp' || echo '$(srcdir)/'`${SRC_DIR}/lexer.cpp
-
-lexer.obj: ${SRC_DIR}/lexer.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lexer.obj -MD -MP -MF $(DEPDIR)/lexer.Tpo -c -o lexer.obj `if test -f '${SRC_DIR}/lexer.cpp'; then $(CYGPATH_W) '${SRC_DIR}/lexer.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/lexer.cpp'; fi`
-       mv -f $(DEPDIR)/lexer.Tpo $(DEPDIR)/lexer.Po
-#      source='${SRC_DIR}/lexer.cpp' object='lexer.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lexer.obj `if test -f '${SRC_DIR}/lexer.cpp'; then $(CYGPATH_W) '${SRC_DIR}/lexer.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/lexer.cpp'; fi`
-
-lexeme_data.o: ${SRC_DIR}/lexeme_data.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lexeme_data.o -MD -MP -MF $(DEPDIR)/lexeme_data.Tpo -c -o lexeme_data.o `test -f '${SRC_DIR}/lexeme_data.cpp' || echo '$(srcdir)/'`${SRC_DIR}/lexeme_data.cpp
-       mv -f $(DEPDIR)/lexeme_data.Tpo $(DEPDIR)/lexeme_data.Po
-#      source='${SRC_DIR}/lexeme_data.cpp' object='lexeme_data.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lexeme_data.o `test -f '${SRC_DIR}/lexeme_data.cpp' || echo '$(srcdir)/'`${SRC_DIR}/lexeme_data.cpp
-
-lexeme_data.obj: ${SRC_DIR}/lexeme_data.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lexeme_data.obj -MD -MP -MF $(DEPDIR)/lexeme_data.Tpo -c -o lexeme_data.obj `if test -f '${SRC_DIR}/lexeme_data.cpp'; then $(CYGPATH_W) '${SRC_DIR}/lexeme_data.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/lexeme_data.cpp'; fi`
-       mv -f $(DEPDIR)/lexeme_data.Tpo $(DEPDIR)/lexeme_data.Po
-#      source='${SRC_DIR}/lexeme_data.cpp' object='lexeme_data.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lexeme_data.obj `if test -f '${SRC_DIR}/lexeme_data.cpp'; then $(CYGPATH_W) '${SRC_DIR}/lexeme_data.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/lexeme_data.cpp'; fi`
-
-reader.o: ${SRC_DIR}/reader.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT reader.o -MD -MP -MF $(DEPDIR)/reader.Tpo -c -o reader.o `test -f '${SRC_DIR}/reader.cpp' || echo '$(srcdir)/'`${SRC_DIR}/reader.cpp
-       mv -f $(DEPDIR)/reader.Tpo $(DEPDIR)/reader.Po
-#      source='${SRC_DIR}/reader.cpp' object='reader.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o reader.o `test -f '${SRC_DIR}/reader.cpp' || echo '$(srcdir)/'`${SRC_DIR}/reader.cpp
-
-reader.obj: ${SRC_DIR}/reader.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT reader.obj -MD -MP -MF $(DEPDIR)/reader.Tpo -c -o reader.obj `if test -f '${SRC_DIR}/reader.cpp'; then $(CYGPATH_W) '${SRC_DIR}/reader.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/reader.cpp'; fi`
-       mv -f $(DEPDIR)/reader.Tpo $(DEPDIR)/reader.Po
-#      source='${SRC_DIR}/reader.cpp' object='reader.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o reader.obj `if test -f '${SRC_DIR}/reader.cpp'; then $(CYGPATH_W) '${SRC_DIR}/reader.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/reader.cpp'; fi`
-
-parser.o: ${SRC_DIR}/parser.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT parser.o -MD -MP -MF $(DEPDIR)/parser.Tpo -c -o parser.o `test -f '${SRC_DIR}/parser.cpp' || echo '$(srcdir)/'`${SRC_DIR}/parser.cpp
-       mv -f $(DEPDIR)/parser.Tpo $(DEPDIR)/parser.Po
-#      source='${SRC_DIR}/parser.cpp' object='parser.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o parser.o `test -f '${SRC_DIR}/parser.cpp' || echo '$(srcdir)/'`${SRC_DIR}/parser.cpp
-
-parser.obj: ${SRC_DIR}/parser.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT parser.obj -MD -MP -MF $(DEPDIR)/parser.Tpo -c -o parser.obj `if test -f '${SRC_DIR}/parser.cpp'; then $(CYGPATH_W) '${SRC_DIR}/parser.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/parser.cpp'; fi`
-       mv -f $(DEPDIR)/parser.Tpo $(DEPDIR)/parser.Po
-#      source='${SRC_DIR}/parser.cpp' object='parser.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o parser.obj `if test -f '${SRC_DIR}/parser.cpp'; then $(CYGPATH_W) '${SRC_DIR}/parser.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/parser.cpp'; fi`
-
-parser_handler.o: ${SRC_DIR}/parser_handler.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT parser_handler.o -MD -MP -MF $(DEPDIR)/parser_handler.Tpo -c -o parser_handler.o `test -f '${SRC_DIR}/parser_handler.cpp' || echo '$(srcdir)/'`${SRC_DIR}/parser_handler.cpp
-       mv -f $(DEPDIR)/parser_handler.Tpo $(DEPDIR)/parser_handler.Po
-#      source='${SRC_DIR}/parser_handler.cpp' object='parser_handler.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o parser_handler.o `test -f '${SRC_DIR}/parser_handler.cpp' || echo '$(srcdir)/'`${SRC_DIR}/parser_handler.cpp
-
-parser_handler.obj: ${SRC_DIR}/parser_handler.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT parser_handler.obj -MD -MP -MF $(DEPDIR)/parser_handler.Tpo -c -o parser_handler.obj `if test -f '${SRC_DIR}/parser_handler.cpp'; then $(CYGPATH_W) '${SRC_DIR}/parser_handler.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/parser_handler.cpp'; fi`
-       mv -f $(DEPDIR)/parser_handler.Tpo $(DEPDIR)/parser_handler.Po
-#      source='${SRC_DIR}/parser_handler.cpp' object='parser_handler.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o parser_handler.obj `if test -f '${SRC_DIR}/parser_handler.cpp'; then $(CYGPATH_W) '${SRC_DIR}/parser_handler.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/parser_handler.cpp'; fi`
-
-primitive.o: ${SRC_DIR}/primitive.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT primitive.o -MD -MP -MF $(DEPDIR)/primitive.Tpo -c -o primitive.o `test -f '${SRC_DIR}/primitive.cpp' || echo '$(srcdir)/'`${SRC_DIR}/primitive.cpp
-       mv -f $(DEPDIR)/primitive.Tpo $(DEPDIR)/primitive.Po
-#      source='${SRC_DIR}/primitive.cpp' object='primitive.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o primitive.o `test -f '${SRC_DIR}/primitive.cpp' || echo '$(srcdir)/'`${SRC_DIR}/primitive.cpp
-
-primitive.obj: ${SRC_DIR}/primitive.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT primitive.obj -MD -MP -MF $(DEPDIR)/primitive.Tpo -c -o primitive.obj `if test -f '${SRC_DIR}/primitive.cpp'; then $(CYGPATH_W) '${SRC_DIR}/primitive.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/primitive.cpp'; fi`
-       mv -f $(DEPDIR)/primitive.Tpo $(DEPDIR)/primitive.Po
-#      source='${SRC_DIR}/primitive.cpp' object='primitive.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o primitive.obj `if test -f '${SRC_DIR}/primitive.cpp'; then $(CYGPATH_W) '${SRC_DIR}/primitive.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/primitive.cpp'; fi`
-
-primitive_util.o: ${SRC_DIR}/primitive_util.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT primitive_util.o -MD -MP -MF $(DEPDIR)/primitive_util.Tpo -c -o primitive_util.o `test -f '${SRC_DIR}/primitive_util.cpp' || echo '$(srcdir)/'`${SRC_DIR}/primitive_util.cpp
-       mv -f $(DEPDIR)/primitive_util.Tpo $(DEPDIR)/primitive_util.Po
-#      source='${SRC_DIR}/primitive_util.cpp' object='primitive_util.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o primitive_util.o `test -f '${SRC_DIR}/primitive_util.cpp' || echo '$(srcdir)/'`${SRC_DIR}/primitive_util.cpp
-
-primitive_util.obj: ${SRC_DIR}/primitive_util.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT primitive_util.obj -MD -MP -MF $(DEPDIR)/primitive_util.Tpo -c -o primitive_util.obj `if test -f '${SRC_DIR}/primitive_util.cpp'; then $(CYGPATH_W) '${SRC_DIR}/primitive_util.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/primitive_util.cpp'; fi`
-       mv -f $(DEPDIR)/primitive_util.Tpo $(DEPDIR)/primitive_util.Po
-#      source='${SRC_DIR}/primitive_util.cpp' object='primitive_util.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o primitive_util.obj `if test -f '${SRC_DIR}/primitive_util.cpp'; then $(CYGPATH_W) '${SRC_DIR}/primitive_util.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/primitive_util.cpp'; fi`
-
-gc.o: ${SRC_DIR}/gc.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gc.o -MD -MP -MF $(DEPDIR)/gc.Tpo -c -o gc.o `test -f '${SRC_DIR}/gc.cpp' || echo '$(srcdir)/'`${SRC_DIR}/gc.cpp
-       mv -f $(DEPDIR)/gc.Tpo $(DEPDIR)/gc.Po
-#      source='${SRC_DIR}/gc.cpp' object='gc.o' libtool=no \
+.cpp.o:
+       $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      source='$<' object='$@' libtool=no \
 #      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gc.o `test -f '${SRC_DIR}/gc.cpp' || echo '$(srcdir)/'`${SRC_DIR}/gc.cpp
+#      $(CXXCOMPILE) -c -o $@ $<
 
-gc.obj: ${SRC_DIR}/gc.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gc.obj -MD -MP -MF $(DEPDIR)/gc.Tpo -c -o gc.obj `if test -f '${SRC_DIR}/gc.cpp'; then $(CYGPATH_W) '${SRC_DIR}/gc.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/gc.cpp'; fi`
-       mv -f $(DEPDIR)/gc.Tpo $(DEPDIR)/gc.Po
-#      source='${SRC_DIR}/gc.cpp' object='gc.obj' libtool=no \
+.cpp.obj:
+       $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+       mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      source='$<' object='$@' libtool=no \
 #      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gc.obj `if test -f '${SRC_DIR}/gc.cpp'; then $(CYGPATH_W) '${SRC_DIR}/gc.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/gc.cpp'; fi`
+#      $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
        list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
index 8c25e29..a8ab125 100755 (executable)
@@ -1,32 +1,32 @@
 # 警告レベルを最大にする。
-AM_CPPFLAGS = -Wall -fno-default-inline
-INCLUDES = -I$(top_srcdir)
-SRC_DIR=/home/derui/develop/utakata
+AM_CPPFLAGS = -Wall -fno-default-inline -lsrc/test/gtest/gtest-all.o
+INCLUDES = -I$(top_srcdir) -Isrc/test/gtest/gtest.h
+SRC_DIR=..
 LC_ALL=C
 # SIBDIRS = . 
 
-bin_PROGRAMS = utf8_transcoder_test textarrayformat_test unicode_test lexer_test sublexer_test \
-       parser_test environment_test type_test bignum_test
+bin_PROGRAMS = string_reader_test
 
-unicode_test_SOURCES = unicode_test.cpp ${SRC_DIR}/unicode.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/utf8_transcoder.cpp \
-       ${SRC_DIR}/reader.cpp
-utf8_transcoder_test_SOURCES = utf8_transcoder_test.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/simpletest.cpp \
-       ${SRC_DIR}/reader.cpp
-textarrayformat_test_SOURCES = textarrayformat_test.cpp ${SRC_DIR}/textarrayformat.cpp ${SRC_DIR}/simpletest.cpp
-lexer_test_SOURCES = ${SRC_DIR}/lexeme_id.h lexer_test.cpp ${SRC_DIR}/unicode.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/textarrayformat.cpp ${SRC_DIR}/lexeme_impl.cpp \
-        ${SRC_DIR}/delimiter.cpp  ${SRC_DIR}/sublexer_impl.cpp  ${SRC_DIR}/lexer.cpp ${SRC_DIR}/lexeme_data.cpp \
-        ${SRC_DIR}/reader.cpp
-sublexer_test_SOURCES = sublexer_test.cpp ${SRC_DIR}/sublexer_impl.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/unicode.cpp ${SRC_DIR}/utf8_transcoder.cpp \
-       ${SRC_DIR}/lexeme_impl.cpp ${SRC_DIR}/delimiter.cpp ${SRC_DIR}/lexeme_data.cpp
-parser_test_SOURCES = parser_test.cpp ${SRC_DIR}/sublexer_impl.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/unicode.cpp \
-       ${SRC_DIR}/lexeme_impl.cpp ${SRC_DIR}/parser.cpp ${SRC_DIR}/delimiter.cpp ${SRC_DIR}/textarrayformat.cpp ${SRC_DIR}/lexer.cpp \
-       ${SRC_DIR}/parser_handler.cpp ${SRC_DIR}/reader.cpp ${SRC_DIR}/object.cpp ${SRC_DIR}/type.cpp ${SRC_DIR}/data_structure.cpp \
-       ${SRC_DIR}/primitive.cpp ${SRC_DIR}/lexeme_data.cpp ${SRC_DIR}/primitive_util.cpp ${SRC_DIR}/gc.cpp
-environment_test_SOURCES = ${SRC_DIR}/environment.cpp environment_test.cpp ${SRC_DIR}/simpletest.cpp \
-       ${SRC_DIR}/unicode.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/object.cpp ${SRC_DIR}/type.cpp ${SRC_DIR}/data_structure.cpp
-type_test_SOURCES = ${SRC_DIR}/type.cpp type_test.cpp ${SRC_DIR}/simpletest.cpp
-bignum_test_SOURCES = ${SRC_DIR}/bignum.cpp bignum_test.cpp ${SRC_DIR}/simpletest.cpp
+unicode_test_SOURCES = unicode_test.cpp ${SRC_DIR}/unicode.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/utf8_transcoder.cpp \
+#      ${SRC_DIR}/reader.cpp
+utf8_transcoder_test_SOURCES = utf8_transcoder_test.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/simpletest.cpp \
+#      ${SRC_DIR}/reader.cpp
+textarrayformat_test_SOURCES = textarrayformat_test.cpp ${SRC_DIR}/textarrayformat.cpp ${SRC_DIR}/simpletest.cpp
+lexer_test_SOURCES = ${SRC_DIR}/lexeme_id.h lexer_test.cpp ${SRC_DIR}/unicode.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/textarrayformat.cpp ${SRC_DIR}/lexeme_impl.cpp \
+#       ${SRC_DIR}/delimiter.cpp  ${SRC_DIR}/sublexer_impl.cpp  ${SRC_DIR}/lexer.cpp ${SRC_DIR}/lexeme_data.cpp \
+#       ${SRC_DIR}/reader.cpp
+sublexer_test_SOURCES = sublexer_test.cpp ${SRC_DIR}/sublexer_impl.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/unicode.cpp ${SRC_DIR}/utf8_transcoder.cpp \
+#      ${SRC_DIR}/lexeme_impl.cpp ${SRC_DIR}/delimiter.cpp ${SRC_DIR}/lexeme_data.cpp
+parser_test_SOURCES = parser_test.cpp ${SRC_DIR}/sublexer_impl.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/unicode.cpp \
+#      ${SRC_DIR}/lexeme_impl.cpp ${SRC_DIR}/parser.cpp ${SRC_DIR}/delimiter.cpp ${SRC_DIR}/textarrayformat.cpp ${SRC_DIR}/lexer.cpp \
+#      ${SRC_DIR}/parser_handler.cpp ${SRC_DIR}/reader.cpp ${SRC_DIR}/object.cpp ${SRC_DIR}/type.cpp ${SRC_DIR}/data_structure.cpp \
+#      ${SRC_DIR}/primitive.cpp ${SRC_DIR}/lexeme_data.cpp ${SRC_DIR}/primitive_util.cpp ${SRC_DIR}/gc.cpp
+environment_test_SOURCES = ${SRC_DIR}/environment.cpp environment_test.cpp ${SRC_DIR}/simpletest.cpp \
+#      ${SRC_DIR}/unicode.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/object.cpp ${SRC_DIR}/type.cpp ${SRC_DIR}/data_structure.cpp
+type_test_SOURCES = ${SRC_DIR}/type.cpp type_test.cpp ${SRC_DIR}/simpletest.cpp
+bignum_test_SOURCES = ${SRC_DIR}/bignum.cpp bignum_test.cpp ${SRC_DIR}/simpletest.cpp
 
 check_PROGRANS = $(bin_PROGRAMS)
 TESTS = $(bin_PROGRAMS)
 
+string_reader_test_SOURCES = string_reader_test.cpp ../string_reader.cpp gtest/gtest-all.cc
index 06fcad7..2246cfa 100644 (file)
@@ -30,12 +30,8 @@ POST_INSTALL = :
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
-bin_PROGRAMS = utf8_transcoder_test$(EXEEXT) \
-       textarrayformat_test$(EXEEXT) unicode_test$(EXEEXT) \
-       lexer_test$(EXEEXT) sublexer_test$(EXEEXT) \
-       parser_test$(EXEEXT) environment_test$(EXEEXT) \
-       type_test$(EXEEXT) bignum_test$(EXEEXT)
-subdir = test
+bin_PROGRAMS = string_reader_test$(EXEEXT)
+subdir = src/test
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/configure.in
@@ -47,56 +43,10 @@ CONFIG_CLEAN_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)"
 binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
-am_bignum_test_OBJECTS = bignum.$(OBJEXT) bignum_test.$(OBJEXT) \
-       simpletest.$(OBJEXT)
-bignum_test_OBJECTS = $(am_bignum_test_OBJECTS)
-bignum_test_LDADD = $(LDADD)
-am_environment_test_OBJECTS = environment.$(OBJEXT) \
-       environment_test.$(OBJEXT) simpletest.$(OBJEXT) \
-       unicode.$(OBJEXT) utf8_transcoder.$(OBJEXT) object.$(OBJEXT) \
-       type.$(OBJEXT) data_structure.$(OBJEXT)
-environment_test_OBJECTS = $(am_environment_test_OBJECTS)
-environment_test_LDADD = $(LDADD)
-am_lexer_test_OBJECTS = lexer_test.$(OBJEXT) unicode.$(OBJEXT) \
-       simpletest.$(OBJEXT) utf8_transcoder.$(OBJEXT) \
-       textarrayformat.$(OBJEXT) lexeme_impl.$(OBJEXT) \
-       delimiter.$(OBJEXT) sublexer_impl.$(OBJEXT) lexer.$(OBJEXT) \
-       lexeme_data.$(OBJEXT) reader.$(OBJEXT)
-lexer_test_OBJECTS = $(am_lexer_test_OBJECTS)
-lexer_test_LDADD = $(LDADD)
-am_parser_test_OBJECTS = parser_test.$(OBJEXT) sublexer_impl.$(OBJEXT) \
-       simpletest.$(OBJEXT) utf8_transcoder.$(OBJEXT) \
-       unicode.$(OBJEXT) lexeme_impl.$(OBJEXT) parser.$(OBJEXT) \
-       delimiter.$(OBJEXT) textarrayformat.$(OBJEXT) lexer.$(OBJEXT) \
-       parser_handler.$(OBJEXT) reader.$(OBJEXT) object.$(OBJEXT) \
-       type.$(OBJEXT) data_structure.$(OBJEXT) primitive.$(OBJEXT) \
-       lexeme_data.$(OBJEXT) primitive_util.$(OBJEXT) gc.$(OBJEXT)
-parser_test_OBJECTS = $(am_parser_test_OBJECTS)
-parser_test_LDADD = $(LDADD)
-am_sublexer_test_OBJECTS = sublexer_test.$(OBJEXT) \
-       sublexer_impl.$(OBJEXT) simpletest.$(OBJEXT) unicode.$(OBJEXT) \
-       utf8_transcoder.$(OBJEXT) lexeme_impl.$(OBJEXT) \
-       delimiter.$(OBJEXT) lexeme_data.$(OBJEXT)
-sublexer_test_OBJECTS = $(am_sublexer_test_OBJECTS)
-sublexer_test_LDADD = $(LDADD)
-am_textarrayformat_test_OBJECTS = textarrayformat_test.$(OBJEXT) \
-       textarrayformat.$(OBJEXT) simpletest.$(OBJEXT)
-textarrayformat_test_OBJECTS = $(am_textarrayformat_test_OBJECTS)
-textarrayformat_test_LDADD = $(LDADD)
-am_type_test_OBJECTS = type.$(OBJEXT) type_test.$(OBJEXT) \
-       simpletest.$(OBJEXT)
-type_test_OBJECTS = $(am_type_test_OBJECTS)
-type_test_LDADD = $(LDADD)
-am_unicode_test_OBJECTS = unicode_test.$(OBJEXT) unicode.$(OBJEXT) \
-       simpletest.$(OBJEXT) utf8_transcoder.$(OBJEXT) \
-       reader.$(OBJEXT)
-unicode_test_OBJECTS = $(am_unicode_test_OBJECTS)
-unicode_test_LDADD = $(LDADD)
-am_utf8_transcoder_test_OBJECTS = utf8_transcoder_test.$(OBJEXT) \
-       utf8_transcoder.$(OBJEXT) simpletest.$(OBJEXT) \
-       reader.$(OBJEXT)
-utf8_transcoder_test_OBJECTS = $(am_utf8_transcoder_test_OBJECTS)
-utf8_transcoder_test_LDADD = $(LDADD)
+am_string_reader_test_OBJECTS = string_reader_test.$(OBJEXT) \
+       string_reader.$(OBJEXT) gtest-all.$(OBJEXT)
+string_reader_test_OBJECTS = $(am_string_reader_test_OBJECTS)
+string_reader_test_LDADD = $(LDADD)
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
@@ -105,20 +55,8 @@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 CXXLD = $(CXX)
 CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
        -o $@
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(bignum_test_SOURCES) $(environment_test_SOURCES) \
-       $(lexer_test_SOURCES) $(parser_test_SOURCES) \
-       $(sublexer_test_SOURCES) $(textarrayformat_test_SOURCES) \
-       $(type_test_SOURCES) $(unicode_test_SOURCES) \
-       $(utf8_transcoder_test_SOURCES)
-DIST_SOURCES = $(bignum_test_SOURCES) $(environment_test_SOURCES) \
-       $(lexer_test_SOURCES) $(parser_test_SOURCES) \
-       $(sublexer_test_SOURCES) $(textarrayformat_test_SOURCES) \
-       $(type_test_SOURCES) $(unicode_test_SOURCES) \
-       $(utf8_transcoder_test_SOURCES)
+SOURCES = $(string_reader_test_SOURCES)
+DIST_SOURCES = $(string_reader_test_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -213,40 +151,36 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
 # 警告レベルを最大にする。
-AM_CPPFLAGS = -Wall -fno-default-inline
-INCLUDES = -I$(top_srcdir)
-SRC_DIR = /home/derui/develop/utakata
+AM_CPPFLAGS = -Wall -fno-default-inline -lsrc/test/gtest/gtest-all.o
+INCLUDES = -I$(top_srcdir) -Isrc/test/gtest/gtest.h
+SRC_DIR = ..
 LC_ALL = C
-unicode_test_SOURCES = unicode_test.cpp ${SRC_DIR}/unicode.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/utf8_transcoder.cpp \
-       ${SRC_DIR}/reader.cpp
 
-utf8_transcoder_test_SOURCES = utf8_transcoder_test.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/simpletest.cpp \
-       ${SRC_DIR}/reader.cpp
-
-textarrayformat_test_SOURCES = textarrayformat_test.cpp ${SRC_DIR}/textarrayformat.cpp ${SRC_DIR}/simpletest.cpp
-lexer_test_SOURCES = ${SRC_DIR}/lexeme_id.h lexer_test.cpp ${SRC_DIR}/unicode.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/textarrayformat.cpp ${SRC_DIR}/lexeme_impl.cpp \
-        ${SRC_DIR}/delimiter.cpp  ${SRC_DIR}/sublexer_impl.cpp  ${SRC_DIR}/lexer.cpp ${SRC_DIR}/lexeme_data.cpp \
-        ${SRC_DIR}/reader.cpp
-
-sublexer_test_SOURCES = sublexer_test.cpp ${SRC_DIR}/sublexer_impl.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/unicode.cpp ${SRC_DIR}/utf8_transcoder.cpp \
-       ${SRC_DIR}/lexeme_impl.cpp ${SRC_DIR}/delimiter.cpp ${SRC_DIR}/lexeme_data.cpp
-
-parser_test_SOURCES = parser_test.cpp ${SRC_DIR}/sublexer_impl.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/unicode.cpp \
-       ${SRC_DIR}/lexeme_impl.cpp ${SRC_DIR}/parser.cpp ${SRC_DIR}/delimiter.cpp ${SRC_DIR}/textarrayformat.cpp ${SRC_DIR}/lexer.cpp \
-       ${SRC_DIR}/parser_handler.cpp ${SRC_DIR}/reader.cpp ${SRC_DIR}/object.cpp ${SRC_DIR}/type.cpp ${SRC_DIR}/data_structure.cpp \
-       ${SRC_DIR}/primitive.cpp ${SRC_DIR}/lexeme_data.cpp ${SRC_DIR}/primitive_util.cpp ${SRC_DIR}/gc.cpp
-
-environment_test_SOURCES = ${SRC_DIR}/environment.cpp environment_test.cpp ${SRC_DIR}/simpletest.cpp \
-       ${SRC_DIR}/unicode.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/object.cpp ${SRC_DIR}/type.cpp ${SRC_DIR}/data_structure.cpp
-
-type_test_SOURCES = ${SRC_DIR}/type.cpp type_test.cpp ${SRC_DIR}/simpletest.cpp
-bignum_test_SOURCES = ${SRC_DIR}/bignum.cpp bignum_test.cpp ${SRC_DIR}/simpletest.cpp
+# unicode_test_SOURCES = unicode_test.cpp ${SRC_DIR}/unicode.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/utf8_transcoder.cpp \
+#      ${SRC_DIR}/reader.cpp
+# utf8_transcoder_test_SOURCES = utf8_transcoder_test.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/simpletest.cpp \
+#      ${SRC_DIR}/reader.cpp
+# textarrayformat_test_SOURCES = textarrayformat_test.cpp ${SRC_DIR}/textarrayformat.cpp ${SRC_DIR}/simpletest.cpp
+# lexer_test_SOURCES = ${SRC_DIR}/lexeme_id.h lexer_test.cpp ${SRC_DIR}/unicode.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/textarrayformat.cpp ${SRC_DIR}/lexeme_impl.cpp \
+#       ${SRC_DIR}/delimiter.cpp  ${SRC_DIR}/sublexer_impl.cpp  ${SRC_DIR}/lexer.cpp ${SRC_DIR}/lexeme_data.cpp \
+#       ${SRC_DIR}/reader.cpp
+# sublexer_test_SOURCES = sublexer_test.cpp ${SRC_DIR}/sublexer_impl.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/unicode.cpp ${SRC_DIR}/utf8_transcoder.cpp \
+#      ${SRC_DIR}/lexeme_impl.cpp ${SRC_DIR}/delimiter.cpp ${SRC_DIR}/lexeme_data.cpp
+# parser_test_SOURCES = parser_test.cpp ${SRC_DIR}/sublexer_impl.cpp ${SRC_DIR}/simpletest.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/unicode.cpp \
+#      ${SRC_DIR}/lexeme_impl.cpp ${SRC_DIR}/parser.cpp ${SRC_DIR}/delimiter.cpp ${SRC_DIR}/textarrayformat.cpp ${SRC_DIR}/lexer.cpp \
+#      ${SRC_DIR}/parser_handler.cpp ${SRC_DIR}/reader.cpp ${SRC_DIR}/object.cpp ${SRC_DIR}/type.cpp ${SRC_DIR}/data_structure.cpp \
+#      ${SRC_DIR}/primitive.cpp ${SRC_DIR}/lexeme_data.cpp ${SRC_DIR}/primitive_util.cpp ${SRC_DIR}/gc.cpp
+# environment_test_SOURCES = ${SRC_DIR}/environment.cpp environment_test.cpp ${SRC_DIR}/simpletest.cpp \
+#      ${SRC_DIR}/unicode.cpp ${SRC_DIR}/utf8_transcoder.cpp ${SRC_DIR}/object.cpp ${SRC_DIR}/type.cpp ${SRC_DIR}/data_structure.cpp
+# type_test_SOURCES = ${SRC_DIR}/type.cpp type_test.cpp ${SRC_DIR}/simpletest.cpp
+# bignum_test_SOURCES = ${SRC_DIR}/bignum.cpp bignum_test.cpp ${SRC_DIR}/simpletest.cpp
 check_PROGRANS = $(bin_PROGRAMS)
 TESTS = $(bin_PROGRAMS)
+string_reader_test_SOURCES = string_reader_test.cpp ../string_reader.cpp gtest/gtest-all.cc
 all: all-am
 
 .SUFFIXES:
-.SUFFIXES: .cpp .o .obj
+.SUFFIXES: .cc .cpp .o .obj
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
@@ -256,9 +190,9 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/Makefile'; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/test/Makefile'; \
        cd $(top_srcdir) && \
-         $(AUTOMAKE) --gnu  test/Makefile
+         $(AUTOMAKE) --gnu  src/test/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
@@ -299,33 +233,9 @@ uninstall-binPROGRAMS:
 
 clean-binPROGRAMS:
        -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
-bignum_test$(EXEEXT): $(bignum_test_OBJECTS) $(bignum_test_DEPENDENCIES) 
-       @rm -f bignum_test$(EXEEXT)
-       $(CXXLINK) $(bignum_test_OBJECTS) $(bignum_test_LDADD) $(LIBS)
-environment_test$(EXEEXT): $(environment_test_OBJECTS) $(environment_test_DEPENDENCIES) 
-       @rm -f environment_test$(EXEEXT)
-       $(CXXLINK) $(environment_test_OBJECTS) $(environment_test_LDADD) $(LIBS)
-lexer_test$(EXEEXT): $(lexer_test_OBJECTS) $(lexer_test_DEPENDENCIES) 
-       @rm -f lexer_test$(EXEEXT)
-       $(CXXLINK) $(lexer_test_OBJECTS) $(lexer_test_LDADD) $(LIBS)
-parser_test$(EXEEXT): $(parser_test_OBJECTS) $(parser_test_DEPENDENCIES) 
-       @rm -f parser_test$(EXEEXT)
-       $(CXXLINK) $(parser_test_OBJECTS) $(parser_test_LDADD) $(LIBS)
-sublexer_test$(EXEEXT): $(sublexer_test_OBJECTS) $(sublexer_test_DEPENDENCIES) 
-       @rm -f sublexer_test$(EXEEXT)
-       $(CXXLINK) $(sublexer_test_OBJECTS) $(sublexer_test_LDADD) $(LIBS)
-textarrayformat_test$(EXEEXT): $(textarrayformat_test_OBJECTS) $(textarrayformat_test_DEPENDENCIES) 
-       @rm -f textarrayformat_test$(EXEEXT)
-       $(CXXLINK) $(textarrayformat_test_OBJECTS) $(textarrayformat_test_LDADD) $(LIBS)
-type_test$(EXEEXT): $(type_test_OBJECTS) $(type_test_DEPENDENCIES) 
-       @rm -f type_test$(EXEEXT)
-       $(CXXLINK) $(type_test_OBJECTS) $(type_test_LDADD) $(LIBS)
-unicode_test$(EXEEXT): $(unicode_test_OBJECTS) $(unicode_test_DEPENDENCIES) 
-       @rm -f unicode_test$(EXEEXT)
-       $(CXXLINK) $(unicode_test_OBJECTS) $(unicode_test_LDADD) $(LIBS)
-utf8_transcoder_test$(EXEEXT): $(utf8_transcoder_test_OBJECTS) $(utf8_transcoder_test_DEPENDENCIES) 
-       @rm -f utf8_transcoder_test$(EXEEXT)
-       $(CXXLINK) $(utf8_transcoder_test_OBJECTS) $(utf8_transcoder_test_LDADD) $(LIBS)
+string_reader_test$(EXEEXT): $(string_reader_test_OBJECTS) $(string_reader_test_DEPENDENCIES) 
+       @rm -f string_reader_test$(EXEEXT)
+       $(CXXLINK) $(string_reader_test_OBJECTS) $(string_reader_test_LDADD) $(LIBS)
 
 mostlyclean-compile:
        -rm -f *.$(OBJEXT)
@@ -333,329 +243,65 @@ mostlyclean-compile:
 distclean-compile:
        -rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bignum.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bignum_test.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/data_structure.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/delimiter.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/environment.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/environment_test.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lexeme_data.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lexeme_impl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lexer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lexer_test.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser_handler.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser_test.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/primitive.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/primitive_util.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reader.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simpletest.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sublexer_impl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sublexer_test.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/textarrayformat.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/textarrayformat_test.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/type.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/type_test.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unicode.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unicode_test.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utf8_transcoder.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utf8_transcoder_test.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtest-all.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string_reader.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string_reader_test.Po@am__quote@
 
-.cpp.o:
+.cc.o:
 @am__fastdepCXX_TRUE@  $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
 
-.cpp.obj:
+.cc.obj:
 @am__fastdepCXX_TRUE@  $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
-bignum.o: ${SRC_DIR}/bignum.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bignum.o -MD -MP -MF $(DEPDIR)/bignum.Tpo -c -o bignum.o `test -f '${SRC_DIR}/bignum.cpp' || echo '$(srcdir)/'`${SRC_DIR}/bignum.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/bignum.Tpo $(DEPDIR)/bignum.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/bignum.cpp' object='bignum.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bignum.o `test -f '${SRC_DIR}/bignum.cpp' || echo '$(srcdir)/'`${SRC_DIR}/bignum.cpp
-
-bignum.obj: ${SRC_DIR}/bignum.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bignum.obj -MD -MP -MF $(DEPDIR)/bignum.Tpo -c -o bignum.obj `if test -f '${SRC_DIR}/bignum.cpp'; then $(CYGPATH_W) '${SRC_DIR}/bignum.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/bignum.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/bignum.Tpo $(DEPDIR)/bignum.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/bignum.cpp' object='bignum.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bignum.obj `if test -f '${SRC_DIR}/bignum.cpp'; then $(CYGPATH_W) '${SRC_DIR}/bignum.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/bignum.cpp'; fi`
-
-simpletest.o: ${SRC_DIR}/simpletest.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT simpletest.o -MD -MP -MF $(DEPDIR)/simpletest.Tpo -c -o simpletest.o `test -f '${SRC_DIR}/simpletest.cpp' || echo '$(srcdir)/'`${SRC_DIR}/simpletest.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/simpletest.Tpo $(DEPDIR)/simpletest.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/simpletest.cpp' object='simpletest.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o simpletest.o `test -f '${SRC_DIR}/simpletest.cpp' || echo '$(srcdir)/'`${SRC_DIR}/simpletest.cpp
-
-simpletest.obj: ${SRC_DIR}/simpletest.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT simpletest.obj -MD -MP -MF $(DEPDIR)/simpletest.Tpo -c -o simpletest.obj `if test -f '${SRC_DIR}/simpletest.cpp'; then $(CYGPATH_W) '${SRC_DIR}/simpletest.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/simpletest.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/simpletest.Tpo $(DEPDIR)/simpletest.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/simpletest.cpp' object='simpletest.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o simpletest.obj `if test -f '${SRC_DIR}/simpletest.cpp'; then $(CYGPATH_W) '${SRC_DIR}/simpletest.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/simpletest.cpp'; fi`
-
-environment.o: ${SRC_DIR}/environment.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT environment.o -MD -MP -MF $(DEPDIR)/environment.Tpo -c -o environment.o `test -f '${SRC_DIR}/environment.cpp' || echo '$(srcdir)/'`${SRC_DIR}/environment.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/environment.Tpo $(DEPDIR)/environment.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/environment.cpp' object='environment.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o environment.o `test -f '${SRC_DIR}/environment.cpp' || echo '$(srcdir)/'`${SRC_DIR}/environment.cpp
-
-environment.obj: ${SRC_DIR}/environment.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT environment.obj -MD -MP -MF $(DEPDIR)/environment.Tpo -c -o environment.obj `if test -f '${SRC_DIR}/environment.cpp'; then $(CYGPATH_W) '${SRC_DIR}/environment.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/environment.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/environment.Tpo $(DEPDIR)/environment.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/environment.cpp' object='environment.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o environment.obj `if test -f '${SRC_DIR}/environment.cpp'; then $(CYGPATH_W) '${SRC_DIR}/environment.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/environment.cpp'; fi`
-
-unicode.o: ${SRC_DIR}/unicode.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT unicode.o -MD -MP -MF $(DEPDIR)/unicode.Tpo -c -o unicode.o `test -f '${SRC_DIR}/unicode.cpp' || echo '$(srcdir)/'`${SRC_DIR}/unicode.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/unicode.Tpo $(DEPDIR)/unicode.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/unicode.cpp' object='unicode.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o unicode.o `test -f '${SRC_DIR}/unicode.cpp' || echo '$(srcdir)/'`${SRC_DIR}/unicode.cpp
-
-unicode.obj: ${SRC_DIR}/unicode.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT unicode.obj -MD -MP -MF $(DEPDIR)/unicode.Tpo -c -o unicode.obj `if test -f '${SRC_DIR}/unicode.cpp'; then $(CYGPATH_W) '${SRC_DIR}/unicode.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/unicode.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/unicode.Tpo $(DEPDIR)/unicode.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/unicode.cpp' object='unicode.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o unicode.obj `if test -f '${SRC_DIR}/unicode.cpp'; then $(CYGPATH_W) '${SRC_DIR}/unicode.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/unicode.cpp'; fi`
-
-utf8_transcoder.o: ${SRC_DIR}/utf8_transcoder.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT utf8_transcoder.o -MD -MP -MF $(DEPDIR)/utf8_transcoder.Tpo -c -o utf8_transcoder.o `test -f '${SRC_DIR}/utf8_transcoder.cpp' || echo '$(srcdir)/'`${SRC_DIR}/utf8_transcoder.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/utf8_transcoder.Tpo $(DEPDIR)/utf8_transcoder.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/utf8_transcoder.cpp' object='utf8_transcoder.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o utf8_transcoder.o `test -f '${SRC_DIR}/utf8_transcoder.cpp' || echo '$(srcdir)/'`${SRC_DIR}/utf8_transcoder.cpp
-
-utf8_transcoder.obj: ${SRC_DIR}/utf8_transcoder.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT utf8_transcoder.obj -MD -MP -MF $(DEPDIR)/utf8_transcoder.Tpo -c -o utf8_transcoder.obj `if test -f '${SRC_DIR}/utf8_transcoder.cpp'; then $(CYGPATH_W) '${SRC_DIR}/utf8_transcoder.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/utf8_transcoder.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/utf8_transcoder.Tpo $(DEPDIR)/utf8_transcoder.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/utf8_transcoder.cpp' object='utf8_transcoder.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o utf8_transcoder.obj `if test -f '${SRC_DIR}/utf8_transcoder.cpp'; then $(CYGPATH_W) '${SRC_DIR}/utf8_transcoder.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/utf8_transcoder.cpp'; fi`
-
-object.o: ${SRC_DIR}/object.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT object.o -MD -MP -MF $(DEPDIR)/object.Tpo -c -o object.o `test -f '${SRC_DIR}/object.cpp' || echo '$(srcdir)/'`${SRC_DIR}/object.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/object.Tpo $(DEPDIR)/object.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/object.cpp' object='object.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o object.o `test -f '${SRC_DIR}/object.cpp' || echo '$(srcdir)/'`${SRC_DIR}/object.cpp
-
-object.obj: ${SRC_DIR}/object.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT object.obj -MD -MP -MF $(DEPDIR)/object.Tpo -c -o object.obj `if test -f '${SRC_DIR}/object.cpp'; then $(CYGPATH_W) '${SRC_DIR}/object.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/object.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/object.Tpo $(DEPDIR)/object.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/object.cpp' object='object.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o object.obj `if test -f '${SRC_DIR}/object.cpp'; then $(CYGPATH_W) '${SRC_DIR}/object.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/object.cpp'; fi`
-
-type.o: ${SRC_DIR}/type.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT type.o -MD -MP -MF $(DEPDIR)/type.Tpo -c -o type.o `test -f '${SRC_DIR}/type.cpp' || echo '$(srcdir)/'`${SRC_DIR}/type.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/type.Tpo $(DEPDIR)/type.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/type.cpp' object='type.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o type.o `test -f '${SRC_DIR}/type.cpp' || echo '$(srcdir)/'`${SRC_DIR}/type.cpp
-
-type.obj: ${SRC_DIR}/type.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT type.obj -MD -MP -MF $(DEPDIR)/type.Tpo -c -o type.obj `if test -f '${SRC_DIR}/type.cpp'; then $(CYGPATH_W) '${SRC_DIR}/type.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/type.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/type.Tpo $(DEPDIR)/type.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/type.cpp' object='type.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o type.obj `if test -f '${SRC_DIR}/type.cpp'; then $(CYGPATH_W) '${SRC_DIR}/type.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/type.cpp'; fi`
-
-data_structure.o: ${SRC_DIR}/data_structure.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT data_structure.o -MD -MP -MF $(DEPDIR)/data_structure.Tpo -c -o data_structure.o `test -f '${SRC_DIR}/data_structure.cpp' || echo '$(srcdir)/'`${SRC_DIR}/data_structure.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/data_structure.Tpo $(DEPDIR)/data_structure.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/data_structure.cpp' object='data_structure.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o data_structure.o `test -f '${SRC_DIR}/data_structure.cpp' || echo '$(srcdir)/'`${SRC_DIR}/data_structure.cpp
-
-data_structure.obj: ${SRC_DIR}/data_structure.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT data_structure.obj -MD -MP -MF $(DEPDIR)/data_structure.Tpo -c -o data_structure.obj `if test -f '${SRC_DIR}/data_structure.cpp'; then $(CYGPATH_W) '${SRC_DIR}/data_structure.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/data_structure.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/data_structure.Tpo $(DEPDIR)/data_structure.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/data_structure.cpp' object='data_structure.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o data_structure.obj `if test -f '${SRC_DIR}/data_structure.cpp'; then $(CYGPATH_W) '${SRC_DIR}/data_structure.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/data_structure.cpp'; fi`
-
-textarrayformat.o: ${SRC_DIR}/textarrayformat.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT textarrayformat.o -MD -MP -MF $(DEPDIR)/textarrayformat.Tpo -c -o textarrayformat.o `test -f '${SRC_DIR}/textarrayformat.cpp' || echo '$(srcdir)/'`${SRC_DIR}/textarrayformat.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/textarrayformat.Tpo $(DEPDIR)/textarrayformat.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/textarrayformat.cpp' object='textarrayformat.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o textarrayformat.o `test -f '${SRC_DIR}/textarrayformat.cpp' || echo '$(srcdir)/'`${SRC_DIR}/textarrayformat.cpp
-
-textarrayformat.obj: ${SRC_DIR}/textarrayformat.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT textarrayformat.obj -MD -MP -MF $(DEPDIR)/textarrayformat.Tpo -c -o textarrayformat.obj `if test -f '${SRC_DIR}/textarrayformat.cpp'; then $(CYGPATH_W) '${SRC_DIR}/textarrayformat.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/textarrayformat.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/textarrayformat.Tpo $(DEPDIR)/textarrayformat.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/textarrayformat.cpp' object='textarrayformat.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o textarrayformat.obj `if test -f '${SRC_DIR}/textarrayformat.cpp'; then $(CYGPATH_W) '${SRC_DIR}/textarrayformat.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/textarrayformat.cpp'; fi`
-
-lexeme_impl.o: ${SRC_DIR}/lexeme_impl.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lexeme_impl.o -MD -MP -MF $(DEPDIR)/lexeme_impl.Tpo -c -o lexeme_impl.o `test -f '${SRC_DIR}/lexeme_impl.cpp' || echo '$(srcdir)/'`${SRC_DIR}/lexeme_impl.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/lexeme_impl.Tpo $(DEPDIR)/lexeme_impl.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/lexeme_impl.cpp' object='lexeme_impl.o' libtool=no @AMDEPBACKSLASH@
+string_reader.o: ../string_reader.cpp
+@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT string_reader.o -MD -MP -MF $(DEPDIR)/string_reader.Tpo -c -o string_reader.o `test -f '../string_reader.cpp' || echo '$(srcdir)/'`../string_reader.cpp
+@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/string_reader.Tpo $(DEPDIR)/string_reader.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='../string_reader.cpp' object='string_reader.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lexeme_impl.o `test -f '${SRC_DIR}/lexeme_impl.cpp' || echo '$(srcdir)/'`${SRC_DIR}/lexeme_impl.cpp
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o string_reader.o `test -f '../string_reader.cpp' || echo '$(srcdir)/'`../string_reader.cpp
 
-lexeme_impl.obj: ${SRC_DIR}/lexeme_impl.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lexeme_impl.obj -MD -MP -MF $(DEPDIR)/lexeme_impl.Tpo -c -o lexeme_impl.obj `if test -f '${SRC_DIR}/lexeme_impl.cpp'; then $(CYGPATH_W) '${SRC_DIR}/lexeme_impl.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/lexeme_impl.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/lexeme_impl.Tpo $(DEPDIR)/lexeme_impl.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/lexeme_impl.cpp' object='lexeme_impl.obj' libtool=no @AMDEPBACKSLASH@
+string_reader.obj: ../string_reader.cpp
+@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT string_reader.obj -MD -MP -MF $(DEPDIR)/string_reader.Tpo -c -o string_reader.obj `if test -f '../string_reader.cpp'; then $(CYGPATH_W) '../string_reader.cpp'; else $(CYGPATH_W) '$(srcdir)/../string_reader.cpp'; fi`
+@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/string_reader.Tpo $(DEPDIR)/string_reader.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='../string_reader.cpp' object='string_reader.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lexeme_impl.obj `if test -f '${SRC_DIR}/lexeme_impl.cpp'; then $(CYGPATH_W) '${SRC_DIR}/lexeme_impl.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/lexeme_impl.cpp'; fi`
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o string_reader.obj `if test -f '../string_reader.cpp'; then $(CYGPATH_W) '../string_reader.cpp'; else $(CYGPATH_W) '$(srcdir)/../string_reader.cpp'; fi`
 
-delimiter.o: ${SRC_DIR}/delimiter.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT delimiter.o -MD -MP -MF $(DEPDIR)/delimiter.Tpo -c -o delimiter.o `test -f '${SRC_DIR}/delimiter.cpp' || echo '$(srcdir)/'`${SRC_DIR}/delimiter.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/delimiter.Tpo $(DEPDIR)/delimiter.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/delimiter.cpp' object='delimiter.o' libtool=no @AMDEPBACKSLASH@
+gtest-all.o: gtest/gtest-all.cc
+@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gtest-all.o -MD -MP -MF $(DEPDIR)/gtest-all.Tpo -c -o gtest-all.o `test -f 'gtest/gtest-all.cc' || echo '$(srcdir)/'`gtest/gtest-all.cc
+@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/gtest-all.Tpo $(DEPDIR)/gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='gtest/gtest-all.cc' object='gtest-all.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o delimiter.o `test -f '${SRC_DIR}/delimiter.cpp' || echo '$(srcdir)/'`${SRC_DIR}/delimiter.cpp
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gtest-all.o `test -f 'gtest/gtest-all.cc' || echo '$(srcdir)/'`gtest/gtest-all.cc
 
-delimiter.obj: ${SRC_DIR}/delimiter.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT delimiter.obj -MD -MP -MF $(DEPDIR)/delimiter.Tpo -c -o delimiter.obj `if test -f '${SRC_DIR}/delimiter.cpp'; then $(CYGPATH_W) '${SRC_DIR}/delimiter.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/delimiter.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/delimiter.Tpo $(DEPDIR)/delimiter.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/delimiter.cpp' object='delimiter.obj' libtool=no @AMDEPBACKSLASH@
+gtest-all.obj: gtest/gtest-all.cc
+@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gtest-all.obj -MD -MP -MF $(DEPDIR)/gtest-all.Tpo -c -o gtest-all.obj `if test -f 'gtest/gtest-all.cc'; then $(CYGPATH_W) 'gtest/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/gtest/gtest-all.cc'; fi`
+@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/gtest-all.Tpo $(DEPDIR)/gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='gtest/gtest-all.cc' object='gtest-all.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o delimiter.obj `if test -f '${SRC_DIR}/delimiter.cpp'; then $(CYGPATH_W) '${SRC_DIR}/delimiter.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/delimiter.cpp'; fi`
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gtest-all.obj `if test -f 'gtest/gtest-all.cc'; then $(CYGPATH_W) 'gtest/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/gtest/gtest-all.cc'; fi`
 
-sublexer_impl.o: ${SRC_DIR}/sublexer_impl.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT sublexer_impl.o -MD -MP -MF $(DEPDIR)/sublexer_impl.Tpo -c -o sublexer_impl.o `test -f '${SRC_DIR}/sublexer_impl.cpp' || echo '$(srcdir)/'`${SRC_DIR}/sublexer_impl.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/sublexer_impl.Tpo $(DEPDIR)/sublexer_impl.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/sublexer_impl.cpp' object='sublexer_impl.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o sublexer_impl.o `test -f '${SRC_DIR}/sublexer_impl.cpp' || echo '$(srcdir)/'`${SRC_DIR}/sublexer_impl.cpp
-
-sublexer_impl.obj: ${SRC_DIR}/sublexer_impl.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT sublexer_impl.obj -MD -MP -MF $(DEPDIR)/sublexer_impl.Tpo -c -o sublexer_impl.obj `if test -f '${SRC_DIR}/sublexer_impl.cpp'; then $(CYGPATH_W) '${SRC_DIR}/sublexer_impl.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/sublexer_impl.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/sublexer_impl.Tpo $(DEPDIR)/sublexer_impl.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/sublexer_impl.cpp' object='sublexer_impl.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o sublexer_impl.obj `if test -f '${SRC_DIR}/sublexer_impl.cpp'; then $(CYGPATH_W) '${SRC_DIR}/sublexer_impl.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/sublexer_impl.cpp'; fi`
-
-lexer.o: ${SRC_DIR}/lexer.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lexer.o -MD -MP -MF $(DEPDIR)/lexer.Tpo -c -o lexer.o `test -f '${SRC_DIR}/lexer.cpp' || echo '$(srcdir)/'`${SRC_DIR}/lexer.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/lexer.Tpo $(DEPDIR)/lexer.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/lexer.cpp' object='lexer.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lexer.o `test -f '${SRC_DIR}/lexer.cpp' || echo '$(srcdir)/'`${SRC_DIR}/lexer.cpp
-
-lexer.obj: ${SRC_DIR}/lexer.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lexer.obj -MD -MP -MF $(DEPDIR)/lexer.Tpo -c -o lexer.obj `if test -f '${SRC_DIR}/lexer.cpp'; then $(CYGPATH_W) '${SRC_DIR}/lexer.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/lexer.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/lexer.Tpo $(DEPDIR)/lexer.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/lexer.cpp' object='lexer.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lexer.obj `if test -f '${SRC_DIR}/lexer.cpp'; then $(CYGPATH_W) '${SRC_DIR}/lexer.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/lexer.cpp'; fi`
-
-lexeme_data.o: ${SRC_DIR}/lexeme_data.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lexeme_data.o -MD -MP -MF $(DEPDIR)/lexeme_data.Tpo -c -o lexeme_data.o `test -f '${SRC_DIR}/lexeme_data.cpp' || echo '$(srcdir)/'`${SRC_DIR}/lexeme_data.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/lexeme_data.Tpo $(DEPDIR)/lexeme_data.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/lexeme_data.cpp' object='lexeme_data.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lexeme_data.o `test -f '${SRC_DIR}/lexeme_data.cpp' || echo '$(srcdir)/'`${SRC_DIR}/lexeme_data.cpp
-
-lexeme_data.obj: ${SRC_DIR}/lexeme_data.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lexeme_data.obj -MD -MP -MF $(DEPDIR)/lexeme_data.Tpo -c -o lexeme_data.obj `if test -f '${SRC_DIR}/lexeme_data.cpp'; then $(CYGPATH_W) '${SRC_DIR}/lexeme_data.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/lexeme_data.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/lexeme_data.Tpo $(DEPDIR)/lexeme_data.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/lexeme_data.cpp' object='lexeme_data.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lexeme_data.obj `if test -f '${SRC_DIR}/lexeme_data.cpp'; then $(CYGPATH_W) '${SRC_DIR}/lexeme_data.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/lexeme_data.cpp'; fi`
-
-reader.o: ${SRC_DIR}/reader.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT reader.o -MD -MP -MF $(DEPDIR)/reader.Tpo -c -o reader.o `test -f '${SRC_DIR}/reader.cpp' || echo '$(srcdir)/'`${SRC_DIR}/reader.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/reader.Tpo $(DEPDIR)/reader.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/reader.cpp' object='reader.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o reader.o `test -f '${SRC_DIR}/reader.cpp' || echo '$(srcdir)/'`${SRC_DIR}/reader.cpp
-
-reader.obj: ${SRC_DIR}/reader.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT reader.obj -MD -MP -MF $(DEPDIR)/reader.Tpo -c -o reader.obj `if test -f '${SRC_DIR}/reader.cpp'; then $(CYGPATH_W) '${SRC_DIR}/reader.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/reader.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/reader.Tpo $(DEPDIR)/reader.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/reader.cpp' object='reader.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o reader.obj `if test -f '${SRC_DIR}/reader.cpp'; then $(CYGPATH_W) '${SRC_DIR}/reader.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/reader.cpp'; fi`
-
-parser.o: ${SRC_DIR}/parser.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT parser.o -MD -MP -MF $(DEPDIR)/parser.Tpo -c -o parser.o `test -f '${SRC_DIR}/parser.cpp' || echo '$(srcdir)/'`${SRC_DIR}/parser.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/parser.Tpo $(DEPDIR)/parser.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/parser.cpp' object='parser.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o parser.o `test -f '${SRC_DIR}/parser.cpp' || echo '$(srcdir)/'`${SRC_DIR}/parser.cpp
-
-parser.obj: ${SRC_DIR}/parser.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT parser.obj -MD -MP -MF $(DEPDIR)/parser.Tpo -c -o parser.obj `if test -f '${SRC_DIR}/parser.cpp'; then $(CYGPATH_W) '${SRC_DIR}/parser.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/parser.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/parser.Tpo $(DEPDIR)/parser.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/parser.cpp' object='parser.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o parser.obj `if test -f '${SRC_DIR}/parser.cpp'; then $(CYGPATH_W) '${SRC_DIR}/parser.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/parser.cpp'; fi`
-
-parser_handler.o: ${SRC_DIR}/parser_handler.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT parser_handler.o -MD -MP -MF $(DEPDIR)/parser_handler.Tpo -c -o parser_handler.o `test -f '${SRC_DIR}/parser_handler.cpp' || echo '$(srcdir)/'`${SRC_DIR}/parser_handler.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/parser_handler.Tpo $(DEPDIR)/parser_handler.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/parser_handler.cpp' object='parser_handler.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o parser_handler.o `test -f '${SRC_DIR}/parser_handler.cpp' || echo '$(srcdir)/'`${SRC_DIR}/parser_handler.cpp
-
-parser_handler.obj: ${SRC_DIR}/parser_handler.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT parser_handler.obj -MD -MP -MF $(DEPDIR)/parser_handler.Tpo -c -o parser_handler.obj `if test -f '${SRC_DIR}/parser_handler.cpp'; then $(CYGPATH_W) '${SRC_DIR}/parser_handler.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/parser_handler.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/parser_handler.Tpo $(DEPDIR)/parser_handler.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/parser_handler.cpp' object='parser_handler.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o parser_handler.obj `if test -f '${SRC_DIR}/parser_handler.cpp'; then $(CYGPATH_W) '${SRC_DIR}/parser_handler.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/parser_handler.cpp'; fi`
-
-primitive.o: ${SRC_DIR}/primitive.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT primitive.o -MD -MP -MF $(DEPDIR)/primitive.Tpo -c -o primitive.o `test -f '${SRC_DIR}/primitive.cpp' || echo '$(srcdir)/'`${SRC_DIR}/primitive.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/primitive.Tpo $(DEPDIR)/primitive.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/primitive.cpp' object='primitive.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o primitive.o `test -f '${SRC_DIR}/primitive.cpp' || echo '$(srcdir)/'`${SRC_DIR}/primitive.cpp
-
-primitive.obj: ${SRC_DIR}/primitive.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT primitive.obj -MD -MP -MF $(DEPDIR)/primitive.Tpo -c -o primitive.obj `if test -f '${SRC_DIR}/primitive.cpp'; then $(CYGPATH_W) '${SRC_DIR}/primitive.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/primitive.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/primitive.Tpo $(DEPDIR)/primitive.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/primitive.cpp' object='primitive.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o primitive.obj `if test -f '${SRC_DIR}/primitive.cpp'; then $(CYGPATH_W) '${SRC_DIR}/primitive.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/primitive.cpp'; fi`
-
-primitive_util.o: ${SRC_DIR}/primitive_util.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT primitive_util.o -MD -MP -MF $(DEPDIR)/primitive_util.Tpo -c -o primitive_util.o `test -f '${SRC_DIR}/primitive_util.cpp' || echo '$(srcdir)/'`${SRC_DIR}/primitive_util.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/primitive_util.Tpo $(DEPDIR)/primitive_util.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/primitive_util.cpp' object='primitive_util.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o primitive_util.o `test -f '${SRC_DIR}/primitive_util.cpp' || echo '$(srcdir)/'`${SRC_DIR}/primitive_util.cpp
-
-primitive_util.obj: ${SRC_DIR}/primitive_util.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT primitive_util.obj -MD -MP -MF $(DEPDIR)/primitive_util.Tpo -c -o primitive_util.obj `if test -f '${SRC_DIR}/primitive_util.cpp'; then $(CYGPATH_W) '${SRC_DIR}/primitive_util.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/primitive_util.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/primitive_util.Tpo $(DEPDIR)/primitive_util.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/primitive_util.cpp' object='primitive_util.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o primitive_util.obj `if test -f '${SRC_DIR}/primitive_util.cpp'; then $(CYGPATH_W) '${SRC_DIR}/primitive_util.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/primitive_util.cpp'; fi`
-
-gc.o: ${SRC_DIR}/gc.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gc.o -MD -MP -MF $(DEPDIR)/gc.Tpo -c -o gc.o `test -f '${SRC_DIR}/gc.cpp' || echo '$(srcdir)/'`${SRC_DIR}/gc.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/gc.Tpo $(DEPDIR)/gc.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/gc.cpp' object='gc.o' libtool=no @AMDEPBACKSLASH@
+.cpp.o:
+@am__fastdepCXX_TRUE@  $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gc.o `test -f '${SRC_DIR}/gc.cpp' || echo '$(srcdir)/'`${SRC_DIR}/gc.cpp
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
 
-gc.obj: ${SRC_DIR}/gc.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gc.obj -MD -MP -MF $(DEPDIR)/gc.Tpo -c -o gc.obj `if test -f '${SRC_DIR}/gc.cpp'; then $(CYGPATH_W) '${SRC_DIR}/gc.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/gc.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/gc.Tpo $(DEPDIR)/gc.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='${SRC_DIR}/gc.cpp' object='gc.obj' libtool=no @AMDEPBACKSLASH@
+.cpp.obj:
+@am__fastdepCXX_TRUE@  $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gc.obj `if test -f '${SRC_DIR}/gc.cpp'; then $(CYGPATH_W) '${SRC_DIR}/gc.cpp'; else $(CYGPATH_W) '$(srcdir)/${SRC_DIR}/gc.cpp'; fi`
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
        list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
index 5f25d0b..9579e11 100644 (file)
@@ -1,14 +1,8 @@
 SRCS = utf8_string_test ../utf8_string ../simpletest ../utf8
 TARGET = utf8_string_test
 
-CXXFLAGS += -g -I../common -I.. -Wall
+CXXFLAGS += -g -I../common -I.. -Igtest -lgtest -Wall
 LDFLAGS += 
 
-.DEFAULT: $(CXXProgram $(TARGET), $(SRCS))
-.DEFAULT: $(CXXProgram utf8_test, ../utf8 ../simpletest utf8_test)
-.DEFAULT: $(CXXProgram textarrayformat_test, textarrayformat_test ../textarrayformat ../simpletest)
-.DEFAULT: $(CXXProgram lexer_test, lexer_test ../utf8_string ../simpletest ../utf8 ../textarrayformat ../lexeme_impl ../delimiter  ../sublexer_impl  ../lexer)
-.DEFAULT: $(CXXProgram sublexer_test, sublexer_test ../sublexer_impl ../simpletest ../utf8_string ../utf8 ../lexeme_impl ../delimiter)
-.DEFAULT: $(CXXProgram parser_test, parser_test ../sublexer_impl ../simpletest ../utf8 ../utf8_string ../lexeme_impl ../parser ../delimiter ../textarrayformat ../lexer ../data)
-
+.DEFAULT: $(CXXProgram string_reader_test, ../string_reader)
 
index ffc0c90..7c4324f 100644 (file)
@@ -8,17 +8,11 @@
 #   make clean  - removes all files generated by make.
 
 # Points to the root of fused Google Test, relative to where this file is.
-FUSED_GTEST_DIR = output
+FUSED_GTEST_DIR = .
 
 # Paths to the fused gtest files.
-FUSED_GTEST_H = $(FUSED_GTEST_DIR)/gtest/gtest.h
-FUSED_GTEST_ALL_CC = $(FUSED_GTEST_DIR)/gtest/gtest-all.cc
-
-# Where to find the sample test.
-SAMPLE_DIR = ../../samples
-
-# Where to find gtest_main.cc.
-GTEST_MAIN_CC = ../../src/gtest_main.cc
+FUSED_GTEST_H = $(FUSED_GTEST_DIR)/gtest.h
+FUSED_GTEST_ALL_CC = $(FUSED_GTEST_DIR)/gtest-all.cc
 
 # Flags passed to the preprocessor.
 CPPFLAGS += -I$(FUSED_GTEST_DIR)
@@ -26,32 +20,10 @@ CPPFLAGS += -I$(FUSED_GTEST_DIR)
 # Flags passed to the C++ compiler.
 CXXFLAGS += -g
 
-all : sample1_unittest
-
-check : all
-       ./sample1_unittest
+all : gtest-all.o
 
 clean :
-       rm -rf $(FUSED_GTEST_DIR) sample1_unittest *.o
-
-$(FUSED_GTEST_H) :
-       ../fuse_gtest_files.py $(FUSED_GTEST_DIR)
-
-$(FUSED_GTEST_ALL_CC) :
-       ../fuse_gtest_files.py $(FUSED_GTEST_DIR)
-
-gtest-all.o : $(FUSED_GTEST_H) $(FUSED_GTEST_ALL_CC)
-       $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(FUSED_GTEST_DIR)/gtest/gtest-all.cc
-
-gtest_main.o : $(FUSED_GTEST_H) $(GTEST_MAIN_CC)
-       $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(GTEST_MAIN_CC)
-
-sample1.o : $(SAMPLE_DIR)/sample1.cc $(SAMPLE_DIR)/sample1.h
-       $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(SAMPLE_DIR)/sample1.cc
-
-sample1_unittest.o : $(SAMPLE_DIR)/sample1_unittest.cc \
-                     $(SAMPLE_DIR)/sample1.h $(FUSED_GTEST_H)
-       $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(SAMPLE_DIR)/sample1_unittest.cc
+       rm -rf $(FUSED_GTEST_DIR) *.o
 
-sample1_unittest : sample1.o sample1_unittest.o gtest-all.o gtest_main.o
-       $(CXX) $(CPPFLAGS) $(CXXFLAGS) $^ -o $@
+gtest-all.o : $(CXX) $(CPPFLAGS)
+       $(CXXFLAGS) -c $(FUSED_GTEST_DIR)/gtest-all.cc
diff --git a/src/test/lexer_dispatcher_test.cpp b/src/test/lexer_dispatcher_test.cpp
new file mode 100644 (file)
index 0000000..4bf04d9
--- /dev/null
@@ -0,0 +1,78 @@
+#include <gtest/gtest.h>
+#include "src/lexer_dispatcher.h"
+#include "src/lexer_interface.h"
+#include "src/unicode.h"
+
+
+namespace lexer = ::utakata::lexer;
+namespace reader = ::utakata::reader;
+namespace lexeme = ::utakata::lexeme;
+namespace unicode = ::utakata::unicode;
+
+class Lexer1 : public lexer::IPartOfLexer {
+ public:
+  virtual ~Lexer1() {}
+
+  lexeme::ILexeme* Lex(const unicode::UniString& string,
+                       reader::StreamReader* stream) {
+    stream.read(1);
+    
+  }
+};
+
+class Term1 : public lexer::ILexerDispatchTerm {
+ public:
+  virtual ~Term1() {}
+
+  bool IsDispatch(const unicode::UniString& string) const {
+    if (string == UniString("test")) {
+      return true;
+    }
+    return false;
+  }
+};
+
+class Creator1 : public lexer::ILexerCreator {
+ public:
+  virtual ~Creator1() {}
+
+  virtual IPartOfLexer* Create() const;
+  virtual ILexerDispatchTerm* GetTerm() const;
+
+};
+
+class LexerTest : public ::testing::Test {
+ protected:
+  virtual void SetUp() {
+    Creator1 c;
+    lexer::LexerDispatcher dispatcher;
+    dispatcher.AppendLexer(c);
+
+    reader.append("test string 'hoge'");
+  }
+
+  lexer::LexerDispatcher dispatcher;
+  reader::StreamReader reader;
+};
+
+TEST(LexerTest, Dispatch1) {
+  // ディスパッチを行うテスト。
+
+
+  lexer::IPartOfLexer* lexer = NULL;
+  unicode::UniString& string("test");
+
+  EXPECT_TRUE(dispatcher.Dispatch(string, lexer));
+  EXPECT_NE(NULL, lexer);
+
+  smart_ptr<lexeme::ILexeme> lexeme(lexer->Lex(reader));
+  EXPECT_FALSE(lexeme.IsNull());
+}
+
+int main(int argc, char** argv)
+{
+  testing::InitGoogleTest(&argc, argv);
+  
+  return RUN_ALL_TESTS();
+}
+
diff --git a/src/test/string_reader_test.cpp b/src/test/string_reader_test.cpp
new file mode 100644 (file)
index 0000000..91f66d2
--- /dev/null
@@ -0,0 +1,49 @@
+#include <gtest/gtest.h>
+#include "src/string_reader.h"
+
+namespace reader = utakata::reader;
+
+TEST(StringReaderTest, Test1) {
+  // StringReaderを用いた読み出しを行う。
+  reader::StringReader reader("hoge");
+
+  EXPECT_EQ(reader.GetSize(), 4);
+
+  EXPECT_EQ(reader.Read(), 'h');
+  EXPECT_EQ(reader.GetPos(), 1);
+
+  EXPECT_EQ(reader.Peek(), 'o');
+  EXPECT_EQ(reader.Read(), 'o');
+  std::vector<unsigned char> t = reader.Read(2);
+  EXPECT_EQ(t[0], 'g');
+  EXPECT_EQ(t[1], 'e');
+
+  EXPECT_EQ(reader.GetPos(), 4);
+  reader.Begin();
+  EXPECT_EQ(reader.GetPos(), 0);
+
+  EXPECT_EQ(reader.Seek(1, reader::StringReader::kForward), 1);
+  EXPECT_EQ(reader.Read(), 'o');
+
+  EXPECT_EQ(reader.Seek(1, reader::StringReader::kBackward), 1);
+  EXPECT_EQ(reader.Read(), 'o');
+
+  t = reader.Read(2);
+  EXPECT_EQ(t[0], 'g');
+  EXPECT_EQ(t[1], 'e');
+  EXPECT_TRUE(reader.IsEof());
+
+  reader.Unget();
+  EXPECT_FALSE(reader.IsEof());
+  EXPECT_EQ(reader.Read(), 'e');
+
+  // すでに末尾であるのに進もうとすると例外が発生する。
+  EXPECT_THROW(reader.Read(), reader::EndOfDeviceException);
+}
+
+int main(int argc, char** argv)
+{
+  testing::InitGoogleTest(&argc, argv);
+
+  return RUN_ALL_TESTS();
+}
diff --git a/src/textarrayformat.h b/src/textarrayformat.h
deleted file mode 100644 (file)
index 9390aab..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef _TEXTARRAYFORMAT_H_
-#define _TEXTARRAYFORMAT_H_
-
-#include <iostream>
-#include <string>
-#include <vector>
-#include <exception>
-
-
-namespace textarrayformat {
-
-    class OutOfIndexException : public std::exception
-    {
-    public:
-        OutOfIndexException(const std::string& str);
-        virtual ~OutOfIndexException() throw() {}
-
-        virtual const char* what() const throw();
-
-    private:
-        const std::string str_;
-    };
-
-    class TextArrayReader
-    {
-    public:
-
-        TextArrayReader(std::istream& is);
-        virtual ~TextArrayReader() {}
-
-        // 指定したストリームの先頭からフォーマットに従ってブロック単位
-        // への切り出しを行う。
-        // この関数が成功した場合、以前のブロックなどは保存されない。
-        void open(std::istream& is);
-
-        // 指定したブロックを取得する。
-        // 番号を指定しない場合には、最初に取得したブロックが取得される。
-        std::string get(int = 0);
-
-        // ブロックのリストを取得する。
-        const std::vector<std::string>& getBlock() const {return blocks_;}
-
-    private:
-
-        // ファイル中のスプリッタを行ごと退避する。
-        std::string splitter_;
-
-        // テキストのブロックを退避しておくリスト
-        std::vector<std::string> blocks_;
-    };
-
-};
-
-#endif /* _TEXTARRAYFORMAT_H_ */
index 0fbd306..d30967c 100755 (executable)
@@ -51,7 +51,7 @@ bool operator!=(const Type& lh, const Type& rh) {
   return !(lh.hash() == rh.hash());
 }
 
-class TypeDescripter : private utility::DisableCopy {
+class TypeDescripter : private utility::Uncopyable {
   // TypeとIObject派生クラスとを関連付けるためのクラスです。
   // TypeDescripterは、以下の情報を保持/提供します。
   // ・保持しているオブジェクトを一意に表すType