Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

preprocess in ./preprocess instead of make

  • Loading branch information...
commit 007e8db7132be415660d209ea21d8179693c52b2 1 parent edfc482
@frsyuki frsyuki authored
View
3  Makefile.am
@@ -45,6 +45,3 @@ man_MANS = \
doc/kumostat.1 \
doc/kumotop.1
-prep:
- cd src && make prep
-
View
6 bootstrap
@@ -36,7 +36,11 @@ test -f AUTHORS || touch AUTHORS
test -f COPYING || touch COPYING
test -f ChangeLog || touch ChangeLog
test -f NEWS || touch NEWS
-test -f README || touch README
+test -f README || cp -f README.md README
+
+if ! ./preprocess; then
+ exit 1
+fi
ACLOCAL="aclocal"
View
25 configure.in
@@ -7,36 +7,11 @@ AC_CONFIG_HEADER(config.h)
AC_SUBST(CFLAGS)
-if test "" = "$CFLAGS"; then
- CFLAGS="-O4"
-fi
CFLAGS="-O4 -Wall $CFLAGS"
-
AC_SUBST(CXXFLAGS)
-if test "" = "$CXXFLAGS"; then
- CXXFLAGS="-O4"
-fi
CXXFLAGS="-O4 -Wall $CXXFLAGS"
-
-AC_CHECK_PROG(RUBY, ruby, ruby)
-if test "x$RUBY" = x; then
- AC_MSG_ERROR([cannot find ruby. Ruby is needed to build.])
-fi
-
-AC_CHECK_PROG(ERB, erb, erb)
-if test "x$ERB" = x; then
- AC_MSG_ERROR([cannot find erb. Ruby is needed to build.])
-fi
-
-AC_CHECK_PROG(RAGEL, ragel, ragel)
-if test "x$RAGEL" = x; then
- #AC_MSG_ERROR([cannot find ragel. Ragel is needed to build.])
- RAGEL=ragel
-fi
-
-
AC_PROG_CC
AC_PROG_CXX
View
107 preprocess
@@ -0,0 +1,107 @@
+#!/usr/bin/env bash
+
+RUBY="ruby"
+ERB="erb"
+RAGEL="ragel"
+
+function r() {
+ echo "$@"
+ "$@"
+}
+
+function check_error() {
+ if [ "$1" != 0 ]; then
+ echo ""
+ echo "** preprocess failed **"
+ echo ""
+ exit 1
+ fi
+}
+
+function pre_h() {
+ file="$1"
+ out="$(dirname "$file")/$(basename "$file" .pre.h).h"
+ r "$RUBY" -e '
+ def args(n, &block) ;
+ Array.new(n) {|i| yield i+1} .join(", ") ;
+ end ;
+ src = File.read(ARGV[0]) ;
+ src.gsub!(/^MP_ARGS_BEGIN$(.*?)^MP_ARGS_END$/m) {|code| ;
+ result = [] ;
+ 1.upto(15) {|n| ;
+ line = code.split("\n")[1..-2].join("\n") ;
+ line.gsub!(/MP_ARGS_TEMPLATE/, args(n) {|i| "typename A#{i}" }) ;
+ line.gsub!(/MP_ARGS_PARAMS_PTR/, args(n) {|i| "A#{i}* a#{i}" }) ;
+ line.gsub!(/MP_ARGS_PARAMS_REF/, args(n) {|i| "A#{i}& a#{i}" }) ;
+ line.gsub!(/MP_ARGS_PARAMS/, args(n) {|i| "A#{i} a#{i}" }) ;
+ line.gsub!(/MP_ARGS_FUNC/, args(n) {|i| "a#{i}" }) ;
+ line.gsub!(/MP_ARGS_TYPES_PTR/, args(n) {|i| "A#{i}*" }) ;
+ line.gsub!(/MP_ARGS_TYPES_REF/, args(n) {|i| "A#{i}&" }) ;
+ line.gsub!(/MP_ARGS_TYPES/, args(n) {|i| "A#{i}" }) ;
+ line.gsub!(/MP_ARGS_ITERATOR_BEGIN$(.*?)^MP_ARGS_ITERATOR_END$/m) {|sub| ;
+ subresult = [] ;
+ subline = sub.split("\n")[1..-2].join("\n") ;
+ 1.upto(n) {|it| ;
+ sublineit = subline.dup ;
+ sublineit.gsub!(/MP_ARGS_ITERATOR_PARAM/, "a#{it}") ;
+ sublineit.gsub!(/MP_ARGS_ITERATOR_TYPE_PTR/, "A#{it}*") ;
+ sublineit.gsub!(/MP_ARGS_ITERATOR_TYPE_REF/, "A#{it}&") ;
+ sublineit.gsub!(/MP_ARGS_ITERATOR_TYPE/, "A#{it}") ;
+ sublineit.gsub!(/\[MP_ARGS_ITERATOR\]/, "#{it}" ) ;
+ if it == 1 ;
+ sublineit.gsub!(/MP_ARGS_ITERATOR_FIRST_COLON/, " " ) ;
+ else ;
+ sublineit.gsub!(/MP_ARGS_ITERATOR_FIRST_COLON/, "," ) ;
+ end ;
+ if it == n ;
+ sublineit.gsub!(/MP_ARGS_ITERATOR_LAST_COLON/, " " ) ;
+ else ;
+ sublineit.gsub!(/MP_ARGS_ITERATOR_LAST_COLON/, "," ) ;
+ end ;
+ subresult << sublineit ;
+ } ;
+ subresult.join("\n") ;
+ } ;
+ result << line ;
+ } ;
+ result.join("\n") ;
+ } ;
+ File.open(ARGV[1],"w") {|f| f.puts src }' "$file" "$out"
+ check_error $?
+}
+
+function pre_erb() {
+ file="$1"
+ out="$(dirname "$file")/$(basename "$file" .erb)"
+ echo "$ERB" "<" "$file" ">" "$out"
+ "$ERB" < "$file" > "$out"
+ check_error $?
+}
+
+pre_h src/mp/object_callback.pre.h
+pre_h src/mp/wavy/core.pre.h
+pre_h src/mp/wavy/singleton.pre.h
+
+pre_erb src/log/mlogger.h.erb
+pre_erb src/log/logpack.hpp.erb
+
+r "$RAGEL" -C src/gate/memproto/memtext.rl -o src/gate/memproto/memtext.c
+check_error $?
+
+cwd="$(pwd)"
+
+echo "cd $cwd/src/logic/gateway"
+cd src/logic/gateway && r "$RUBY" "$cwd/src/logic/protogen" ../gateway.proto.h
+check_error $?
+cd "$cwd"
+
+echo "cd $cwd/src/logic/manager"
+cd src/logic/manager && r "$RUBY" "$cwd/src/logic/protogen" ../manager.proto.h
+check_error $?
+cd "$cwd"
+
+echo "cd $cwd/src/logic/server"
+cd src/logic/server && r "$RUBY" "$cwd/src/logic/protogen" ../server.proto.h
+check_error $?
+cd "$cwd"
+
View
6 src/Makefile.am
@@ -1,10 +1,4 @@
-export ERB
-export RUBY
-export RAGEL
export REVISION
SUBDIRS = mp mpsrc log kazuhiki rpc storage gate logic command
-prep:
- cd gate && make prep
-
View
4 src/gate/Makefile.am
@@ -18,10 +18,6 @@ noinst_HEADERS = \
memcache_text.h \
cloudy.h
-prep: memproto/memtext.rl
- $(RAGEL) -C $< -o memproto/memtext.c.tmp
- mv memproto/memtext.c.tmp memproto/memtext.c
-
EXTRA_DIST = \
memproto/memtext.rl
View
84 src/gate/memproto/memtext.c
@@ -1,5 +1,5 @@
-#line 1 "memproto/memtext.rl"
+#line 1 "src/gate/memproto/memtext.rl"
/*
* memtext
*
@@ -56,12 +56,12 @@
TYPE NAME = ((TYPE*)(&ctx->callback))[ctx->command]
-#line 307 "memproto/memtext.rl"
+#line 307 "src/gate/memproto/memtext.rl"
-#line 65 "memproto/memtext.c.tmp"
+#line 65 "src/gate/memproto/memtext.c"
static const char _memtext_actions[] = {
0, 1, 0, 1, 1, 1, 2, 1,
4, 1, 5, 1, 6, 1, 7, 1,
@@ -290,20 +290,20 @@ static const int memtext_en_main = 1;
static const int memtext_en_data = 130;
-#line 311 "memproto/memtext.rl"
+#line 311 "src/gate/memproto/memtext.rl"
void memtext_init(memtext_parser* ctx, memtext_callback* callback, void* user)
{
int cs = 0;
int top = 0;
-#line 301 "memproto/memtext.c.tmp"
+#line 301 "src/gate/memproto/memtext.c"
{
cs = memtext_start;
top = 0;
}
-#line 317 "memproto/memtext.rl"
+#line 317 "src/gate/memproto/memtext.rl"
memset(ctx, 0, sizeof(memtext_parser));
ctx->cs = cs;
ctx->callback = *callback;
@@ -333,7 +333,7 @@ int memtext_execute(memtext_parser* ctx, const char* data, size_t len, size_t* o
//printf("\n");
-#line 337 "memproto/memtext.c.tmp"
+#line 337 "src/gate/memproto/memtext.c"
{
int _klen;
unsigned int _trans;
@@ -408,7 +408,7 @@ int memtext_execute(memtext_parser* ctx, const char* data, size_t len, size_t* o
switch ( *_acts++ )
{
case 0:
-#line 59 "memproto/memtext.rl"
+#line 59 "src/gate/memproto/memtext.rl"
{
ctx->keys = 0;
ctx->noreply = false;
@@ -416,19 +416,19 @@ int memtext_execute(memtext_parser* ctx, const char* data, size_t len, size_t* o
}
break;
case 1:
-#line 65 "memproto/memtext.rl"
+#line 65 "src/gate/memproto/memtext.rl"
{
MARK(key_pos[ctx->keys], p);
}
break;
case 2:
-#line 68 "memproto/memtext.rl"
+#line 68 "src/gate/memproto/memtext.rl"
{
SET_MARK_LEN(key_len[ctx->keys], key_pos[ctx->keys], p);
}
break;
case 3:
-#line 71 "memproto/memtext.rl"
+#line 71 "src/gate/memproto/memtext.rl"
{
++ctx->keys;
if(ctx->keys > MEMTEXT_MAX_MULTI_GET) {
@@ -437,61 +437,61 @@ int memtext_execute(memtext_parser* ctx, const char* data, size_t len, size_t* o
}
break;
case 4:
-#line 78 "memproto/memtext.rl"
+#line 78 "src/gate/memproto/memtext.rl"
{
MARK(flags, p);
}
break;
case 5:
-#line 81 "memproto/memtext.rl"
+#line 81 "src/gate/memproto/memtext.rl"
{
SET_UINT(flags, flags, p);
}
break;
case 6:
-#line 85 "memproto/memtext.rl"
+#line 85 "src/gate/memproto/memtext.rl"
{
MARK(exptime, p);
}
break;
case 7:
-#line 88 "memproto/memtext.rl"
+#line 88 "src/gate/memproto/memtext.rl"
{
SET_UINT(exptime, exptime, p);
}
break;
case 8:
-#line 92 "memproto/memtext.rl"
+#line 92 "src/gate/memproto/memtext.rl"
{
MARK(bytes, p);
}
break;
case 9:
-#line 95 "memproto/memtext.rl"
+#line 95 "src/gate/memproto/memtext.rl"
{
SET_UINT(bytes, bytes, p);
}
break;
case 10:
-#line 99 "memproto/memtext.rl"
+#line 99 "src/gate/memproto/memtext.rl"
{
ctx->noreply = true;
}
break;
case 11:
-#line 103 "memproto/memtext.rl"
+#line 103 "src/gate/memproto/memtext.rl"
{
MARK(cas_unique, p);
}
break;
case 12:
-#line 106 "memproto/memtext.rl"
+#line 106 "src/gate/memproto/memtext.rl"
{
SET_ULL(cas_unique, cas_unique, p);
}
break;
case 13:
-#line 110 "memproto/memtext.rl"
+#line 110 "src/gate/memproto/memtext.rl"
{
MARK(data_pos, p+1);
ctx->data_count = ctx->bytes;
@@ -499,7 +499,7 @@ int memtext_execute(memtext_parser* ctx, const char* data, size_t len, size_t* o
}
break;
case 14:
-#line 115 "memproto/memtext.rl"
+#line 115 "src/gate/memproto/memtext.rl"
{
if(--ctx->data_count == 0) {
//printf("mark %d\n", ctx->data_pos);
@@ -511,55 +511,55 @@ int memtext_execute(memtext_parser* ctx, const char* data, size_t len, size_t* o
}
break;
case 15:
-#line 126 "memproto/memtext.rl"
+#line 126 "src/gate/memproto/memtext.rl"
{ ctx->command = MEMTEXT_CMD_GET; }
break;
case 16:
-#line 127 "memproto/memtext.rl"
+#line 127 "src/gate/memproto/memtext.rl"
{ ctx->command = MEMTEXT_CMD_GETS; }
break;
case 17:
-#line 128 "memproto/memtext.rl"
+#line 128 "src/gate/memproto/memtext.rl"
{ ctx->command = MEMTEXT_CMD_SET; }
break;
case 18:
-#line 129 "memproto/memtext.rl"
+#line 129 "src/gate/memproto/memtext.rl"
{ ctx->command = MEMTEXT_CMD_ADD; }
break;
case 19:
-#line 130 "memproto/memtext.rl"
+#line 130 "src/gate/memproto/memtext.rl"
{ ctx->command = MEMTEXT_CMD_REPLACE; }
break;
case 20:
-#line 131 "memproto/memtext.rl"
+#line 131 "src/gate/memproto/memtext.rl"
{ ctx->command = MEMTEXT_CMD_APPEND; }
break;
case 21:
-#line 132 "memproto/memtext.rl"
+#line 132 "src/gate/memproto/memtext.rl"
{ ctx->command = MEMTEXT_CMD_PREPEND; }
break;
case 22:
-#line 133 "memproto/memtext.rl"
+#line 133 "src/gate/memproto/memtext.rl"
{ ctx->command = MEMTEXT_CMD_CAS; }
break;
case 23:
-#line 134 "memproto/memtext.rl"
+#line 134 "src/gate/memproto/memtext.rl"
{ ctx->command = MEMTEXT_CMD_DELETE; }
break;
case 24:
-#line 135 "memproto/memtext.rl"
+#line 135 "src/gate/memproto/memtext.rl"
{ ctx->command = MEMTEXT_CMD_INCR; }
break;
case 25:
-#line 136 "memproto/memtext.rl"
+#line 136 "src/gate/memproto/memtext.rl"
{ ctx->command = MEMTEXT_CMD_DECR; }
break;
case 26:
-#line 137 "memproto/memtext.rl"
+#line 137 "src/gate/memproto/memtext.rl"
{ ctx->command = MEMTEXT_CMD_VERSION; }
break;
case 27:
-#line 140 "memproto/memtext.rl"
+#line 140 "src/gate/memproto/memtext.rl"
{
unsigned int i;
++ctx->keys;
@@ -580,7 +580,7 @@ int memtext_execute(memtext_parser* ctx, const char* data, size_t len, size_t* o
}
break;
case 28:
-#line 159 "memproto/memtext.rl"
+#line 159 "src/gate/memproto/memtext.rl"
{
CALLBACK(cb, memtext_callback_storage);
if(cb) {
@@ -598,7 +598,7 @@ int memtext_execute(memtext_parser* ctx, const char* data, size_t len, size_t* o
}
break;
case 29:
-#line 175 "memproto/memtext.rl"
+#line 175 "src/gate/memproto/memtext.rl"
{
CALLBACK(cb, memtext_callback_cas);
if(cb) {
@@ -617,7 +617,7 @@ int memtext_execute(memtext_parser* ctx, const char* data, size_t len, size_t* o
}
break;
case 30:
-#line 192 "memproto/memtext.rl"
+#line 192 "src/gate/memproto/memtext.rl"
{
CALLBACK(cb, memtext_callback_delete);
if(cb) {
@@ -632,7 +632,7 @@ int memtext_execute(memtext_parser* ctx, const char* data, size_t len, size_t* o
}
break;
case 31:
-#line 205 "memproto/memtext.rl"
+#line 205 "src/gate/memproto/memtext.rl"
{
CALLBACK(cb, memtext_callback_numeric);
if(cb) {
@@ -647,7 +647,7 @@ int memtext_execute(memtext_parser* ctx, const char* data, size_t len, size_t* o
}
break;
case 32:
-#line 218 "memproto/memtext.rl"
+#line 218 "src/gate/memproto/memtext.rl"
{
CALLBACK(cb, memtext_callback_other);
if(cb) {
@@ -658,7 +658,7 @@ int memtext_execute(memtext_parser* ctx, const char* data, size_t len, size_t* o
} else { goto convert_error; }
}
break;
-#line 662 "memproto/memtext.c.tmp"
+#line 662 "src/gate/memproto/memtext.c"
}
}
@@ -671,7 +671,7 @@ int memtext_execute(memtext_parser* ctx, const char* data, size_t len, size_t* o
_out: {}
}
-#line 346 "memproto/memtext.rl"
+#line 346 "src/gate/memproto/memtext.rl"
ret:
ctx->cs = cs;
View
19 src/log/Makefile.am
@@ -1,7 +1,4 @@
-nodist_noinst_DATA = mlogger.h
-dist_noinst_DATA = mlogger.h.erb
-
noinst_LIBRARIES = libkumo_log.a
libkumo_log_a_SOURCES = \
@@ -13,17 +10,6 @@ libkumo_log_a_SOURCES = \
logpack.c \
logpacker.cc
-# FIXME GNU make extension
-%.h: %.h.erb
- $(ERB) < $< > $@.tmp
- mv $@.tmp $@
-
-%.hpp: %.hpp.erb
- $(ERB) < $< > $@.tmp
- mv $@.tmp $@
-
-MOSTLYCLEANFILES = mlogger.h logpack.hpp
-
noinst_HEADERS = \
mlogger.h \
mlogger_null.h \
@@ -34,5 +20,8 @@ noinst_HEADERS = \
logpack.hpp \
logpacker.h
-$(libkumo_log_a_SOURCES): mlogger.h logpack.hpp
+EXTRA_DIST = \
+ mlogger.h.erb \
+ logpack.hpp.erb
+
View
4 src/logic/Makefile.am
@@ -1,8 +1,4 @@
-export ERB
-export RUBY
-export RAGEL
-# work around for dependency
SUBDIRS = manager server gateway
noinst_LIBRARIES = libkumo_logic.a
View
12 src/logic/gateway/Makefile.am
@@ -3,16 +3,6 @@ PROTOGEN_AUTOGEN_FILES = \
proto.h \
mod_network.h
-proto.generated: ../protogen ../gateway.proto.h
- $(RUBY) ../protogen ../gateway.proto.h
- touch $@
-
-$(PROTOGEN_AUTOGEN_FILES): proto.generated
-
-nodist_noinst_HEADERS = \
+EXTRA_DIST = \
$(PROTOGEN_AUTOGEN_FILES)
-MOSTLYCLEANFILES = \
- $(PROTOGEN_AUTOGEN_FILES) \
- proto.generated
-
View
12 src/logic/manager/Makefile.am
@@ -5,16 +5,6 @@ PROTOGEN_AUTOGEN_FILES = \
mod_network.h \
mod_replace.h
-proto.generated: ../protogen ../manager.proto.h
- $(RUBY) ../protogen ../manager.proto.h
- touch $@
-
-$(PROTOGEN_AUTOGEN_FILES): proto.generated
-
-nodist_noinst_HEADERS = \
+EXTRA_DIST = \
$(PROTOGEN_AUTOGEN_FILES)
-MOSTLYCLEANFILES = \
- $(PROTOGEN_AUTOGEN_FILES) \
- proto.generated
-
View
12 src/logic/server/Makefile.am
@@ -7,16 +7,6 @@ PROTOGEN_AUTOGEN_FILES = \
mod_replace_stream.h \
mod_store.h
-proto.generated: ../protogen ../server.proto.h
- $(RUBY) ../protogen ../server.proto.h
- touch $@
-
-$(PROTOGEN_AUTOGEN_FILES): proto.generated
-
-nodist_noinst_HEADERS = \
+EXTRA_DIST = \
$(PROTOGEN_AUTOGEN_FILES)
-MOSTLYCLEANFILES = \
- $(PROTOGEN_AUTOGEN_FILES) \
- proto.generated
-
View
100 src/mp/Makefile.am
@@ -1,82 +1,26 @@
-NEED_PREPROCESS = \
- object_callback.h \
- wavy/core.h \
- wavy/singleton.h
-
-MOSTLYCLEANFILES = $(NEED_PREPROCESS)
-
-EXTRA_DIST = $(NEED_PREPROCESS)
+EXTRA_DIST = \
+ object_callback.pre.h \
+ wavy/core.pre.h \
+ wavy/singleton.pre.h
noinst_HEADERS = \
- exception.h \
- functional.h \
- memory.h \
- object_callback.h \
- pp.h \
- pthread.h \
- pthread_impl.h \
- shared_buffer.h \
- shared_buffer_impl.h \
- source.h \
- source_impl.h \
- stream_buffer.h \
- stream_buffer_impl.h \
- utility.h \
- wavy/core.h \
- wavy/output.h \
- wavy/singleton.h \
- wavy.h
-
-# FIXME GNU make extension
-%.h: %.pre.h
- $(RUBY) -e '\
- def args(n, &block) ;\
- Array.new(n) {|i| yield i+1} .join(", ") ;\
- end ;\
- src = ARGF.read ;\
- src.gsub!(/^MP_ARGS_BEGIN$$(.*?)^MP_ARGS_END$$/m) {|code| ;\
- result = [] ;\
- 1.upto(15) {|n| ;\
- line = code.split("\n")[1..-2].join("\n") ;\
- line.gsub!(/MP_ARGS_TEMPLATE/, args(n) {|i| "typename A#{i}" }) ;\
- line.gsub!(/MP_ARGS_PARAMS_PTR/, args(n) {|i| "A#{i}* a#{i}" }) ;\
- line.gsub!(/MP_ARGS_PARAMS_REF/, args(n) {|i| "A#{i}& a#{i}" }) ;\
- line.gsub!(/MP_ARGS_PARAMS/, args(n) {|i| "A#{i} a#{i}" }) ;\
- line.gsub!(/MP_ARGS_FUNC/, args(n) {|i| "a#{i}" }) ;\
- line.gsub!(/MP_ARGS_TYPES_PTR/, args(n) {|i| "A#{i}*" }) ;\
- line.gsub!(/MP_ARGS_TYPES_REF/, args(n) {|i| "A#{i}&" }) ;\
- line.gsub!(/MP_ARGS_TYPES/, args(n) {|i| "A#{i}" }) ;\
- line.gsub!(/MP_ARGS_ITERATOR_BEGIN$$(.*?)^MP_ARGS_ITERATOR_END$$/m) {|sub| ;\
- subresult = [] ;\
- subline = sub.split("\n")[1..-2].join("\n") ;\
- 1.upto(n) {|it| ;\
- sublineit = subline.dup ;\
- sublineit.gsub!(/MP_ARGS_ITERATOR_PARAM/, "a#{it}") ;\
- sublineit.gsub!(/MP_ARGS_ITERATOR_TYPE_PTR/, "A#{it}*") ;\
- sublineit.gsub!(/MP_ARGS_ITERATOR_TYPE_REF/, "A#{it}&") ;\
- sublineit.gsub!(/MP_ARGS_ITERATOR_TYPE/, "A#{it}") ;\
- sublineit.gsub!(/\[MP_ARGS_ITERATOR\]/, "#{it}" ) ;\
- if it == 1 ;\
- sublineit.gsub!(/MP_ARGS_ITERATOR_FIRST_COLON/, " " ) ;\
- else ;\
- sublineit.gsub!(/MP_ARGS_ITERATOR_FIRST_COLON/, "," ) ;\
- end ;\
- if it == n ;\
- sublineit.gsub!(/MP_ARGS_ITERATOR_LAST_COLON/, " " ) ;\
- else ;\
- sublineit.gsub!(/MP_ARGS_ITERATOR_LAST_COLON/, "," ) ;\
- end ;\
- subresult << sublineit ;\
- } ;\
- subresult.join("\n") ;\
- } ;\
- result << line ;\
- } ;\
- result.join("\n") ;\
- } ;\
- puts src' \
- $< > $@.tmp
- mv $@.tmp $@
-
+ exception.h \
+ functional.h \
+ memory.h \
+ object_callback.h \
+ pp.h \
+ pthread.h \
+ pthread_impl.h \
+ shared_buffer.h \
+ shared_buffer_impl.h \
+ source.h \
+ source_impl.h \
+ stream_buffer.h \
+ stream_buffer_impl.h \
+ utility.h \
+ wavy/core.h \
+ wavy/output.h \
+ wavy/singleton.h \
+ wavy.h
Please sign in to comment.
Something went wrong with that request. Please try again.