Browse Source

Merge branch 'master' of http://local.beijingyongan.com:3000/linux-dev/ya-serv

lixioayao 6 years ago
parent
commit
dd968b45b7
25 changed files with 632 additions and 1210 deletions
  1. 13 0
      .gitignore
  2. 10 12
      Makefile.am
  3. 0 961
      Makefile.in
  4. 21 1
      README.md
  5. 3 129
      ant.cpp
  6. 0 55
      ant.h
  7. 2 0
      c2.cpp
  8. 42 28
      card.cpp
  9. 4 6
      card.h
  10. 1 0
      clock.h
  11. 70 0
      crc.cpp
  12. 5 0
      crc.h
  13. 0 1
      libzlog.so
  14. 1 1
      line.h
  15. 159 0
      loc_tool.cpp
  16. 70 0
      loc_tool.h
  17. 0 1
      log.h
  18. 0 1
      logger
  19. 2 1
      main.cpp
  20. 9 5
      net-service.cpp
  21. 18 5
      point.h
  22. 57 0
      visit.cpp
  23. 22 0
      visit.h
  24. 3 3
      worker.cpp
  25. 120 0
      write-copy.h

+ 13 - 0
.gitignore

@@ -0,0 +1,13 @@
+.*
+*.o
+.deps/
+autom4te.cache/
+Makefile
+config.log
+config.status
+test
+yals
+async
+client
+
+

+ 10 - 12
Makefile.am

@@ -1,17 +1,17 @@
+bin_PROGRAMS=yals 
+noinst_PROGRAMS=client async test
 
-AM_SOURCES= ant.cpp ant.h base64.cpp base64.h card.cpp card.h clock.h \
-io_buf.h line.h log.h message.cpp message.h point.cpp \
-point.h tdoa_sync.cpp tdoa_sync.h web-client.cpp web-client.h worker.cpp worker.h zio.h \
-zloop.h znet.cpp znet.h zstream.h net-service.h net-service.cpp
+AM_SOURCES=ant.cpp ant.h card.cpp card.h clock.h \
+crc.cpp crc.h io_buf.h line.h loc_tool.cpp loc_tool.h message.cpp \
+message_file.h message.h net-service.cpp net-service.h point.cpp point.h tdoa_sync.cpp tdoa_sync.h \
+worker.cpp worker.h zio.h zloop.h znet.cpp znet.h zstream.h
 
-AM_CPPFLAGS=-Wall -pthread -m64 -std=c++11 -fPIC
-AM_LDFLAGS= -Wall -pthread -m64 -std=c++11 -fPIC
-
-bin_PROGRAMS=yals client async test
+AM_CPPFLAGS=-Wall -pthread -m64 -std=c++11 -fPIC -I${prefix}/include
+AM_LDFLAGS= -Wall -pthread -m64 -std=c++11 -fPIC -L${prefix}/lib 
 
 yals_SOURCES=${AM_SOURCES} main.cpp 
-yals_CPPFLAGS=${AM_CPPFLAGS}
-yals_LDFLAGS=${AM_LDFLAGS}  -L. -lzlog -lrt
+yals_CPPFLAGS=${AM_CPPFLAGS} 
+yals_LDFLAGS=${AM_LDFLAGS}  -lzlog -lrt
 
 async_SOURCES=async.cpp
 async_CPPFLAGS=${AM_CPPFLAGS}
@@ -28,5 +28,3 @@ test_LDFLAGS=${AM_LDFLAGS}  -L. -lzlog -lrt
 DEFS= 
 EXTRA_DIST=message_file.h 
 
-
-

+ 0 - 961
Makefile.in

@@ -1,961 +0,0 @@
-# Makefile.in generated by automake 1.12.3 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 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@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@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 = :
-bin_PROGRAMS = yals$(EXEEXT) client$(EXEEXT) async$(EXEEXT) \
-	test$(EXEEXT)
-subdir = .
-DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(top_srcdir)/configure COPYING INSTALL \
-	depcomp install-sh missing
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno config.status.lineno
-mkinstalldirs = $(install_sh) -d
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__installdirs = "$(DESTDIR)$(bindir)"
-PROGRAMS = $(bin_PROGRAMS)
-am_async_OBJECTS = async-async.$(OBJEXT)
-async_OBJECTS = $(am_async_OBJECTS)
-async_LDADD = $(LDADD)
-async_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(async_LDFLAGS) \
-	$(LDFLAGS) -o $@
-am_client_OBJECTS = client-client.$(OBJEXT) \
-	client-message_file.$(OBJEXT)
-client_OBJECTS = $(am_client_OBJECTS)
-client_LDADD = $(LDADD)
-client_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(client_LDFLAGS) \
-	$(LDFLAGS) -o $@
-am_test_OBJECTS = test-test.$(OBJEXT) test-base64.$(OBJEXT)
-test_OBJECTS = $(am_test_OBJECTS)
-test_LDADD = $(LDADD)
-test_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(test_LDFLAGS) \
-	$(LDFLAGS) -o $@
-am__objects_1 = yals-ant.$(OBJEXT) yals-base64.$(OBJEXT) \
-	yals-card.$(OBJEXT) yals-message.$(OBJEXT) \
-	yals-point.$(OBJEXT) yals-tdoa_sync.$(OBJEXT) \
-	yals-web-client.$(OBJEXT) yals-worker.$(OBJEXT) \
-	yals-znet.$(OBJEXT) yals-net-service.$(OBJEXT)
-am_yals_OBJECTS = $(am__objects_1) yals-main.$(OBJEXT)
-yals_OBJECTS = $(am_yals_OBJECTS)
-yals_LDADD = $(LDADD)
-yals_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(yals_LDFLAGS) \
-	$(LDFLAGS) -o $@
-DEFAULT_INCLUDES = -I.@am__isrc@
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-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 = $(async_SOURCES) $(client_SOURCES) $(test_SOURCES) \
-	$(yals_SOURCES)
-DIST_SOURCES = $(async_SOURCES) $(client_SOURCES) $(test_SOURCES) \
-	$(yals_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-CSCOPE = cscope
-AM_RECURSIVE_TARGETS = cscope
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
-am__remove_distdir = \
-  if test -d "$(distdir)"; then \
-    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-      && rm -rf "$(distdir)" \
-      || { sleep 5 && rm -rf "$(distdir)"; }; \
-  else :; fi
-am__post_remove_distdir = $(am__remove_distdir)
-DIST_ARCHIVES = $(distdir).tar.gz
-GZIP_ENV = --best
-DIST_TARGETS = dist-gzip
-distuninstallcheck_listfiles = find . -type f -print
-am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
-  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
-distcleancheck_listfiles = find . -type f -print
-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 = 
-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_URL = @PACKAGE_URL@
-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_SOURCES = ant.cpp ant.h base64.cpp base64.h card.cpp card.h clock.h \
-io_buf.h line.h log.h message.cpp message.h point.cpp \
-point.h tdoa_sync.cpp tdoa_sync.h web-client.cpp web-client.h worker.cpp worker.h zio.h \
-zloop.h znet.cpp znet.h zstream.h net-service.h net-service.cpp
-
-AM_CPPFLAGS = -Wall -pthread -m64 -std=c++11 -fPIC
-AM_LDFLAGS = -Wall -pthread -m64 -std=c++11 -fPIC
-yals_SOURCES = ${AM_SOURCES} main.cpp 
-yals_CPPFLAGS = ${AM_CPPFLAGS}
-yals_LDFLAGS = ${AM_LDFLAGS}  -L. -lzlog -lrt
-async_SOURCES = async.cpp
-async_CPPFLAGS = ${AM_CPPFLAGS}
-async_LDFLAGS = ${AM_LDFLAGS}  -L. -lzlog -lrt
-client_SOURCES = client.cpp message_file.cpp
-client_CPPFLAGS = ${AM_CPPFLAGS}
-client_LDFLAGS = ${AM_LDFLAGS}  -L. -lzlog
-test_SOURCES = test.cpp base64.cpp
-test_CPPFLAGS = ${AM_CPPFLAGS}
-test_LDFLAGS = ${AM_LDFLAGS}  -L. -lzlog -lrt
-EXTRA_DIST = message_file.h 
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .cpp .o .obj
-am--refresh: Makefile
-	@:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
-	      $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    echo ' $(SHELL) ./config.status'; \
-	    $(SHELL) ./config.status;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	$(SHELL) ./config.status --recheck
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	$(am__cd) $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
-$(am__aclocal_m4_deps):
-install-binPROGRAMS: $(bin_PROGRAMS)
-	@$(NORMAL_INSTALL)
-	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
-	if test -n "$$list"; then \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
-	fi; \
-	for p in $$list; do echo "$$p $$p"; done | \
-	sed 's/$(EXEEXT)$$//' | \
-	while read p p1; do if test -f $$p; \
-	  then echo "$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
-	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
-	sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
-	    else { print "f", $$3 "/" $$4, $$1; } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	    test -z "$$files" || { \
-	      echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
-	      $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
-	    } \
-	; done
-
-uninstall-binPROGRAMS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-	      -e 's/$$/$(EXEEXT)/' `; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(bindir)" && rm -f $$files
-
-clean-binPROGRAMS:
-	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
-async$(EXEEXT): $(async_OBJECTS) $(async_DEPENDENCIES) $(EXTRA_async_DEPENDENCIES) 
-	@rm -f async$(EXEEXT)
-	$(async_LINK) $(async_OBJECTS) $(async_LDADD) $(LIBS)
-client$(EXEEXT): $(client_OBJECTS) $(client_DEPENDENCIES) $(EXTRA_client_DEPENDENCIES) 
-	@rm -f client$(EXEEXT)
-	$(client_LINK) $(client_OBJECTS) $(client_LDADD) $(LIBS)
-test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) 
-	@rm -f test$(EXEEXT)
-	$(test_LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS)
-yals$(EXEEXT): $(yals_OBJECTS) $(yals_DEPENDENCIES) $(EXTRA_yals_DEPENDENCIES) 
-	@rm -f yals$(EXEEXT)
-	$(yals_LINK) $(yals_OBJECTS) $(yals_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/async-async.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/client-client.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/client-message_file.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-base64.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-test.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yals-ant.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yals-base64.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yals-card.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yals-main.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yals-message.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yals-net-service.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yals-point.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yals-tdoa_sync.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yals-web-client.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yals-worker.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yals-znet.Po@am__quote@
-
-.cpp.o:
-@am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCXX_TRUE@	$(am__mv) $(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:
-@am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCXX_TRUE@	$(am__mv) $(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) '$<'`
-
-async-async.o: async.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(async_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT async-async.o -MD -MP -MF $(DEPDIR)/async-async.Tpo -c -o async-async.o `test -f 'async.cpp' || echo '$(srcdir)/'`async.cpp
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/async-async.Tpo $(DEPDIR)/async-async.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='async.cpp' object='async-async.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(async_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o async-async.o `test -f 'async.cpp' || echo '$(srcdir)/'`async.cpp
-
-async-async.obj: async.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(async_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT async-async.obj -MD -MP -MF $(DEPDIR)/async-async.Tpo -c -o async-async.obj `if test -f 'async.cpp'; then $(CYGPATH_W) 'async.cpp'; else $(CYGPATH_W) '$(srcdir)/async.cpp'; fi`
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/async-async.Tpo $(DEPDIR)/async-async.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='async.cpp' object='async-async.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(async_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o async-async.obj `if test -f 'async.cpp'; then $(CYGPATH_W) 'async.cpp'; else $(CYGPATH_W) '$(srcdir)/async.cpp'; fi`
-
-client-client.o: client.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(client_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT client-client.o -MD -MP -MF $(DEPDIR)/client-client.Tpo -c -o client-client.o `test -f 'client.cpp' || echo '$(srcdir)/'`client.cpp
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/client-client.Tpo $(DEPDIR)/client-client.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='client.cpp' object='client-client.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(client_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o client-client.o `test -f 'client.cpp' || echo '$(srcdir)/'`client.cpp
-
-client-client.obj: client.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(client_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT client-client.obj -MD -MP -MF $(DEPDIR)/client-client.Tpo -c -o client-client.obj `if test -f 'client.cpp'; then $(CYGPATH_W) 'client.cpp'; else $(CYGPATH_W) '$(srcdir)/client.cpp'; fi`
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/client-client.Tpo $(DEPDIR)/client-client.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='client.cpp' object='client-client.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(client_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o client-client.obj `if test -f 'client.cpp'; then $(CYGPATH_W) 'client.cpp'; else $(CYGPATH_W) '$(srcdir)/client.cpp'; fi`
-
-client-message_file.o: message_file.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(client_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT client-message_file.o -MD -MP -MF $(DEPDIR)/client-message_file.Tpo -c -o client-message_file.o `test -f 'message_file.cpp' || echo '$(srcdir)/'`message_file.cpp
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/client-message_file.Tpo $(DEPDIR)/client-message_file.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='message_file.cpp' object='client-message_file.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(client_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o client-message_file.o `test -f 'message_file.cpp' || echo '$(srcdir)/'`message_file.cpp
-
-client-message_file.obj: message_file.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(client_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT client-message_file.obj -MD -MP -MF $(DEPDIR)/client-message_file.Tpo -c -o client-message_file.obj `if test -f 'message_file.cpp'; then $(CYGPATH_W) 'message_file.cpp'; else $(CYGPATH_W) '$(srcdir)/message_file.cpp'; fi`
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/client-message_file.Tpo $(DEPDIR)/client-message_file.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='message_file.cpp' object='client-message_file.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(client_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o client-message_file.obj `if test -f 'message_file.cpp'; then $(CYGPATH_W) 'message_file.cpp'; else $(CYGPATH_W) '$(srcdir)/message_file.cpp'; fi`
-
-test-test.o: test.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test-test.o -MD -MP -MF $(DEPDIR)/test-test.Tpo -c -o test-test.o `test -f 'test.cpp' || echo '$(srcdir)/'`test.cpp
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/test-test.Tpo $(DEPDIR)/test-test.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='test.cpp' object='test-test.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test-test.o `test -f 'test.cpp' || echo '$(srcdir)/'`test.cpp
-
-test-test.obj: test.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test-test.obj -MD -MP -MF $(DEPDIR)/test-test.Tpo -c -o test-test.obj `if test -f 'test.cpp'; then $(CYGPATH_W) 'test.cpp'; else $(CYGPATH_W) '$(srcdir)/test.cpp'; fi`
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/test-test.Tpo $(DEPDIR)/test-test.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='test.cpp' object='test-test.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test-test.obj `if test -f 'test.cpp'; then $(CYGPATH_W) 'test.cpp'; else $(CYGPATH_W) '$(srcdir)/test.cpp'; fi`
-
-test-base64.o: base64.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test-base64.o -MD -MP -MF $(DEPDIR)/test-base64.Tpo -c -o test-base64.o `test -f 'base64.cpp' || echo '$(srcdir)/'`base64.cpp
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/test-base64.Tpo $(DEPDIR)/test-base64.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='base64.cpp' object='test-base64.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test-base64.o `test -f 'base64.cpp' || echo '$(srcdir)/'`base64.cpp
-
-test-base64.obj: base64.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test-base64.obj -MD -MP -MF $(DEPDIR)/test-base64.Tpo -c -o test-base64.obj `if test -f 'base64.cpp'; then $(CYGPATH_W) 'base64.cpp'; else $(CYGPATH_W) '$(srcdir)/base64.cpp'; fi`
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/test-base64.Tpo $(DEPDIR)/test-base64.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='base64.cpp' object='test-base64.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test-base64.obj `if test -f 'base64.cpp'; then $(CYGPATH_W) 'base64.cpp'; else $(CYGPATH_W) '$(srcdir)/base64.cpp'; fi`
-
-yals-ant.o: ant.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-ant.o -MD -MP -MF $(DEPDIR)/yals-ant.Tpo -c -o yals-ant.o `test -f 'ant.cpp' || echo '$(srcdir)/'`ant.cpp
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-ant.Tpo $(DEPDIR)/yals-ant.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ant.cpp' object='yals-ant.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-ant.o `test -f 'ant.cpp' || echo '$(srcdir)/'`ant.cpp
-
-yals-ant.obj: ant.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-ant.obj -MD -MP -MF $(DEPDIR)/yals-ant.Tpo -c -o yals-ant.obj `if test -f 'ant.cpp'; then $(CYGPATH_W) 'ant.cpp'; else $(CYGPATH_W) '$(srcdir)/ant.cpp'; fi`
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-ant.Tpo $(DEPDIR)/yals-ant.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='ant.cpp' object='yals-ant.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-ant.obj `if test -f 'ant.cpp'; then $(CYGPATH_W) 'ant.cpp'; else $(CYGPATH_W) '$(srcdir)/ant.cpp'; fi`
-
-yals-base64.o: base64.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-base64.o -MD -MP -MF $(DEPDIR)/yals-base64.Tpo -c -o yals-base64.o `test -f 'base64.cpp' || echo '$(srcdir)/'`base64.cpp
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-base64.Tpo $(DEPDIR)/yals-base64.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='base64.cpp' object='yals-base64.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-base64.o `test -f 'base64.cpp' || echo '$(srcdir)/'`base64.cpp
-
-yals-base64.obj: base64.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-base64.obj -MD -MP -MF $(DEPDIR)/yals-base64.Tpo -c -o yals-base64.obj `if test -f 'base64.cpp'; then $(CYGPATH_W) 'base64.cpp'; else $(CYGPATH_W) '$(srcdir)/base64.cpp'; fi`
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-base64.Tpo $(DEPDIR)/yals-base64.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='base64.cpp' object='yals-base64.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-base64.obj `if test -f 'base64.cpp'; then $(CYGPATH_W) 'base64.cpp'; else $(CYGPATH_W) '$(srcdir)/base64.cpp'; fi`
-
-yals-card.o: card.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-card.o -MD -MP -MF $(DEPDIR)/yals-card.Tpo -c -o yals-card.o `test -f 'card.cpp' || echo '$(srcdir)/'`card.cpp
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-card.Tpo $(DEPDIR)/yals-card.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='card.cpp' object='yals-card.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-card.o `test -f 'card.cpp' || echo '$(srcdir)/'`card.cpp
-
-yals-card.obj: card.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-card.obj -MD -MP -MF $(DEPDIR)/yals-card.Tpo -c -o yals-card.obj `if test -f 'card.cpp'; then $(CYGPATH_W) 'card.cpp'; else $(CYGPATH_W) '$(srcdir)/card.cpp'; fi`
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-card.Tpo $(DEPDIR)/yals-card.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='card.cpp' object='yals-card.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-card.obj `if test -f 'card.cpp'; then $(CYGPATH_W) 'card.cpp'; else $(CYGPATH_W) '$(srcdir)/card.cpp'; fi`
-
-yals-message.o: message.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-message.o -MD -MP -MF $(DEPDIR)/yals-message.Tpo -c -o yals-message.o `test -f 'message.cpp' || echo '$(srcdir)/'`message.cpp
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-message.Tpo $(DEPDIR)/yals-message.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='message.cpp' object='yals-message.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-message.o `test -f 'message.cpp' || echo '$(srcdir)/'`message.cpp
-
-yals-message.obj: message.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-message.obj -MD -MP -MF $(DEPDIR)/yals-message.Tpo -c -o yals-message.obj `if test -f 'message.cpp'; then $(CYGPATH_W) 'message.cpp'; else $(CYGPATH_W) '$(srcdir)/message.cpp'; fi`
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-message.Tpo $(DEPDIR)/yals-message.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='message.cpp' object='yals-message.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-message.obj `if test -f 'message.cpp'; then $(CYGPATH_W) 'message.cpp'; else $(CYGPATH_W) '$(srcdir)/message.cpp'; fi`
-
-yals-point.o: point.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-point.o -MD -MP -MF $(DEPDIR)/yals-point.Tpo -c -o yals-point.o `test -f 'point.cpp' || echo '$(srcdir)/'`point.cpp
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-point.Tpo $(DEPDIR)/yals-point.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='point.cpp' object='yals-point.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-point.o `test -f 'point.cpp' || echo '$(srcdir)/'`point.cpp
-
-yals-point.obj: point.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-point.obj -MD -MP -MF $(DEPDIR)/yals-point.Tpo -c -o yals-point.obj `if test -f 'point.cpp'; then $(CYGPATH_W) 'point.cpp'; else $(CYGPATH_W) '$(srcdir)/point.cpp'; fi`
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-point.Tpo $(DEPDIR)/yals-point.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='point.cpp' object='yals-point.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-point.obj `if test -f 'point.cpp'; then $(CYGPATH_W) 'point.cpp'; else $(CYGPATH_W) '$(srcdir)/point.cpp'; fi`
-
-yals-tdoa_sync.o: tdoa_sync.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-tdoa_sync.o -MD -MP -MF $(DEPDIR)/yals-tdoa_sync.Tpo -c -o yals-tdoa_sync.o `test -f 'tdoa_sync.cpp' || echo '$(srcdir)/'`tdoa_sync.cpp
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-tdoa_sync.Tpo $(DEPDIR)/yals-tdoa_sync.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='tdoa_sync.cpp' object='yals-tdoa_sync.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-tdoa_sync.o `test -f 'tdoa_sync.cpp' || echo '$(srcdir)/'`tdoa_sync.cpp
-
-yals-tdoa_sync.obj: tdoa_sync.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-tdoa_sync.obj -MD -MP -MF $(DEPDIR)/yals-tdoa_sync.Tpo -c -o yals-tdoa_sync.obj `if test -f 'tdoa_sync.cpp'; then $(CYGPATH_W) 'tdoa_sync.cpp'; else $(CYGPATH_W) '$(srcdir)/tdoa_sync.cpp'; fi`
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-tdoa_sync.Tpo $(DEPDIR)/yals-tdoa_sync.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='tdoa_sync.cpp' object='yals-tdoa_sync.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-tdoa_sync.obj `if test -f 'tdoa_sync.cpp'; then $(CYGPATH_W) 'tdoa_sync.cpp'; else $(CYGPATH_W) '$(srcdir)/tdoa_sync.cpp'; fi`
-
-yals-web-client.o: web-client.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-web-client.o -MD -MP -MF $(DEPDIR)/yals-web-client.Tpo -c -o yals-web-client.o `test -f 'web-client.cpp' || echo '$(srcdir)/'`web-client.cpp
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-web-client.Tpo $(DEPDIR)/yals-web-client.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='web-client.cpp' object='yals-web-client.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-web-client.o `test -f 'web-client.cpp' || echo '$(srcdir)/'`web-client.cpp
-
-yals-web-client.obj: web-client.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-web-client.obj -MD -MP -MF $(DEPDIR)/yals-web-client.Tpo -c -o yals-web-client.obj `if test -f 'web-client.cpp'; then $(CYGPATH_W) 'web-client.cpp'; else $(CYGPATH_W) '$(srcdir)/web-client.cpp'; fi`
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-web-client.Tpo $(DEPDIR)/yals-web-client.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='web-client.cpp' object='yals-web-client.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-web-client.obj `if test -f 'web-client.cpp'; then $(CYGPATH_W) 'web-client.cpp'; else $(CYGPATH_W) '$(srcdir)/web-client.cpp'; fi`
-
-yals-worker.o: worker.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-worker.o -MD -MP -MF $(DEPDIR)/yals-worker.Tpo -c -o yals-worker.o `test -f 'worker.cpp' || echo '$(srcdir)/'`worker.cpp
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-worker.Tpo $(DEPDIR)/yals-worker.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='worker.cpp' object='yals-worker.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-worker.o `test -f 'worker.cpp' || echo '$(srcdir)/'`worker.cpp
-
-yals-worker.obj: worker.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-worker.obj -MD -MP -MF $(DEPDIR)/yals-worker.Tpo -c -o yals-worker.obj `if test -f 'worker.cpp'; then $(CYGPATH_W) 'worker.cpp'; else $(CYGPATH_W) '$(srcdir)/worker.cpp'; fi`
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-worker.Tpo $(DEPDIR)/yals-worker.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='worker.cpp' object='yals-worker.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-worker.obj `if test -f 'worker.cpp'; then $(CYGPATH_W) 'worker.cpp'; else $(CYGPATH_W) '$(srcdir)/worker.cpp'; fi`
-
-yals-znet.o: znet.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-znet.o -MD -MP -MF $(DEPDIR)/yals-znet.Tpo -c -o yals-znet.o `test -f 'znet.cpp' || echo '$(srcdir)/'`znet.cpp
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-znet.Tpo $(DEPDIR)/yals-znet.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='znet.cpp' object='yals-znet.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-znet.o `test -f 'znet.cpp' || echo '$(srcdir)/'`znet.cpp
-
-yals-znet.obj: znet.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-znet.obj -MD -MP -MF $(DEPDIR)/yals-znet.Tpo -c -o yals-znet.obj `if test -f 'znet.cpp'; then $(CYGPATH_W) 'znet.cpp'; else $(CYGPATH_W) '$(srcdir)/znet.cpp'; fi`
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-znet.Tpo $(DEPDIR)/yals-znet.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='znet.cpp' object='yals-znet.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-znet.obj `if test -f 'znet.cpp'; then $(CYGPATH_W) 'znet.cpp'; else $(CYGPATH_W) '$(srcdir)/znet.cpp'; fi`
-
-yals-net-service.o: net-service.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-net-service.o -MD -MP -MF $(DEPDIR)/yals-net-service.Tpo -c -o yals-net-service.o `test -f 'net-service.cpp' || echo '$(srcdir)/'`net-service.cpp
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-net-service.Tpo $(DEPDIR)/yals-net-service.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='net-service.cpp' object='yals-net-service.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-net-service.o `test -f 'net-service.cpp' || echo '$(srcdir)/'`net-service.cpp
-
-yals-net-service.obj: net-service.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-net-service.obj -MD -MP -MF $(DEPDIR)/yals-net-service.Tpo -c -o yals-net-service.obj `if test -f 'net-service.cpp'; then $(CYGPATH_W) 'net-service.cpp'; else $(CYGPATH_W) '$(srcdir)/net-service.cpp'; fi`
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-net-service.Tpo $(DEPDIR)/yals-net-service.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='net-service.cpp' object='yals-net-service.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-net-service.obj `if test -f 'net-service.cpp'; then $(CYGPATH_W) 'net-service.cpp'; else $(CYGPATH_W) '$(srcdir)/net-service.cpp'; fi`
-
-yals-main.o: main.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-main.o -MD -MP -MF $(DEPDIR)/yals-main.Tpo -c -o yals-main.o `test -f 'main.cpp' || echo '$(srcdir)/'`main.cpp
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-main.Tpo $(DEPDIR)/yals-main.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='main.cpp' object='yals-main.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-main.o `test -f 'main.cpp' || echo '$(srcdir)/'`main.cpp
-
-yals-main.obj: main.cpp
-@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-main.obj -MD -MP -MF $(DEPDIR)/yals-main.Tpo -c -o yals-main.obj `if test -f 'main.cpp'; then $(CYGPATH_W) 'main.cpp'; else $(CYGPATH_W) '$(srcdir)/main.cpp'; fi`
-@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-main.Tpo $(DEPDIR)/yals-main.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='main.cpp' object='yals-main.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-main.obj `if test -f 'main.cpp'; then $(CYGPATH_W) 'main.cpp'; else $(CYGPATH_W) '$(srcdir)/main.cpp'; fi`
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscope: cscope.files
-	test ! -s cscope.files \
-	  || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
-
-clean-cscope:
-	-rm -f cscope.files
-
-cscope.files: clean-cscope  cscopelist
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
-
-distdir: $(DISTFILES)
-	$(am__remove_distdir)
-	test -d "$(distdir)" || mkdir "$(distdir)"
-	@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 "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	-test -n "$(am__skip_mode_fix)" \
-	|| find "$(distdir)" -type d ! -perm -755 \
-		-exec chmod u+rwx,go+rx {} \; -o \
-	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
-	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
-	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
-	|| chmod -R a+r "$(distdir)"
-dist-gzip: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-	$(am__post_remove_distdir)
-
-dist-bzip2: distdir
-	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
-	$(am__post_remove_distdir)
-
-dist-lzip: distdir
-	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
-	$(am__post_remove_distdir)
-
-dist-xz: distdir
-	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
-	$(am__post_remove_distdir)
-
-dist-tarZ: distdir
-	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
-	$(am__post_remove_distdir)
-
-dist-shar: distdir
-	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-	$(am__post_remove_distdir)
-
-dist-zip: distdir
-	-rm -f $(distdir).zip
-	zip -rq $(distdir).zip $(distdir)
-	$(am__post_remove_distdir)
-
-dist dist-all:
-	$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
-	$(am__post_remove_distdir)
-
-# This target untars the dist file and tries a VPATH configuration.  Then
-# it guarantees that the distribution is self-contained by making another
-# tarfile.
-distcheck: dist
-	case '$(DIST_ARCHIVES)' in \
-	*.tar.gz*) \
-	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
-	*.tar.bz2*) \
-	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
-	*.tar.lz*) \
-	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
-	*.tar.xz*) \
-	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
-	*.tar.Z*) \
-	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
-	*.shar.gz*) \
-	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
-	*.zip*) \
-	  unzip $(distdir).zip ;;\
-	esac
-	chmod -R a-w $(distdir)
-	chmod u+w $(distdir)
-	mkdir $(distdir)/_build $(distdir)/_inst
-	chmod a-w $(distdir)
-	test -d $(distdir)/_build || exit 0; \
-	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
-	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
-	  && am__cwd=`pwd` \
-	  && $(am__cd) $(distdir)/_build \
-	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
-	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
-	    $(DISTCHECK_CONFIGURE_FLAGS) \
-	  && $(MAKE) $(AM_MAKEFLAGS) \
-	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
-	  && $(MAKE) $(AM_MAKEFLAGS) check \
-	  && $(MAKE) $(AM_MAKEFLAGS) install \
-	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
-	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
-	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
-	        distuninstallcheck \
-	  && chmod -R a-w "$$dc_install_base" \
-	  && ({ \
-	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
-	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
-	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
-	  && rm -rf "$$dc_destdir" \
-	  && $(MAKE) $(AM_MAKEFLAGS) dist \
-	  && rm -rf $(DIST_ARCHIVES) \
-	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
-	  && cd "$$am__cwd" \
-	  || exit 1
-	$(am__post_remove_distdir)
-	@(echo "$(distdir) archives ready for distribution: "; \
-	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
-	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
-distuninstallcheck:
-	@test -n '$(distuninstallcheck_dir)' || { \
-	  echo 'ERROR: trying to run $@ with an empty' \
-	       '$$(distuninstallcheck_dir)' >&2; \
-	  exit 1; \
-	}; \
-	$(am__cd) '$(distuninstallcheck_dir)' || { \
-	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
-	  exit 1; \
-	}; \
-	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
-	   || { echo "ERROR: files left after uninstall:" ; \
-	        if test -n "$(DESTDIR)"; then \
-	          echo "  (check DESTDIR support)"; \
-	        fi ; \
-	        $(distuninstallcheck_listfiles) ; \
-	        exit 1; } >&2
-distcleancheck: distclean
-	@if test '$(srcdir)' = . ; then \
-	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
-	  exit 1 ; \
-	fi
-	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
-	  || { echo "ERROR: files left in build directory after distclean:" ; \
-	       $(distcleancheck_listfiles) ; \
-	       exit 1; } >&2
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-	for dir in "$(DESTDIR)$(bindir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-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:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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-binPROGRAMS clean-generic mostlyclean-am
-
-distclean: distclean-am
-	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am: install-binPROGRAMS
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -rf $(top_srcdir)/autom4te.cache
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-binPROGRAMS
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
-	clean-binPROGRAMS clean-cscope clean-generic cscope cscopelist \
-	ctags dist dist-all dist-bzip2 dist-gzip dist-lzip dist-shar \
-	dist-tarZ dist-xz dist-zip distcheck distclean \
-	distclean-compile distclean-generic distclean-tags \
-	distcleancheck distdir distuninstallcheck dvi dvi-am html \
-	html-am info info-am install install-am install-binPROGRAMS \
-	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-compile \
-	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
-	uninstall-am uninstall-binPROGRAMS
-
-
-# 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:

+ 21 - 1
README.md

@@ -1,3 +1,23 @@
+#The file encoding by utf8
+
+export LANG==zh_CN.utf8
+
+
 # ya-serv
 
-采集服务的 linux 版本
+采集服务的 linux 版本
+
+
+~/.bash_profile
+# Begin ~/.bash_profile
+if [ -f "$HOME/.bashrc" ] ; then
+  source $HOME/.bashrc
+  fi
+
+  export LANG=zh_CN.utf8
+  export LD_LIBRARY_PATH=.
+
+  unset append
+  set -o vi
+
+

+ 3 - 129
ant.cpp

@@ -2,7 +2,9 @@
 #include <stdio.h>
 #include <string.h>
 #include <math.h>
-#include "ant.h"
+#include <message.h>
+#include <ant.h>
+#include <log.h>
 
 int ant::index()const
 {
@@ -32,134 +34,6 @@ int loc_message::tool_index()const
 	return m_ant->index();
 }
 
-
-std::vector<point> loc_tool_tdoa_3_base::calc_location(const std::vector<loc_message>&locm)
-{
-	return std::vector<point>();
-}
-int loc_tool_tdoa_3_base::index() 
-{
-	return 5;
-}
-
-std::vector<point> loc_tool_tdoa_2_base::calc_location(const std::vector<loc_message>&locm)
-{
-	return std::vector<point>();
-}
-int loc_tool_tdoa_2_base::index() 
-{
-	return 3;
-}
-
-std::vector<point> loc_tool_tdoa_1_base::calc_location(const std::vector<loc_message>&locm)
-{
-	return std::vector<point>();
-}
-int loc_tool_tdoa_1_base::index() 
-{
-	return 1;
-}
-
-std::vector<point> loc_tool_tof_3_base::calc_location(const std::vector<loc_message>&locm)
-{
-	return std::vector<point>();
-}
-int loc_tool_tof_3_base::index() 
-{
-	return 4;
-}
-
-std::vector<point> loc_tool_tof_2_base::calc_location(const std::vector<loc_message>&locm)
-{
-	return std::vector<point>();
-}
-int loc_tool_tof_2_base::index() 
-{
-	return 2;
-}
-
-
-std::vector<point> loc_tool_tof_1_base::calc_location(const std::vector<loc_message>&locm)
-{
-	return std::vector<point>();
-}
-int loc_tool_tof_1_base::index() 
-{
-	return 0;
-}
-
-loc_tool_main::loc_tool_main()
-{
-	set_tool(new loc_tool_tof_1_base());
-	set_tool(new loc_tool_tof_2_base());
-	set_tool(new loc_tool_tof_3_base());
-	set_tool(new loc_tool_tdoa_1_base());
-	set_tool(new loc_tool_tdoa_2_base());
-	set_tool(new loc_tool_tdoa_3_base());
-}
-
-loc_tool_main::~loc_tool_main()
-{
-	for(auto&tool:g_tool)
-		delete tool;
-}
-
-void loc_tool_main::set_tool(loc_tool*tool)
-{
-	int index=tool->index();
-	if(g_tool[index])
-	{
-		delete g_tool[index];
-		g_tool[index]=0;
-	}
-	g_tool[index]=tool;
-}
-
-std::vector<point> loc_tool_main::calc_location(const std::vector<loc_message>&locm)
-{
-	if(locm.empty()) return {};
-	int tool_index=locm[0].tool_index(),i=1,len=locm.size();
-	for(;i<len;i++)
-	{
-		if(tool_index!=locm[i].tool_index())
-			break;
-	}
-
-	if(i==len)
-	{
-		return std::move(g_tool[tool_index]->calc_location(locm));
-	}
-
-	//包含至少两种定位方式的基站,目前只考虑两种
-	std::vector<loc_message> locm1,locm2;
-	locm1.assign(locm.begin(),locm.begin()+i);
-
-	for(;i<len;i++)
-	{
-		if(tool_index!=locm[i].tool_index())
-			locm2.push_back(locm[i]);
-		else
-			locm1.push_back(locm[i]);
-	}
-
-	std::vector<point> rc;
-	if(locm1[0].m_ant->config().best_msg_cnt<=(int)locm1.size())
-	{
-		rc=std::move(g_tool[tool_index]->calc_location(locm1));
-	}
-
-	if(locm1[1].m_ant->config().best_msg_cnt<=(int)locm2.size())
-	{
-		int index=locm2[0].tool_index();
-		auto v=std::move(g_tool[index]->calc_location(locm2));
-		rc.insert(rc.begin(),v.begin(),v.end());
-	}
-
-	return std::move(rc);
-}
-
-loc_tool* loc_tool_main::g_tool[6]={0,0,0,0,0,0};
-
 algo_config ant::g_config[]=
 {
 	{ "tof-1",  1, 2, 100, 1000 },

+ 0 - 55
ant.h

@@ -89,60 +89,5 @@ struct loc_message
 	int tool_index()const;
 };
 
-struct loc_tool
-{
-	virtual std::vector<point> calc_location(const std::vector<loc_message>&locm)=0;
-	virtual int index()
-	{
-		return -1;
-	}
-	virtual ~loc_tool(){}
-};
-
-struct loc_tool_tdoa_3_base:loc_tool
-{
-	virtual std::vector<point> calc_location(const std::vector<loc_message>&locm);
-	virtual int index();
-};
-
-struct loc_tool_tdoa_2_base:loc_tool
-{
-	virtual std::vector<point> calc_location(const std::vector<loc_message>&locm);
-	virtual int index();
-};
-
-struct loc_tool_tdoa_1_base:loc_tool
-{
-	virtual std::vector<point> calc_location(const std::vector<loc_message>&locm);
-	virtual int index();
-};
-
-struct loc_tool_tof_3_base:loc_tool
-{
-	virtual std::vector<point> calc_location(const std::vector<loc_message>&locm);
-	virtual int index();
-};
-
-struct loc_tool_tof_2_base:loc_tool
-{
-	virtual std::vector<point> calc_location(const std::vector<loc_message>&locm);
-	virtual int index();
-};
-
-struct loc_tool_tof_1_base:loc_tool
-{
-	virtual std::vector<point> calc_location(const std::vector<loc_message>&locm);
-	virtual int index();
-};
-
-struct loc_tool_main:loc_tool
-{
-	static loc_tool* g_tool[6];
-	loc_tool_main();
-	~loc_tool_main();
-	static void set_tool(loc_tool*tool);
-	std::vector<point> calc_location(const std::vector<loc_message>&locm);
-};
-
 #endif
 

+ 2 - 0
c2.cpp

@@ -124,3 +124,5 @@ struct person_card:card
 	}
 };
 
+
+

+ 42 - 28
card.cpp

@@ -4,6 +4,8 @@
 #include <card.h>
 #include <zloop.h>
 #include <ev++.h>
+#include <message.h>
+#include <loc_tool.h>
 
 struct card_location_base
 {
@@ -21,15 +23,10 @@ struct one_ct_message_handle
 	const algo_config*m_ac=nullptr;
 	int  m_ct;
 	bool m_min_timeout=false;
-	one_ct_message_handle(ev::dynamic_loop&loop,card_location_base*card)
+	one_ct_message_handle(card_location_base*card)
 	{
 		m_card=card;
 		m_ct=-1;
-
-		m_min_timer.set(loop);
-		m_min_timer.set<one_ct_message_handle,&one_ct_message_handle::on_min_timer>(this);
-		m_max_timer.set(loop);
-		m_max_timer.set<one_ct_message_handle,&one_ct_message_handle::on_max_timer>(this);
 	}
 
 	void reset()
@@ -59,12 +56,32 @@ struct one_ct_message_handle
 		calc_location();
 	}
 
-	void on_message(const message_locinfo&loc)
+	bool once_flag=false;
+	void once_init(ev::dynamic_loop&loop)
 	{
+		if(once_flag) 
+			return;
+
+		once_flag=true;
+		m_min_timer.set(loop);
+		m_min_timer.set<one_ct_message_handle,&one_ct_message_handle::on_min_timer>(this);
+		m_max_timer.set(loop);
+		m_max_timer.set<one_ct_message_handle,&one_ct_message_handle::on_max_timer>(this);
+	}
+
+	void on_message(ev::dynamic_loop&loop, const message_locinfo&loc)
+	{
+		once_init(loop);
+
 		if(!m_msg_list.empty()&& m_ct!=loc.m_card_ct)
+		{
 			m_msg_list.clear();
+		}
+
 
 		ant*a=ant_list::instance()->get(loc.m_site_id, loc.m_ant_id);
+
+		m_loc_tool.on_loc_message(a, loc);
 		if(m_msg_list.empty())
 		{
 			m_ct=loc.m_card_ct;
@@ -104,17 +121,17 @@ struct card_message_handle
 	std::vector<loc_message> m_msg_list;
 	std::array<one_ct_message_handle*,16> m_ct_list;
 
-	card_message_handle(zloop_base&loop,card_location_base*card)
+	card_message_handle(card_location_base*card)
 	{
 		m_card=card;
 
 		for(size_t i=0;i<m_ct_list.size();i++)
 		{
-			m_ct_list[i]=new one_ct_message_handle(loop,card);
+			m_ct_list[i]=new one_ct_message_handle(card);
 		}
 	}
 
-	void on_message(const message_locinfo&loc,bool is_history)
+	void on_message(ev::dynamic_loop&loop, const message_locinfo&loc,bool is_history)
 	{
 		if(is_history)
 		{
@@ -122,44 +139,44 @@ struct card_message_handle
 			return;
 		}
 
-		m_ct_list[loc.m_card_ct&(m_ct_list.size()-1)]->on_message(loc);
+		m_ct_list[loc.m_card_ct&(m_ct_list.size()-1)]->on_message(loop, loc);
 	}
 };
 
 struct card:card_location_base
 {
 	card_message_handle m_message_handle;
-	card(zloop_base&loop)
-		:m_message_handle(loop,this)
+
+	card()
+		:m_message_handle(this)
 	{
 	}
 
-	void on_message(const message_locinfo&loc,bool is_history)
+	~card()
 	{
-		m_message_handle.on_message(loc,is_history);
 	}
 
-	void on_location(const std::vector<point>&points)
+	void on_message(ev::dynamic_loop&loop, const message_locinfo&loc,bool is_history)
 	{
+		m_message_handle.on_message(loop, loc, is_history);
 	}
 
-	~card(){}
+	void on_location(const std::vector<point>&points)
+	{
+	}
 };
 
 loc_tool_main one_ct_message_handle::m_loc_tool;
 struct card_list_impl:card_list
 {
-	zloop<task*>&m_loop;
 	std::vector<card*> m_list;
-	card_list_impl(zloop<task*>&loop)
-		:m_loop(loop)
+	card_list_impl()
 	{
 		m_list.reserve(1<<16);
 	}
 
 	void init_card_from_db()
 	{
-		card _(m_loop);
 	}
 
 	card*get(uint64_t card_id)const
@@ -172,7 +189,7 @@ struct card_list_impl:card_list
 		return m_list[cid];
 	}
 
-	void on_message(const message_locinfo&loc,bool is_history)
+	void on_message(ev::dynamic_loop&loop, const message_locinfo&loc,bool is_history)
 	{
 		card*c=get(loc.m_card_id);
 
@@ -182,16 +199,13 @@ struct card_list_impl:card_list
 			return;
 		}
 
-		log_info("card message:site=%d,ant=%d,card=%d,tof=%lld,rav=%02X,acc=%02X,rssi=%d",
-				loc.m_site_id,loc.m_ant_id,loc.m_card_id,loc.m_tof,loc.m_rav,loc.m_acc,loc.m_rssi);
-
-		c->on_message(loc,is_history);
+		c->on_message(loop, loc, is_history);
 	}
 };
 
-card_list *card_list::instance(zloop<task*>&loop)
+card_list *card_list::instance()
 {
-	static card_list_impl _impl(loop);
+	static card_list_impl _impl;
 	return &_impl;
 }
 

+ 4 - 6
card.h

@@ -1,17 +1,15 @@
 #ifndef _CARD_HPP_
 #define _CARD_HPP_
-#include <message.h>
-#include <ev++.h>
 
-struct task;
-template<typename T> struct zloop;
+namespace ev { struct dynamic_loop; }
+struct message_locinfo;
 
 struct card_list
 {
-	virtual void on_message(const message_locinfo&loc,bool is_history)=0;
+	virtual void on_message(ev::dynamic_loop&loop, const message_locinfo&loc, bool is_history)=0;
 	virtual ~card_list(){}
 
-	static card_list *instance(zloop<task*>&loop);
+	static card_list *instance();
 };
 
 #endif

+ 1 - 0
clock.h

@@ -1,3 +1,4 @@
+
 #ifndef _clock_hpp_zzj_
 #define _clock_hpp_zzj_
 

+ 70 - 0
crc.cpp

@@ -0,0 +1,70 @@
+
+#include "crc.h"
+
+static unsigned short ccitt_table[256] = {
+0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
+0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
+0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
+0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
+0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
+0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
+0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
+0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
+0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
+0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
+0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
+0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
+0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
+0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
+0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
+0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
+0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
+0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
+0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
+0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
+0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
+0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
+0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
+0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
+0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
+0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
+0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
+0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
+0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
+0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
+0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
+0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
+};
+
+unsigned short do_crc(unsigned char *q, int len)
+{
+	unsigned short crc = 0;
+
+	while (len-- > 0)
+		crc = ccitt_table[(crc >> 8 ^ *q++) & 0xff] ^ (crc << 8);
+
+	return crc;
+}
+
+
+/*
+
+----------------------------------------------
+--功能: 字节查表法求CRC
+---------------------------------------------
+
+uint16_t do_crc(unsigned char *ptr,int len) // 字节查表法求CRC
+{
+	uint8_t tda;
+	uint16_t crc = 0;
+	unsigned char *e=ptr+len;
+	while(ptr<e)
+	{
+		tda=crc>>8; // 以8位二进制数暂存CRC 的高8 位
+		crc<<=8;    // 左移8 位
+		crc^=crc_Table[tda^*ptr]; //高字节和当前数据XOR 再查表
+		ptr++;
+	}
+	return(crc);
+}
+*/

+ 5 - 0
crc.h

@@ -0,0 +1,5 @@
+
+#ifndef _CRC_HPP_
+#include <stdint.h>
+uint16_t do_crc(unsigned char *ptr,int len); // 字节查表法求CRC
+#endif //CRC

+ 0 - 1
libzlog.so

@@ -1 +0,0 @@
-../log/libzlog.so

+ 1 - 1
line.h

@@ -120,6 +120,7 @@ struct line
 		return fabs(a*x+b*y+c)<e;
 	}
 };
+
 struct line_v:line//线段
 {
 	std::array<point,2> v;
@@ -221,4 +222,3 @@ struct line_v:line//线段
 };
 #endif
 
-

+ 159 - 0
loc_tool.cpp

@@ -0,0 +1,159 @@
+
+#include <vector>
+
+#include <log.h>
+#include <ant.h>
+#include <loc_tool.h>
+#include <message.h>
+
+std::vector<point> loc_tool_tdoa_3_base::calc_location(const std::vector<loc_message>&locm)
+{
+	return std::vector<point>();
+}
+int loc_tool_tdoa_3_base::index() 
+{
+	return 5;
+}
+
+std::vector<point> loc_tool_tdoa_2_base::calc_location(const std::vector<loc_message>&locm)
+{
+	return std::vector<point>();
+}
+int loc_tool_tdoa_2_base::index() 
+{
+	return 3;
+}
+
+std::vector<point> loc_tool_tdoa_1_base::calc_location(const std::vector<loc_message>&locm)
+{
+	return std::vector<point>();
+}
+int loc_tool_tdoa_1_base::index() 
+{
+	return 1;
+}
+
+std::vector<point> loc_tool_tof_3_base::calc_location(const std::vector<loc_message>&locm)
+{
+	return std::vector<point>();
+}
+int loc_tool_tof_3_base::index() 
+{
+	return 4;
+}
+
+std::vector<point> loc_tool_tof_2_base::calc_location(const std::vector<loc_message>&locm)
+{
+	return std::vector<point>();
+}
+int loc_tool_tof_2_base::index() 
+{
+	return 2;
+}
+
+void loc_tool_tof_1_base::on_loc_message(ant*,const message_locinfo&m)
+{
+	log_info("tof1-message:site=%d,ant=%d,card=%d,ct=%d,tof=%lld,rav=%02X,acc=%02X,rssi=%d",
+			m.m_site_id,m.m_ant_id,m.m_card_id,m.m_card_ct,m.m_tof,m.m_rav,m.m_acc,m.m_rssi);
+}
+
+std::vector<point> loc_tool_tof_1_base::calc_location(const std::vector<loc_message>&locm)
+{
+	return std::vector<point>();
+}
+int loc_tool_tof_1_base::index() 
+{
+	return 0;
+}
+
+loc_tool_main::loc_tool_main()
+{
+	set_tool(new loc_tool_tof_1_base());
+	set_tool(new loc_tool_tof_2_base());
+	set_tool(new loc_tool_tof_3_base());
+	set_tool(new loc_tool_tdoa_1_base());
+	set_tool(new loc_tool_tdoa_2_base());
+	set_tool(new loc_tool_tdoa_3_base());
+}
+
+loc_tool_main::~loc_tool_main()
+{
+	for(auto&tool:g_tool)
+		delete tool;
+}
+
+loc_tool* loc_tool_main::get_tool(int index)
+{
+	if((uint32_t)index >= sizeof(g_tool)/sizeof(loc_tool*))
+		return nullptr;
+	
+	return g_tool[index];
+}
+
+void loc_tool_main::set_tool(loc_tool*tool)
+{
+	int index=tool->index();
+	if(g_tool[index])
+	{
+		delete g_tool[index];
+		g_tool[index]=0;
+	}
+	g_tool[index]=tool;
+}
+
+void loc_tool_main::on_loc_message(ant*a, const message_locinfo&m)
+{
+	loc_tool*lt=get_tool(a->index());
+	if(lt==nullptr)
+	{
+		log_warn("无法找到对应的loctool-message:site=%d,ant=%d,card=%d,ct=%d,tof=%lld,rav=%02X,acc=%02X,rssi=%d",
+				m.m_site_id,m.m_ant_id,m.m_card_id,m.m_card_ct,m.m_tof,m.m_rav,m.m_acc,m.m_rssi);
+		return;
+	}
+
+	lt->on_loc_message(a, m);
+}
+
+std::vector<point> loc_tool_main::calc_location(const std::vector<loc_message>&locm)
+{
+	if(locm.empty()) return {};
+	int tool_index=locm[0].tool_index(),i=1,len=locm.size();
+	for(;i<len;i++)
+	{
+		if(tool_index!=locm[i].tool_index())
+			break;
+	}
+
+	if(i==len)
+	{
+		return std::move(g_tool[tool_index]->calc_location(locm));
+	}
+
+	//包含至少两种定位方式的基站,目前只考虑两种
+	std::vector<loc_message> locm1,locm2;
+	locm1.assign(locm.begin(),locm.begin()+i);
+
+	for(;i<len;i++)
+	{
+		if(tool_index!=locm[i].tool_index())
+			locm2.push_back(locm[i]);
+		else
+			locm1.push_back(locm[i]);
+	}
+
+	std::vector<point> rc;
+	if(locm1[0].m_ant->config().best_msg_cnt<=(int)locm1.size())
+	{
+		rc=std::move(g_tool[tool_index]->calc_location(locm1));
+	}
+
+	if(locm2[0].m_ant->config().best_msg_cnt<=(int)locm2.size())
+	{
+		int index=locm2[0].tool_index();
+		auto v=std::move(g_tool[index]->calc_location(locm2));
+		rc.insert(rc.begin(),v.begin(),v.end());
+	}
+
+	return std::move(rc);
+}
+

+ 70 - 0
loc_tool.h

@@ -0,0 +1,70 @@
+#ifndef __loc_tool_hpp__
+#define __loc_tool_hpp__
+
+struct ant;
+struct message_locinfo;
+
+struct loc_tool
+{
+	//将基础信息送入工具类,目前考虑各种算法输出不同的实时日志
+	virtual void on_loc_message(ant*a, const message_locinfo&m){};
+	virtual std::vector<point> calc_location(const std::vector<loc_message>&locm)=0;
+	virtual int index()
+	{
+		return -1;
+	}
+	virtual ~loc_tool(){}
+};
+
+struct loc_tool_tdoa_3_base:loc_tool
+{
+	virtual std::vector<point> calc_location(const std::vector<loc_message>&locm);
+	virtual int index();
+};
+
+struct loc_tool_tdoa_2_base:loc_tool
+{
+	virtual std::vector<point> calc_location(const std::vector<loc_message>&locm);
+	virtual int index();
+};
+
+struct loc_tool_tdoa_1_base:loc_tool
+{
+	virtual std::vector<point> calc_location(const std::vector<loc_message>&locm);
+	virtual int index();
+};
+
+struct loc_tool_tof_3_base:loc_tool
+{
+	virtual std::vector<point> calc_location(const std::vector<loc_message>&locm);
+	virtual int index();
+};
+
+struct loc_tool_tof_2_base:loc_tool
+{
+	virtual std::vector<point> calc_location(const std::vector<loc_message>&locm);
+	virtual int index();
+};
+
+struct loc_tool_tof_1_base:loc_tool
+{
+	virtual std::vector<point> calc_location(const std::vector<loc_message>&locm);
+	virtual void on_loc_message(ant*a, const message_locinfo&m);
+	virtual int index();
+};
+
+struct loc_tool_main:loc_tool
+{
+	loc_tool* g_tool[6];
+
+	loc_tool_main();
+	~loc_tool_main();
+	void set_tool(loc_tool*tool);
+	loc_tool* get_tool(int index);
+
+	void on_loc_message(ant*a, const message_locinfo&m);
+	std::vector<point> calc_location(const std::vector<loc_message>&locm);
+};
+
+#endif
+

+ 0 - 1
log.h

@@ -1 +0,0 @@
-../log/log.h

+ 0 - 1
logger

@@ -1 +0,0 @@
-../log/logger

+ 2 - 1
main.cpp

@@ -4,7 +4,7 @@
 
 int main()
 {
-	log_init("log.ini");
+	log_init("../etc/log.ini");
 
 	net_service mh;
 	service_handle::instance(&mh)->run(4000);
@@ -12,3 +12,4 @@ int main()
 	return 0;
 }
 
+

+ 9 - 5
net-service.cpp

@@ -28,12 +28,14 @@ net_service::~net_service()
 
 void net_service::on_message(std::shared_ptr<client> clt,const char*data,size_t len)
 {
-	std::vector<char> v(data,data+len);
-	clt->send(std::move(v));
+	//std::vector<char> v(data,data+len);
+	//clt->send(std::move(v));
 
-	//		log_info("recv a message ,len=%d",len);
-	//		logn_bin(1,"50ms .test",data,len);
-	return;
+	//log_info("recv a message ,len=%d",len);
+	//logn_bin(1,"50ms .test",data,len);
+	//return;
+
+	logn_bin(1,"",data,len);//输出二进制日志
 
 	zistream is(data,len-2);
 	uint16_t cmd;
@@ -88,3 +90,5 @@ void net_service::on_message(std::shared_ptr<client> clt,const char*data,size_t
 			break;
 	}
 }
+
+

+ 18 - 5
point.h

@@ -5,9 +5,18 @@
 struct point
 {
 	point();
-	point(double x_,double y_)
+	point(double x_,double y_,double z_=0)
 		:x(x_)
 		,y(y_)
+		,z(z_)
+	{
+	
+	}
+
+	point(const point&pt)
+		:x(pt.x)
+		,y(pt.y)
+		,z(pt.z)
 	{
 	
 	}
@@ -37,7 +46,11 @@ struct point
 		if(c!=0) 
 			return c<0;
 
-		return y-p.y<0;
+		c=y-p.y;
+		if(c!=0) 
+			return c<0;
+
+		return z-p.z<0;
 	}
 
 	static bool eq(double l,double r,double deta)
@@ -47,12 +60,12 @@ struct point
 
 	bool empty()const
 	{
-		return x==0 && y==0;
+		return x==0 && y==0 && z==0;
 	}
 
 	bool operator==(const point&r)const
 	{
-		return x==r.x && y==r.y;
+		return x==r.x && y==r.y && z==r.z;
 	}
 
 	double dist_direct(const point&o)const
@@ -118,7 +131,7 @@ struct point
 	}
 
 public:
-	double x,y;
+	double x,y,z;
 };
 #endif
 

+ 57 - 0
visit.cpp

@@ -0,0 +1,57 @@
+
+#include "write-copy.h"
+
+#ifdef _TEST_
+
+struct card
+{
+	int id;
+	card(int _id):id(_id){}
+};
+
+struct card_list:single_base<card_list,int,std::shared_ptr<card>>
+{
+	void accept(visitor<std::shared_ptr<card>>&v)
+	{
+		for(std::pair<int,std::shared_ptr<card>> me:m_map)
+		{
+			v.visit(me.second);
+		}
+	}
+};
+
+struct visit_log:visitor<std::shared_ptr<card>>
+{
+	bool visit(std::shared_ptr<card> c)
+	{
+		printf("%d\n",c->id);
+		return true;
+	}
+};
+
+template<> std::shared_ptr<card_list> single_base<card_list,int,std::shared_ptr<card>>::m_instance=std::make_shared<card_list>();
+
+int main()
+{
+	std::vector<std::shared_ptr<card_list>> v;
+	for(int i=0;i<100;i++)
+	{
+		card_list::instance()->add(i,std::make_shared<card>(i));//每次生成一个对象
+		v.push_back(card_list::instance());
+	}
+
+	for(int i=0;i<100;i++)
+	{
+		printf("%d  %p\n",i,v[i].get());
+	}
+
+	visit_log vl;
+
+	card_list::instance()->accept(vl);
+
+	return 0;
+}
+
+#endif
+
+

+ 22 - 0
visit.h

@@ -0,0 +1,22 @@
+#ifndef _VISITOR_HPP_
+#define _VISITOR_HPP_
+
+template<typename T>
+struct visitor
+{
+	virtual bool visit(T o)=0;
+	virtual ~visitor(){}
+};
+
+template<typename T>
+struct acceptor
+{
+	virtual void accept(visitor<T>&v)
+	{
+	}
+
+	virtual ~acceptor(){}
+};
+
+#endif
+

+ 3 - 3
worker.cpp

@@ -22,7 +22,7 @@ struct worker_thread: zloop<task*>
 	worker_thread ()
 	{
 		m_thread.reset(new std::thread(std::bind(&worker_thread::run,this)));
-		m_card_list=card_list::instance(*this);//*********
+		m_card_list=card_list::instance();//*********
 	}
 
 	void run()
@@ -47,13 +47,13 @@ struct worker_thread: zloop<task*>
 			case 0x843b://tof
 			case 0x863b://tdoa
 				log_info("card loc message%04X",t.m_cmd_code);
-				m_card_list->on_message(t.body<message_locinfo>(),false);
+				m_card_list->on_message(*this,t.body<message_locinfo>(),false);
 				//card_message::on_loc_message(this,t.m_param1);
 			break;
 			case 0x853b://tof his
 			case 0x873b://tdoa his
 				log_info("site history message%04X",t.m_cmd_code);
-				m_card_list->on_message(t.body<message_locinfo>(),true);
+				m_card_list->on_message(*this,t.body<message_locinfo>(),true);
 				//site_message::on_sync(this,t.m_param1);
 			break;
 

+ 120 - 0
write-copy.h

@@ -0,0 +1,120 @@
+#ifndef _WRITE_COPY_HPP_
+#define  _WRITE_COPY_HPP_
+
+#include <unordered_map>
+#include <algorithm>
+#include <memory>
+#include <mutex>
+
+#include <visit.h>
+
+template<typename T,typename K,typename V> 
+struct write_copy_base:acceptor<V>
+{
+	std::unordered_map<K,V> m_map;
+	write_copy_base()
+	{
+	
+	}
+
+	std::shared_ptr<T> clone()const
+	{
+		std::shared_ptr<T> ret=std::make_shared<T>();
+		ret->m_map.insert(m_map.begin(),m_map.end());
+		return ret;
+	}
+
+	std::shared_ptr<T> clone_add(const std::unordered_map<K,V>&m)const
+	{
+		std::shared_ptr<T> ret=std::move(clone());
+		ret->_add(m);
+		return ret;
+	}
+
+	std::shared_ptr<T> clone_add(K k,V v)const
+	{
+		std::shared_ptr<T> ret=std::move(clone());
+		ret->_add(k,v);
+		return ret;
+	}
+
+	std::shared_ptr<T> clone_remove(K k)const
+	{
+		std::shared_ptr<T> ret=std::move(clone());
+		ret->_remove(k);
+		return ret;
+	}
+
+	std::shared_ptr<T> clone_remove(const std::vector<K>&list)const
+	{
+		std::shared_ptr<T> ret=std::move(clone());
+		ret->_remove(list);
+		return ret;
+	}
+
+	virtual ~write_copy_base()
+	{
+//		std::for_each(m_list.begin(),m_list.end(),[](K*it){ });
+	}
+private:
+	void _remove(K k)
+	{
+		m_map.erase(k);
+	}
+
+	void _remove(const std::vector<K>& v)
+	{
+		for(K&k:v)
+		{
+			m_map.erase(k);
+		}
+	}
+
+	void _add(K k,V v)
+	{
+		m_map.insert(std::make_pair(k,v));
+	}
+
+	void _add(const std::unordered_map<K,V>&m)
+	{
+		m_map.insert(m.begin(),m.end());
+	}
+};
+
+template<typename T,typename K,typename V>
+struct single_base:write_copy_base<T,K,V>
+{
+	typedef write_copy_base<T,K,V> base;
+	static std::shared_ptr<T> m_instance;
+	static std::shared_ptr<T> instance()
+	{
+		return m_instance;
+	}
+
+	std::mutex m_mutex;
+	void add(K k,V c)
+	{
+		std::lock_guard<std::mutex> lock(m_mutex);
+		m_instance=std::move(base::clone_add(k,c));
+	}
+
+	void add(const std::unordered_map<K,V>&c)
+	{
+		std::lock_guard<std::mutex> lock(m_mutex);
+		m_instance=std::move(base::clone_add(c));
+	}
+	void remove(K k,V c)
+	{
+		std::lock_guard<std::mutex> lock(m_mutex);
+		m_instance=std::move(base::clone_remove(k,c));
+	}
+
+	void remove(const std::unordered_map<K,V>&c)
+	{
+		std::lock_guard<std::mutex> lock(m_mutex);
+		m_instance=std::move(base::clone_remove(c));
+	}
+};
+
+#endif
+