diff -Nru dee-0.5.22/aclocal.m4 dee-1.0.0/aclocal.m4 --- dee-0.5.22/aclocal.m4 2011-09-23 14:16:56.000000000 +0000 +++ dee-1.0.0/aclocal.m4 2012-01-12 15:07:01.000000000 +0000 @@ -268,6 +268,46 @@ am_aux_dir=`cd $ac_aux_dir && pwd` ]) +# AM_COND_IF -*- Autoconf -*- + +# Copyright (C) 2008 Free Software Foundation, Inc. +# +# This file 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. + +# serial 1 + +# _AM_COND_IF +# _AM_COND_ELSE +# _AM_COND_ENDIF +# -------------- +# These macros are only used for tracing. +m4_define([_AM_COND_IF]) +m4_define([_AM_COND_ELSE]) +m4_define([_AM_COND_ENDIF]) + + +# AM_COND_IF(COND, [IF-TRUE], [IF-FALSE]) +# --------------------------------------- +# If the shell condition matching COND is true, execute IF-TRUE, +# otherwise execute IF-FALSE. Allow automake to learn about conditional +# instantiating macros (the AC_CONFIG_FOOS). +AC_DEFUN([AM_COND_IF], +[m4_ifndef([_AM_COND_VALUE_$1], + [m4_fatal([$0: no such condition "$1"])])dnl +_AM_COND_IF([$1])dnl +if _AM_COND_VALUE_$1; then + m4_default([$2], [:]) +m4_ifval([$3], +[_AM_COND_ELSE([$1])dnl +else + $3 +])dnl +_AM_COND_ENDIF([$1])dnl +fi[]dnl +]) + # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 diff -Nru dee-0.5.22/bindings/Makefile.in dee-1.0.0/bindings/Makefile.in --- dee-0.5.22/bindings/Makefile.in 2011-09-23 14:16:58.000000000 +0000 +++ dee-1.0.0/bindings/Makefile.in 2012-01-12 15:07:02.000000000 +0000 @@ -149,9 +149,12 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ +INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ diff -Nru dee-0.5.22/bindings/python/Dee.py dee-1.0.0/bindings/python/Dee.py --- dee-0.5.22/bindings/python/Dee.py 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/bindings/python/Dee.py 2012-01-12 15:06:35.000000000 +0000 @@ -1,5 +1,5 @@ -from ..overrides import override -from ..importer import modules +from gi.overrides import override +from gi.importer import modules Dee = modules['Dee']._introspection_module from gi.repository import GLib @@ -63,6 +63,12 @@ def insert_before (self, iter, *args): return self.insert_row_before (iter, self._build_row(args)) + def insert_sorted (self, sort_func, *args): + return self.insert_row_sorted (self._build_row(args), sort_func, None) + + def find_sorted (self, sort_func, *args): + return self.find_row_sorted (self._build_row(args), sort_func, None) + def get_schema (self): return Dee.Model.get_schema(self)[0] diff -Nru dee-0.5.22/bindings/python/Makefile.in dee-1.0.0/bindings/python/Makefile.in --- dee-0.5.22/bindings/python/Makefile.in 2011-09-23 14:16:58.000000000 +0000 +++ dee-1.0.0/bindings/python/Makefile.in 2012-01-12 15:07:02.000000000 +0000 @@ -133,9 +133,12 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ +INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ diff -Nru dee-0.5.22/build/autotools/introspection.m4 dee-1.0.0/build/autotools/introspection.m4 --- dee-0.5.22/build/autotools/introspection.m4 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/build/autotools/introspection.m4 2012-01-12 15:06:35.000000000 +0000 @@ -21,7 +21,7 @@ ],[dnl AC_ARG_ENABLE(introspection, AS_HELP_STRING([--enable-introspection[=@<:@no/auto/yes@:>@]], - [Enable introspection for this build]),, + [Enable introspection for this build]),, [enable_introspection=auto]) ])dnl @@ -42,7 +42,7 @@ [auto],[dnl PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], found_introspection=yes, found_introspection=no) ],dnl - [dnl + [dnl AC_MSG_ERROR([invalid argument passed to --enable-introspection, should be one of @<:@no/auto/yes@:>@]) ])dnl @@ -59,12 +59,18 @@ INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0` INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0` INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)" + INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0` + INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0` + INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection fi AC_SUBST(INTROSPECTION_SCANNER) AC_SUBST(INTROSPECTION_COMPILER) AC_SUBST(INTROSPECTION_GENERATE) AC_SUBST(INTROSPECTION_GIRDIR) AC_SUBST(INTROSPECTION_TYPELIBDIR) + AC_SUBST(INTROSPECTION_CFLAGS) + AC_SUBST(INTROSPECTION_LIBS) + AC_SUBST(INTROSPECTION_MAKEFILE) AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes") ]) diff -Nru dee-0.5.22/build/autotools/libtool.m4 dee-1.0.0/build/autotools/libtool.m4 --- dee-0.5.22/build/autotools/libtool.m4 2011-09-23 14:16:55.000000000 +0000 +++ dee-1.0.0/build/autotools/libtool.m4 2012-01-12 15:06:58.000000000 +0000 @@ -1,8 +1,8 @@ # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, -# Inc. +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives @@ -11,8 +11,8 @@ m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, -# Inc. +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. @@ -146,6 +146,8 @@ AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl @@ -637,7 +639,7 @@ m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. -Copyright (C) 2010 Free Software Foundation, Inc. +Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." @@ -801,6 +803,7 @@ m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], @@ -822,6 +825,31 @@ ])# _LT_LANG +m4_ifndef([AC_PROG_GO], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], @@ -852,6 +880,10 @@ m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) @@ -954,7 +986,13 @@ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD @@ -962,6 +1000,7 @@ rm -rf libconftest.dylib* rm -f conftest.* fi]) + AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no @@ -973,6 +1012,7 @@ [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF @@ -990,7 +1030,9 @@ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? - if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD @@ -1035,8 +1077,8 @@ ]) -# _LT_DARWIN_LINKER_FEATURES -# -------------------------- +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ @@ -1047,6 +1089,8 @@ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi @@ -1330,14 +1374,27 @@ CFLAGS="$SAVE_CFLAGS" fi ;; -sparc*-*solaris*) +*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" @@ -1414,13 +1471,13 @@ if test -n "$RANLIB"; then case $host_os in openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in @@ -1600,6 +1657,11 @@ lt_cv_sys_max_cmd_len=196608 ;; + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not @@ -1639,7 +1701,7 @@ # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. - while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do @@ -2185,7 +2247,7 @@ case $host_os in aix3*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH @@ -2194,7 +2256,7 @@ ;; aix[[4-9]]*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes @@ -2259,7 +2321,7 @@ ;; bsdi[[45]]*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' @@ -2398,7 +2460,7 @@ ;; dgux*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' @@ -2406,10 +2468,6 @@ shlibpath_var=LD_LIBRARY_PATH ;; -freebsd1*) - dynamic_linker=no - ;; - freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. @@ -2417,7 +2475,7 @@ objformat=`/usr/bin/objformat` else case $host_os in - freebsd[[123]]*) objformat=aout ;; + freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi @@ -2435,7 +2493,7 @@ esac shlibpath_var=LD_LIBRARY_PATH case $host_os in - freebsd2*) + freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) @@ -2455,7 +2513,7 @@ ;; gnu*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' @@ -2466,7 +2524,7 @@ ;; haiku*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" @@ -2527,7 +2585,7 @@ ;; interix[[3-9]]*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' @@ -2543,7 +2601,7 @@ nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; @@ -2580,9 +2638,9 @@ dynamic_linker=no ;; -# This must be Linux ELF. +# This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' @@ -2657,7 +2715,7 @@ ;; newsos6) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes @@ -2726,7 +2784,7 @@ ;; solaris*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' @@ -2751,7 +2809,7 @@ ;; sysv4 | sysv4.3*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH @@ -2775,7 +2833,7 @@ sysv4*MP*) if test -d /usr/nec ;then - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH @@ -2806,7 +2864,7 @@ tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' @@ -2816,7 +2874,7 @@ ;; uts4*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH @@ -3238,7 +3296,7 @@ lt_cv_deplibs_check_method=pass_all ;; -# This must be Linux ELF. +# This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; @@ -3658,6 +3716,7 @@ # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ @@ -4242,7 +4301,9 @@ case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi ;; esac else @@ -4334,18 +4395,33 @@ ;; *) case `$CC -V 2>&1 | sed 5q` in - *Sun\ F* | *Sun*Fortran*) + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; esac ;; esac @@ -4505,7 +4581,9 @@ ;; cygwin* | mingw* | cegcc*) case $cc_basename in - cl*) ;; + cl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] @@ -4533,7 +4611,6 @@ _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported @@ -4787,8 +4864,7 @@ xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ @@ -5084,6 +5160,7 @@ # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' @@ -5130,10 +5207,6 @@ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; - freebsd1*) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little @@ -5146,7 +5219,7 @@ ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) + freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes @@ -5185,7 +5258,6 @@ fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes @@ -5627,9 +5699,6 @@ _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], - [[If ld is used when linking, flag to hardcode $libdir into a binary - during linking. This must work even if $libdir does not exist]]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], @@ -5787,7 +5856,6 @@ _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported @@ -6157,7 +6225,7 @@ esac ;; - freebsd[[12]]*) + freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no @@ -6918,12 +6986,18 @@ } }; _LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary @@ -7120,7 +7194,6 @@ _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no @@ -7253,7 +7326,6 @@ _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no @@ -7440,6 +7512,77 @@ ])# _LT_LANG_GCJ_CONFIG +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler @@ -7509,6 +7652,13 @@ dnl AC_DEFUN([LT_AC_PROG_GCJ], []) +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], diff -Nru dee-0.5.22/build/autotools/ltoptions.m4 dee-1.0.0/build/autotools/ltoptions.m4 --- dee-0.5.22/build/autotools/ltoptions.m4 2011-09-23 14:16:55.000000000 +0000 +++ dee-1.0.0/build/autotools/ltoptions.m4 2012-01-12 15:06:58.000000000 +0000 @@ -326,9 +326,24 @@ # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], - [AS_HELP_STRING([--with-pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [pic_mode="$withval"], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) diff -Nru dee-0.5.22/build/autotools/ltversion.m4 dee-1.0.0/build/autotools/ltversion.m4 --- dee-0.5.22/build/autotools/ltversion.m4 2011-09-23 14:16:55.000000000 +0000 +++ dee-1.0.0/build/autotools/ltversion.m4 2012-01-12 15:06:58.000000000 +0000 @@ -9,15 +9,15 @@ # @configure_input@ -# serial 3293 ltversion.m4 +# serial 3337 ltversion.m4 # This file is part of GNU Libtool -m4_define([LT_PACKAGE_VERSION], [2.4]) -m4_define([LT_PACKAGE_REVISION], [1.3293]) +m4_define([LT_PACKAGE_VERSION], [2.4.2]) +m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.4' -macro_revision='1.3293' +[macro_version='2.4.2' +macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) diff -Nru dee-0.5.22/build/autotools/Makefile.in dee-1.0.0/build/autotools/Makefile.in --- dee-0.5.22/build/autotools/Makefile.in 2011-09-23 14:16:58.000000000 +0000 +++ dee-1.0.0/build/autotools/Makefile.in 2012-01-12 15:07:02.000000000 +0000 @@ -109,9 +109,12 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ +INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ diff -Nru dee-0.5.22/build/Makefile.in dee-1.0.0/build/Makefile.in --- dee-0.5.22/build/Makefile.in 2011-09-23 14:16:58.000000000 +0000 +++ dee-1.0.0/build/Makefile.in 2012-01-12 15:07:02.000000000 +0000 @@ -149,9 +149,12 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ +INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ diff -Nru dee-0.5.22/configure dee-1.0.0/configure --- dee-0.5.22/configure 2011-09-23 14:16:57.000000000 +0000 +++ dee-1.0.0/configure 2012-01-12 15:07:02.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for dee 0.5.22. +# Generated by GNU Autoconf 2.68 for dee 1.0.0. # # Report bugs to . # @@ -570,12 +570,12 @@ # Identity of this package. PACKAGE_NAME='dee' PACKAGE_TARNAME='dee' -PACKAGE_VERSION='0.5.22' -PACKAGE_STRING='dee 0.5.22' +PACKAGE_VERSION='1.0.0' +PACKAGE_STRING='dee 1.0.0' PACKAGE_BUGREPORT='https://bugs.launchpad.net/dee' PACKAGE_URL='' -ac_unique_file="dee/dee.h" +ac_unique_file="src/dee.h" # Factoring default headers for most tests. ac_includes_default="\ #include @@ -616,6 +616,8 @@ ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS +HAVE_VAPIGEN_FALSE +HAVE_VAPIGEN_TRUE VALA_API_GEN GLIB_GENMARSHAL GLIB_MKENUMS @@ -625,6 +627,8 @@ HAVE_GTX_TRUE GTX_LIBS GTX_CFLAGS +WANT_TESTS_FALSE +WANT_TESTS_TRUE GTK_DOC_USE_REBASE_FALSE GTK_DOC_USE_REBASE_TRUE GTK_DOC_USE_LIBTOOL_FALSE @@ -643,6 +647,9 @@ GTKDOC_CHECK HAVE_INTROSPECTION_FALSE HAVE_INTROSPECTION_TRUE +INTROSPECTION_MAKEFILE +INTROSPECTION_LIBS +INTROSPECTION_CFLAGS INTROSPECTION_TYPELIBDIR INTROSPECTION_GIRDIR INTROSPECTION_GENERATE @@ -798,6 +805,7 @@ enable_gtk_doc enable_gtk_doc_html enable_gtk_doc_pdf +enable_tests enable_extended_tests enable_trace_log ' @@ -1361,7 +1369,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures dee 0.5.22 to adapt to many kinds of systems. +\`configure' configures dee 1.0.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1431,7 +1439,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of dee 0.5.22:";; + short | recursive ) echo "Configuration of dee 1.0.0:";; esac cat <<\_ACEOF @@ -1455,6 +1463,7 @@ --enable-gtk-doc use gtk-doc to build documentation [[default=no]] --enable-gtk-doc-html build documentation in html format [[default=yes]] --enable-gtk-doc-pdf build documentation in pdf format [[default=no]] + --enable-tests=[no/yes] build tests suite [default=yes] --enable-extended-tests=[no/yes] build extended test suite (requires libgtx from lp:gtx) [default=no] @@ -1464,7 +1473,7 @@ Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-pic try to use only PIC/non-PIC objects [default=use + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR @@ -1560,7 +1569,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -dee configure 0.5.22 +dee configure 1.0.0 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. @@ -1929,7 +1938,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by dee $as_me 0.5.22, which was +It was created by dee $as_me 1.0.0, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -2753,7 +2762,7 @@ # Define the identity of the package. PACKAGE='dee' - VERSION='0.5.22' + VERSION='1.0.0' cat >>confdefs.h <<_ACEOF @@ -2981,10 +2990,10 @@ -DEE_MAJOR_VERSION=0 -DEE_MINOR_VERSION=5 -DEE_MICRO_VERSION=22 -DEE_VERSION=0.5.22 +DEE_MAJOR_VERSION=1 +DEE_MINOR_VERSION=0 +DEE_MICRO_VERSION=0 +DEE_VERSION=1.0.0 @@ -2997,9 +3006,9 @@ # - If binary compatibility has been broken (eg removed or changed interfaces) # change to C+1:0:0 # - If the interface is the same as the previous version, change to C:R+1:A -DEE_LT_CURRENT=3 -DEE_LT_REV=1 -DEE_LT_AGE=2 +DEE_LT_CURRENT=4 +DEE_LT_REV=0 +DEE_LT_AGE=0 DEE_LT_VERSION="$DEE_LT_CURRENT:$DEE_LT_REV:$DEE_LT_AGE" DEE_LT_LDFLAGS="-version-info $DEE_LT_VERSION -export-symbols-regex '^dee_.*'" @@ -4152,8 +4161,8 @@ -macro_version='2.4' -macro_revision='1.3293' +macro_version='2.4.2' +macro_revision='1.3337' @@ -4998,6 +5007,11 @@ lt_cv_sys_max_cmd_len=196608 ;; + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not @@ -5037,7 +5051,7 @@ # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. - while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do @@ -5466,7 +5480,7 @@ lt_cv_deplibs_check_method=pass_all ;; -# This must be Linux ELF. +# This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; @@ -6107,13 +6121,13 @@ if test -n "$RANLIB"; then case $host_os in openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in @@ -6260,6 +6274,7 @@ # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ @@ -6648,7 +6663,7 @@ CFLAGS="$SAVE_CFLAGS" fi ;; -sparc*-*solaris*) +*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 @@ -6659,7 +6674,20 @@ case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" @@ -7299,7 +7327,13 @@ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 @@ -7310,6 +7344,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : @@ -7342,6 +7377,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : @@ -7363,7 +7399,9 @@ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? - if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 @@ -7738,7 +7776,22 @@ # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : - withval=$with_pic; pic_mode="$withval" + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac else pic_mode=default fi @@ -7816,6 +7869,10 @@ + + + + test -z "$LN_S" && LN_S="ln -s" @@ -8275,7 +8332,9 @@ case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' - lt_prog_compiler_pic='-Xcompiler -fPIC' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi ;; esac else @@ -8366,18 +8425,33 @@ ;; *) case `$CC -V 2>&1 | sed 5q` in - *Sun\ F* | *Sun*Fortran*) + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; esac ;; esac @@ -8739,7 +8813,6 @@ hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported @@ -8992,8 +9065,7 @@ xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld='-rpath $libdir' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ @@ -9373,6 +9445,7 @@ # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' @@ -9418,6 +9491,7 @@ hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else whole_archive_flag_spec='' fi @@ -9446,10 +9520,6 @@ hardcode_shlibpath_var=no ;; - freebsd1*) - ld_shlibs=no - ;; - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little @@ -9462,7 +9532,7 @@ ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) + freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes @@ -9501,7 +9571,6 @@ fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes @@ -10125,11 +10194,6 @@ - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } @@ -10219,7 +10283,7 @@ case $host_os in aix3*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH @@ -10228,7 +10292,7 @@ ;; aix[4-9]*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes @@ -10293,7 +10357,7 @@ ;; bsdi[45]*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' @@ -10432,7 +10496,7 @@ ;; dgux*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' @@ -10440,10 +10504,6 @@ shlibpath_var=LD_LIBRARY_PATH ;; -freebsd1*) - dynamic_linker=no - ;; - freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. @@ -10451,7 +10511,7 @@ objformat=`/usr/bin/objformat` else case $host_os in - freebsd[123]*) objformat=aout ;; + freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi @@ -10469,7 +10529,7 @@ esac shlibpath_var=LD_LIBRARY_PATH case $host_os in - freebsd2*) + freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) @@ -10489,7 +10549,7 @@ ;; gnu*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' @@ -10500,7 +10560,7 @@ ;; haiku*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" @@ -10561,7 +10621,7 @@ ;; interix[3-9]*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' @@ -10577,7 +10637,7 @@ nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; @@ -10614,9 +10674,9 @@ dynamic_linker=no ;; -# This must be Linux ELF. +# This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' @@ -10710,7 +10770,7 @@ ;; newsos6) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes @@ -10779,7 +10839,7 @@ ;; solaris*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' @@ -10804,7 +10864,7 @@ ;; sysv4 | sysv4.3*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH @@ -10828,7 +10888,7 @@ sysv4*MP*) if test -d /usr/nec ;then - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH @@ -10859,7 +10919,7 @@ tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' @@ -10869,7 +10929,7 @@ ;; uts4*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH @@ -11651,6 +11711,8 @@ + + ac_config_commands="$ac_config_commands libtool" @@ -12465,20 +12527,20 @@ as_fn_error $? "gobject-introspection-1.0 is not installed" "$LINENO" 5 fi if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.3\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.3") 2>&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.10.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.10.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then found_introspection=yes else - as_fn_error $? "You need to have gobject-introspection >= 0.6.3 installed to build dee" "$LINENO" 5 + as_fn_error $? "You need to have gobject-introspection >= 0.10.2 installed to build dee" "$LINENO" 5 fi ;; #( auto) : if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.3\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.3") 2>&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.10.2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.10.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then @@ -12505,6 +12567,9 @@ INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0` INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0` INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)" + INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0` + INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0` + INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection fi @@ -12512,6 +12577,9 @@ + + + if test "x$found_introspection" = "xyes"; then HAVE_INTROSPECTION_TRUE= HAVE_INTROSPECTION_FALSE='#' @@ -12845,6 +12913,23 @@ +# Check whether --enable-tests was given. +if test "${enable_tests+set}" = set; then : + enableval=$enable_tests; +else + enable_tests=yes +fi + + + if test "x$enable_tests" != "xno"; then + WANT_TESTS_TRUE= + WANT_TESTS_FALSE='#' +else + WANT_TESTS_TRUE='#' + WANT_TESTS_FALSE= +fi + + # Check whether --enable-extended-tests was given. if test "${enable_extended_tests+set}" = set; then : enableval=$enable_extended_tests; @@ -12854,6 +12939,13 @@ if test "x$enable_extended_tests" = "xyes"; then + if test "x$enable_tests" != "xno"; then + : +else + + as_fn_error $? "extended tests require tests support, please --enable-tests" "$LINENO" 5 + +fi $as_echo "#define HAVE_GTX 1" >>confdefs.h @@ -13111,8 +13203,16 @@ fi + if test "x$VALA_API_GEN" != "x"; then + HAVE_VAPIGEN_TRUE= + HAVE_VAPIGEN_FALSE='#' +else + HAVE_VAPIGEN_TRUE='#' + HAVE_VAPIGEN_FALSE= +fi + -ac_config_files="$ac_config_files Makefile build/Makefile build/autotools/Makefile dee/Makefile bindings/Makefile bindings/python/Makefile doc/Makefile doc/reference/Makefile doc/reference/dee-1.0/Makefile dee-1.0.pc tests/Makefile examples/Makefile vapi/Makefile" +ac_config_files="$ac_config_files Makefile build/Makefile build/autotools/Makefile src/Makefile bindings/Makefile bindings/python/Makefile doc/Makefile doc/reference/Makefile doc/reference/dee-1.0/Makefile dee-1.0.pc tests/Makefile tools/Makefile examples/Makefile vapi/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -13263,6 +13363,10 @@ as_fn_error $? "conditional \"GTK_DOC_USE_REBASE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${WANT_TESTS_TRUE}" && test -z "${WANT_TESTS_FALSE}"; then + as_fn_error $? "conditional \"WANT_TESTS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${HAVE_GTX_TRUE}" && test -z "${HAVE_GTX_FALSE}"; then as_fn_error $? "conditional \"HAVE_GTX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -13271,6 +13375,10 @@ as_fn_error $? "conditional \"ENABLE_TRACE_LOG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${HAVE_VAPIGEN_TRUE}" && test -z "${HAVE_VAPIGEN_FALSE}"; then + as_fn_error $? "conditional \"HAVE_VAPIGEN\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 @@ -13680,7 +13788,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by dee $as_me 0.5.22, which was +This file was extended by dee $as_me 1.0.0, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -13746,7 +13854,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -dee config.status 0.5.22 +dee config.status 1.0.0 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" @@ -13883,6 +13991,7 @@ enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' @@ -13965,7 +14074,6 @@ allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' @@ -14021,6 +14129,7 @@ # Quote evaled strings. for var in SHELL \ ECHO \ +PATH_SEPARATOR \ SED \ GREP \ EGREP \ @@ -14071,7 +14180,6 @@ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ -hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ @@ -14158,7 +14266,7 @@ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "build/Makefile") CONFIG_FILES="$CONFIG_FILES build/Makefile" ;; "build/autotools/Makefile") CONFIG_FILES="$CONFIG_FILES build/autotools/Makefile" ;; - "dee/Makefile") CONFIG_FILES="$CONFIG_FILES dee/Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "bindings/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/Makefile" ;; "bindings/python/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/python/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; @@ -14166,6 +14274,7 @@ "doc/reference/dee-1.0/Makefile") CONFIG_FILES="$CONFIG_FILES doc/reference/dee-1.0/Makefile" ;; "dee-1.0.pc") CONFIG_FILES="$CONFIG_FILES dee-1.0.pc" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; + "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;; "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; "vapi/Makefile") CONFIG_FILES="$CONFIG_FILES vapi/Makefile" ;; @@ -14879,8 +14988,8 @@ # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, -# Inc. +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. @@ -14934,6 +15043,9 @@ # An echo program that protects backslashes. ECHO=$lt_ECHO +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + # The host system. host_alias=$host_alias host=$host @@ -15235,2429 +15347,6 @@ # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Commands necessary for finishing linking programs. -postlink_cmds=$lt_postlink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain="$ac_aux_dir/ltmain.sh" - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - if test x"$xsi_shell" = xyes; then - sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ -func_dirname ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_basename ()$/,/^} # func_basename /c\ -func_basename ()\ -{\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ -func_dirname_and_basename ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ -func_stripname ()\ -{\ -\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ -\ # positional parameters, so assign one to ordinary parameter first.\ -\ func_stripname_result=${3}\ -\ func_stripname_result=${func_stripname_result#"${1}"}\ -\ func_stripname_result=${func_stripname_result%"${2}"}\ -} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ -func_split_long_opt ()\ -{\ -\ func_split_long_opt_name=${1%%=*}\ -\ func_split_long_opt_arg=${1#*=}\ -} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ -func_split_short_opt ()\ -{\ -\ func_split_short_opt_arg=${1#??}\ -\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ -} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ -func_lo2o ()\ -{\ -\ case ${1} in\ -\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ -\ *) func_lo2o_result=${1} ;;\ -\ esac\ -} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_xform ()$/,/^} # func_xform /c\ -func_xform ()\ -{\ - func_xform_result=${1%.*}.lo\ -} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_arith ()$/,/^} # func_arith /c\ -func_arith ()\ -{\ - func_arith_result=$(( $* ))\ -} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_len ()$/,/^} # func_len /c\ -func_len ()\ -{\ - func_len_result=${#1}\ -} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - -fi - -if test x"$lt_shell_append" = xyes; then - sed -e '/^func_append ()$/,/^} # func_append /c\ -func_append ()\ -{\ - eval "${1}+=\\${2}"\ -} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ -func_append_quoted ()\ -{\ -\ func_quote_for_eval "${2}"\ -\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ -} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 -$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} -fi - - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error $? "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${HAVE_INTROSPECTION_TRUE}" && test -z "${HAVE_INTROSPECTION_FALSE}"; then - as_fn_error $? "conditional \"HAVE_INTROSPECTION\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then - as_fn_error $? "conditional \"ENABLE_GTK_DOC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${GTK_DOC_BUILD_HTML_TRUE}" && test -z "${GTK_DOC_BUILD_HTML_FALSE}"; then - as_fn_error $? "conditional \"GTK_DOC_BUILD_HTML\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${GTK_DOC_BUILD_PDF_TRUE}" && test -z "${GTK_DOC_BUILD_PDF_FALSE}"; then - as_fn_error $? "conditional \"GTK_DOC_BUILD_PDF\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then - as_fn_error $? "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${GTK_DOC_USE_REBASE_TRUE}" && test -z "${GTK_DOC_USE_REBASE_FALSE}"; then - as_fn_error $? "conditional \"GTK_DOC_USE_REBASE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${HAVE_GTX_TRUE}" && test -z "${HAVE_GTX_FALSE}"; then - as_fn_error $? "conditional \"HAVE_GTX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${ENABLE_TRACE_LOG_TRUE}" && test -z "${ENABLE_TRACE_LOG_FALSE}"; then - as_fn_error $? "conditional \"ENABLE_TRACE_LOG\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__EXEEXT_TRUE}" && test -z "${am__EXEEXT_FALSE}"; then - as_fn_error $? "conditional \"am__EXEEXT\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by dee $as_me 0.5.22, which was -generated by GNU Autoconf 2.68. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -dee config.status 0.5.22 -configured by $0, generated by GNU Autoconf 2.68, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2010 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' -macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' -macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' -enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' -pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' -SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' -ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' -host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' -host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' -host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' -build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' -build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' -build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' -SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' -Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' -GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' -EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' -FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' -LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' -NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' -LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' -ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' -exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' -lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' -lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' -lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' -reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' -file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' -want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' -DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' -sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' -AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' -archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' -STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' -RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' -lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' -CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' -compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' -GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' -nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' -lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' -objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' -need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' -MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' -LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' -OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' -libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' -module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' -postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' -need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' -version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' -runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' -libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' -soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' -install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' -finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' -old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' -striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in SHELL \ -ECHO \ -SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -OBJDUMP \ -deplibs_check_method \ -file_magic_cmd \ -file_magic_glob \ -want_nocaseglob \ -DLLTOOL \ -sharedlib_from_linklib_cmd \ -AR \ -AR_FLAGS \ -archiver_list_spec \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -nm_file_list_spec \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_pic \ -lt_prog_compiler_wl \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -MANIFEST_TOOL \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_flag_spec_ld \ -hardcode_libdir_separator \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -install_override_mode \ -finish_eval \ -old_striplib \ -striplib; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postlink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile' - -ac_aux_dir='$ac_aux_dir' - - - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "build/Makefile") CONFIG_FILES="$CONFIG_FILES build/Makefile" ;; - "build/autotools/Makefile") CONFIG_FILES="$CONFIG_FILES build/autotools/Makefile" ;; - "dee/Makefile") CONFIG_FILES="$CONFIG_FILES dee/Makefile" ;; - "bindings/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/Makefile" ;; - "bindings/python/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/python/Makefile" ;; - "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; - "doc/reference/Makefile") CONFIG_FILES="$CONFIG_FILES doc/reference/Makefile" ;; - "doc/reference/dee-1.0/Makefile") CONFIG_FILES="$CONFIG_FILES doc/reference/dee-1.0/Makefile" ;; - "dee-1.0.pc") CONFIG_FILES="$CONFIG_FILES dee-1.0.pc" ;; - "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; - "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; - "vapi/Makefile") CONFIG_FILES="$CONFIG_FILES vapi/Makefile" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$ac_tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_tt=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_tt"; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" - } >"$ac_tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$ac_tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, -# Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="" - -# ### BEGIN LIBTOOL CONFIG - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that protects backslashes. -ECHO=$lt_ECHO - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# convert \$build file names to \$host format. -to_host_file_cmd=$lt_cv_to_host_file_cmd - -# convert \$build files to toolchain format. -to_tool_file_cmd=$lt_cv_to_tool_file_cmd - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method = "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# How to find potential files when deplibs_check_method = "file_magic". -file_magic_glob=$lt_file_magic_glob - -# Find potential files using nocaseglob when deplibs_check_method = "file_magic". -want_nocaseglob=$lt_want_nocaseglob - -# DLL creation program. -DLLTOOL=$lt_DLLTOOL - -# Command to associate shared and link libraries. -sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd - -# The archiver. -AR=$lt_AR - -# Flags to create an archive. -AR_FLAGS=$lt_AR_FLAGS - -# How to feed a file listing to the archiver. -archiver_list_spec=$lt_archiver_list_spec - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Whether to use a lock for old archive extraction. -lock_old_archive_extraction=$lock_old_archive_extraction - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# Specify filename containing input files for \$NM. -nm_file_list_spec=$lt_nm_file_list_spec - -# The root where to search for dependent libraries,and in which our libraries should be installed. -lt_sysroot=$lt_sysroot - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Manifest tool. -MANIFEST_TOOL=$lt_MANIFEST_TOOL - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Permission mode override for installation of shared libraries. -install_override_mode=$lt_install_override_mode - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator @@ -17957,6 +15646,7 @@ Documentation : ${enable_gtk_doc} Introspection : ${enable_introspection} + Tests : ${enable_tests} Extended Tests : ${enable_extended_tests} Verbose logging: ${enable_trace_log} @@ -17973,6 +15663,7 @@ Documentation : ${enable_gtk_doc} Introspection : ${enable_introspection} + Tests : ${enable_tests} Extended Tests : ${enable_extended_tests} Verbose logging: ${enable_trace_log} diff -Nru dee-0.5.22/configure.ac dee-1.0.0/configure.ac --- dee-0.5.22/configure.ac 2011-09-23 14:15:11.000000000 +0000 +++ dee-1.0.0/configure.ac 2012-01-12 15:06:35.000000000 +0000 @@ -2,16 +2,17 @@ # For releases bump this version here, # but also remember to bump the lib version as instructed below -m4_define([dee_major], [0]) -m4_define([dee_minor], [5]) -m4_define([dee_micro], [22]) +# Don't forget that this changes also GIR version, and requires rebuilding vapi +m4_define([dee_major], [1]) +m4_define([dee_minor], [0]) +m4_define([dee_micro], [0]) m4_define([dee_api], [dee_major.dee_minor]) m4_define([dee_version], [dee_major.dee_minor.dee_micro]) AC_INIT([dee],[dee_version],[https://bugs.launchpad.net/dee]) -AC_CONFIG_SRCDIR([dee/dee.h]) +AC_CONFIG_SRCDIR([src/dee.h]) AC_CONFIG_MACRO_DIR([build/autotools]) AC_CONFIG_HEADERS([config.h]) @@ -37,9 +38,9 @@ # - If binary compatibility has been broken (eg removed or changed interfaces) # change to C+1:0:0 # - If the interface is the same as the previous version, change to C:R+1:A -DEE_LT_CURRENT=3 -DEE_LT_REV=1 -DEE_LT_AGE=2 +DEE_LT_CURRENT=4 +DEE_LT_REV=0 +DEE_LT_AGE=0 DEE_LT_VERSION="$DEE_LT_CURRENT:$DEE_LT_REV:$DEE_LT_AGE" DEE_LT_LDFLAGS="-version-info $DEE_LT_VERSION -export-symbols-regex '^dee_.*'" @@ -100,17 +101,27 @@ AC_SUBST(MAINTAINER_CFLAGS) dnl = GObject Introspection Check ============================================= -GOBJECT_INTROSPECTION_CHECK([0.6.3]) +GOBJECT_INTROSPECTION_CHECK([0.10.2]) dnl = GTK Doc Check =========================================================== GTK_DOC_CHECK([1.8]) +dnl = Check if build tests ==================================================== +AC_ARG_ENABLE([tests], + AS_HELP_STRING([--enable-tests=@<:@no/yes@:>@],[build tests suite @<:@default=yes@:>@]),, + [enable_tests=yes]) + +AM_CONDITIONAL([WANT_TESTS], [test "x$enable_tests" != "xno"]) + dnl = Check for GLib Test Extensions (GTX) ==================================== AC_ARG_ENABLE([extended-tests], AS_HELP_STRING([--enable-extended-tests=@<:@no/yes@:>@],[build extended test suite (requires libgtx from lp:gtx) @<:@default=no@:>@]),, [enable_extended_tests=no]) if test "x$enable_extended_tests" = "xyes"; then + AM_COND_IF([WANT_TESTS],,[ + AC_MSG_ERROR([extended tests require tests support, please --enable-tests]) + ]) AC_DEFINE(HAVE_GTX, 1, [Define to 1 if we have GLib Test Extensions (libgtx from lp:gtx)]) PKG_CHECK_MODULES(GTX, [ gtx >= 0.2.2 ]) @@ -142,13 +153,14 @@ dnl =========================================================================== AC_PATH_PROG([VALA_API_GEN], [vapigen]) +AM_CONDITIONAL([HAVE_VAPIGEN], [test "x$VALA_API_GEN" != "x"]) dnl =========================================================================== AC_OUTPUT([ Makefile build/Makefile build/autotools/Makefile - dee/Makefile + src/Makefile bindings/Makefile bindings/python/Makefile doc/Makefile @@ -156,12 +168,11 @@ doc/reference/dee-1.0/Makefile dee-1.0.pc tests/Makefile + tools/Makefile examples/Makefile vapi/Makefile ]) -AC_OUTPUT - dnl Output the results AC_MSG_NOTICE([ @@ -173,6 +184,7 @@ Documentation : ${enable_gtk_doc} Introspection : ${enable_introspection} + Tests : ${enable_tests} Extended Tests : ${enable_extended_tests} Verbose logging: ${enable_trace_log} diff -Nru dee-0.5.22/debian/changelog dee-1.0.0/debian/changelog --- dee-0.5.22/debian/changelog 2011-09-23 14:32:49.000000000 +0000 +++ dee-1.0.0/debian/changelog 2012-02-01 00:49:39.000000000 +0000 @@ -1,26 +1,49 @@ -dee (0.5.22-0ubuntu1) oneiric; urgency=low +dee (1.0.0-0ubuntu1linaro1) oneiric; urgency=low + + * Backport from Precise + + -- Ricardo Salveti de Araujo Tue, 31 Jan 2012 16:24:32 -0200 + +dee (1.0.0-0ubuntu1) precise; urgency=low * New upstream release. - - Dee.Model.set_schema() broken in pygi (LP: #845416) - - More strict error checking in DeeSequenceModel to help consumers - (LP: #857432) + - DeeModel support insert_sorted() and find_sorted() (LP: #913128) + - Dee should support simple transactions (LP: #894023) + - DeeSequenceModel optimized getters (LP: #900629) + - DeeFilter and DeeFilterModel can not work properly with GI and/or PyGI + (LP: #904293) + - DeePeer and DeeSharedModel should support peer-2-peer DBus connections + (LP: #904299) + - Implement a DeeTreeIndex (LP: #622446) + - DeeSharedModel should signal on remote transactions (LP: #912675) + - Unable to use ModelTag from Vala with owned variables (LP: #911667) + - DeeSequenceModel optimize signal emissions (LP: #901098) + - DeeModel needs a benchmark suite (LP: #901100) + * debian/rules: + - enable documentation building (for daily build) + * Do not use source 3 as doesn't work well with bzr merge-upstream + when upstream is in bzr. + * debian/control: + - build-dep on gobject-introspection 0.10.2 + - readd Bzr-Vcs to be able to point to this branch + * debian/dee-tools.install, debian/control: + - add dee-tools package + * debian/rules, debian/control, debian/*symbols, debian/*install: + - handle ABI break and gir bump naming. Replaces: the right packages + for the gir override file + - update with new symbols - -- Didier Roche Fri, 23 Sep 2011 16:32:49 +0200 + -- Didier Roche Thu, 12 Jan 2012 17:48:20 +0100 -dee (0.5.18-1ubuntu1) oneiric; urgency=low +dee (0.5.22-1) unstable; urgency=low - * Merged changes from trunk to get dee_filter_collator_desc and vapi - fixes - * debian/libdee-1.0-1.symbols - - Added new symbol - * debian/control - - Added Vcs - - Updated Maintainers - - Added build depends for dh-autoreconf - * debian/rules - - autoreconf + * New upstream release: + + Fix FTBFS (Closes: #643086) + * Updated symbols file. + * Updated copyright as per DEP-5 format. + * Removed debian/gir1.2-dee-0.5.links (Closes: #642367) - -- Ken VanDine Fri, 15 Jul 2011 15:01:21 -0400 + -- Kartik Mistry Fri, 14 Oct 2011 14:19:17 +0530 dee (0.5.18-1) unstable; urgency=low diff -Nru dee-0.5.22/debian/control dee-1.0.0/debian/control --- dee-0.5.22/debian/control 2011-09-16 09:46:17.000000000 +0000 +++ dee-1.0.0/debian/control 2012-02-01 00:49:39.000000000 +0000 @@ -1,25 +1,25 @@ Source: dee Priority: optional -XSBC-Original-Maintainer: Kartik Mistry Maintainer: Ubuntu Developers +XSBC-Original-Maintainer: Kartik Mistry Build-Depends: debhelper (>= 7.0.50), + dh-autoreconf, + gir1.2-freedesktop, + gir1.2-glib-2.0, + gobject-introspection (>= 0.10.2), + gtk-doc-tools, libglib2.0-dev (>= 2.26.0), - gobject-introspection (>= 0.6.5-3), libgirepository1.0-dev, libdbus-glib-1-dev (>= 0.80), libdbus-1-dev (>= 1.0), - gir1.2-freedesktop, - gir1.2-glib-2.0, - valac, - gtk-doc-tools, python (>= 2.6.5), - dh-autoreconf + valac Standards-Version: 3.9.2 Section: libs Homepage: https://launchpad.net/dee Vcs-Bzr: https://code.launchpad.net/~ubuntu-desktop/dee/ubuntu -Package: libdee-1.0-1 +Package: libdee-1.0-4 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: model to synchronize mutiple instances over DBus - shared lib @@ -31,7 +31,7 @@ Package: libdee-dev Section: libdevel Architecture: any -Depends: libdee-1.0-1 (= ${binary:Version}), +Depends: libdee-1.0-4 (= ${binary:Version}), ${misc:Depends}, libglib2.0-dev (>= 2.22.0), libdbus-glib-1-dev (>= 0.80) @@ -42,11 +42,11 @@ . This package contains files that are needed to build applications. -Package: libdee-1.0-1-dbg +Package: libdee-1.0-4-dbg Section: debug Architecture: any Priority: extra -Depends: libdee-1.0-1 (= ${binary:Version}), +Depends: libdee-1.0-4 (= ${binary:Version}), ${misc:Depends} Description: model to synchronize mutiple instances over DBus libdee is a shared library that provides objects that help @@ -65,13 +65,23 @@ . This package contains the documentation -Package: gir1.2-dee-0.5 +Package: gir1.2-dee-1.0 Architecture: any Depends: ${gir:Depends}, ${shlibs:Depends}, ${misc:Depends} +Replaces: gir1.2-dee-0.5 Description: GObject introspection data for the Dee library This package contains introspection data for the Dee library. . It can be used by packages using the GIRepository format to generate dynamic bindings. + +Package: dee-tools +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: model to synchronize mutiple instances over DBus - tooling + libdee is a shared library that provides objects that help + having multiple instances communicating over DBus. + . + This package contains the tooling for introspecting dee data. diff -Nru dee-0.5.22/debian/copyright dee-1.0.0/debian/copyright --- dee-0.5.22/debian/copyright 2011-09-16 09:46:17.000000000 +0000 +++ dee-1.0.0/debian/copyright 2012-02-01 00:49:39.000000000 +0000 @@ -1,11 +1,11 @@ -Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=174 +Format: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=174 Upstream-Name: dee Source: https://launchpad.net/dee Upstream-Contact: Mikkel Kamstrup Erlandsen , Neil Jagdish Patel Files: dee/* -Copyright: 2009-2010 Canonical Ltd. +Copyright: 2009-2010, Canonical Ltd. License: LGPL-3 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License Version 3.0 as published by @@ -19,7 +19,8 @@ On Debian systems, the complete text of the GNU Lesser General Public License can be found in `/usr/share/common-licenses/LGPL-3' -Files: examples/*, tests/*: +Files: examples/* tests/* debian/* +Copyright: 2010-2011, Canonical Ltd. License: GPL-3 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3 as published by the @@ -31,7 +32,3 @@ . On Debian systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL-3' - -Files: debian/* -Copyright: 2010 Canonical Ltd. -License: GPL-3 diff -Nru dee-0.5.22/debian/dee-tools.install dee-1.0.0/debian/dee-tools.install --- dee-0.5.22/debian/dee-tools.install 1970-01-01 00:00:00.000000000 +0000 +++ dee-1.0.0/debian/dee-tools.install 2012-02-01 00:49:39.000000000 +0000 @@ -0,0 +1 @@ +debian/tmp/usr/bin/ diff -Nru dee-0.5.22/debian/gir1.2-dee-0.5.install dee-1.0.0/debian/gir1.2-dee-0.5.install --- dee-0.5.22/debian/gir1.2-dee-0.5.install 2011-03-24 13:05:49.000000000 +0000 +++ dee-1.0.0/debian/gir1.2-dee-0.5.install 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -debian/tmp/usr/lib/girepository-1.0/ -debian/tmp/usr/lib/python*/dist-packages/gi/overrides/*.py diff -Nru dee-0.5.22/debian/gir1.2-dee-0.5.links dee-1.0.0/debian/gir1.2-dee-0.5.links --- dee-0.5.22/debian/gir1.2-dee-0.5.links 2011-03-07 15:48:58.000000000 +0000 +++ dee-1.0.0/debian/gir1.2-dee-0.5.links 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -usr/lib/python2.7/dist-packages/gi/overrides/Dee.py usr/lib/pymodules/python2.7/gi/overrides/Dee.py diff -Nru dee-0.5.22/debian/gir1.2-dee-1.0.install dee-1.0.0/debian/gir1.2-dee-1.0.install --- dee-0.5.22/debian/gir1.2-dee-1.0.install 1970-01-01 00:00:00.000000000 +0000 +++ dee-1.0.0/debian/gir1.2-dee-1.0.install 2012-02-01 00:49:39.000000000 +0000 @@ -0,0 +1,2 @@ +debian/tmp/usr/lib/girepository-1.0/ +debian/tmp/usr/lib/python*/dist-packages/gi/overrides/*.py diff -Nru dee-0.5.22/debian/libdee-1.0-1.install dee-1.0.0/debian/libdee-1.0-1.install --- dee-0.5.22/debian/libdee-1.0-1.install 2010-12-13 16:04:29.000000000 +0000 +++ dee-1.0.0/debian/libdee-1.0-1.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -debian/tmp/usr/lib/lib*.so.* diff -Nru dee-0.5.22/debian/libdee-1.0-1.symbols dee-1.0.0/debian/libdee-1.0-1.symbols --- dee-0.5.22/debian/libdee-1.0-1.symbols 2011-09-16 09:46:17.000000000 +0000 +++ dee-1.0.0/debian/libdee-1.0-1.symbols 1970-01-01 00:00:00.000000000 +0000 @@ -1,130 +0,0 @@ -libdee-1.0.so.1 libdee-1.0-1 #MINVER# - dee_analyzer_new_for_full_text_column@Base 0.5.2 - dee_analyzer_new_for_int32_column@Base 0.5.2 - dee_analyzer_new_for_key_column@Base 0.5.2 - dee_analyzer_new_for_uint32_column@Base 0.5.2 - dee_file_resource_manager_add_search_path@Base 0.5.12 - dee_file_resource_manager_get_primary_path@Base 0.5.12 - dee_file_resource_manager_get_type@Base 0.5.12 - dee_file_resource_manager_new@Base 0.5.12 - dee_filter_model_append_iter@Base 0.5.2 - dee_filter_model_contains@Base 0.5.2 - dee_filter_model_get_type@Base 0.5.2 - dee_filter_model_insert_iter@Base 0.5.2 - dee_filter_model_insert_iter_before@Base 0.5.2 - dee_filter_model_insert_iter_with_original_order@Base 0.5.16 - dee_filter_model_new@Base 0.5.2 - dee_filter_model_prepend_iter@Base 0.5.2 - dee_filter_new_collator@Base 0.5.16 - dee_filter_new_collator_desc@Base 0.5.18-1ubuntu1 - dee_filter_new_for_any_column@Base 0.5.16 - dee_filter_new_for_key_column@Base 0.5.16 - dee_filter_new_regex@Base 0.5.16 - dee_glist_result_set_get_type@Base 0.5.2 - dee_hash_index_get_type@Base 0.5.2 - dee_hash_index_new@Base 0.5.2 - dee_index_foreach@Base 0.5.2 - dee_index_get_analyzer@Base 0.5.2 - dee_index_get_model@Base 0.5.2 - dee_index_get_n_rows@Base 0.5.2 - dee_index_get_n_rows_for_term@Base 0.5.2 - dee_index_get_n_terms@Base 0.5.2 - dee_index_get_supported_term_match_flags@Base 0.5.2 - dee_index_get_type@Base 0.5.2 - dee_index_lookup@Base 0.5.2 - dee_index_lookup_one@Base 0.5.16 - dee_model_append@Base 0.5.2 - dee_model_append_row@Base 0.5.2 - dee_model_append_valist@Base 0.5.2 - dee_model_build_row@Base 0.5.2 - dee_model_build_row_valist@Base 0.5.2 - dee_model_clear@Base 0.5.2 - dee_model_clear_tag@Base 0.5.12 - dee_model_get@Base 0.5.2 - dee_model_get_bool@Base 0.5.2 - dee_model_get_column_schema@Base 0.5.2 - dee_model_get_double@Base 0.5.2 - dee_model_get_first_iter@Base 0.5.2 - dee_model_get_int32@Base 0.5.2 - dee_model_get_int64@Base 0.5.2 - dee_model_get_iter_at_row@Base 0.5.2 - dee_model_get_last_iter@Base 0.5.2 - dee_model_get_n_columns@Base 0.5.2 - dee_model_get_n_rows@Base 0.5.2 - dee_model_get_position@Base 0.5.2 - dee_model_get_row@Base 0.5.2 - dee_model_get_schema@Base 0.5.2 - dee_model_get_string@Base 0.5.2 - dee_model_get_tag@Base 0.5.12 - dee_model_get_type@Base 0.5.2 - dee_model_get_uchar@Base 0.5.2 - dee_model_get_uint32@Base 0.5.2 - dee_model_get_uint64@Base 0.5.2 - dee_model_get_valist@Base 0.5.2 - dee_model_get_value@Base 0.5.2 - dee_model_insert@Base 0.5.2 - dee_model_insert_before@Base 0.5.2 - dee_model_insert_before_valist@Base 0.5.2 - dee_model_insert_row@Base 0.5.2 - dee_model_insert_row_before@Base 0.5.2 - dee_model_insert_valist@Base 0.5.2 - dee_model_is_first@Base 0.5.2 - dee_model_is_last@Base 0.5.2 - dee_model_next@Base 0.5.2 - dee_model_prepend@Base 0.5.2 - dee_model_prepend_row@Base 0.5.2 - dee_model_prepend_valist@Base 0.5.2 - dee_model_prev@Base 0.5.2 - dee_model_register_tag@Base 0.5.12 - dee_model_remove@Base 0.5.2 - dee_model_set@Base 0.5.2 - dee_model_set_row@Base 0.5.2 - dee_model_set_schema@Base 0.5.2 - dee_model_set_schema_full@Base 0.5.2 - dee_model_set_schema_valist@Base 0.5.2 - dee_model_set_tag@Base 0.5.12 - dee_model_set_valist@Base 0.5.2 - dee_model_set_value@Base 0.5.2 - dee_peer_get_swarm_leader@Base 0.5.2 - dee_peer_get_swarm_name@Base 0.5.2 - dee_peer_get_type@Base 0.5.2 - dee_peer_is_swarm_leader@Base 0.5.2 - dee_peer_new@Base 0.5.2 - dee_proxy_model_get_type@Base 0.5.2 - dee_resource_manager_get_default@Base 0.5.12 - dee_resource_manager_get_type@Base 0.5.12 - dee_resource_manager_load@Base 0.5.12 - dee_resource_manager_store@Base 0.5.12 - dee_result_set_get_model@Base 0.5.2 - dee_result_set_get_n_rows@Base 0.5.2 - dee_result_set_get_type@Base 0.5.2 - dee_result_set_has_next@Base 0.5.2 - dee_result_set_next@Base 0.5.2 - dee_result_set_peek@Base 0.5.2 - dee_result_set_seek@Base 0.5.2 - dee_result_set_tell@Base 0.5.2 - dee_sequence_model_get_type@Base 0.5.2 - dee_sequence_model_new@Base 0.5.2 - dee_serializable_externalize@Base 0.5.12 - dee_serializable_get_type@Base 0.5.12 - dee_serializable_model_get_seqnum@Base 0.5.12 - dee_serializable_model_get_type@Base 0.5.12 - dee_serializable_model_inc_seqnum@Base 0.5.12 - dee_serializable_model_set_seqnum@Base 0.5.12 - dee_serializable_parse@Base 0.5.12 - dee_serializable_parse_external@Base 0.5.12 - dee_serializable_register_parser@Base 0.5.12 - dee_serializable_serialize@Base 0.5.12 - dee_shared_model_flush_revision_queue@Base 0.5.12 - dee_shared_model_get_peer@Base 0.5.2 - dee_shared_model_get_swarm_name@Base 0.5.2 - dee_shared_model_get_type@Base 0.5.2 - dee_shared_model_is_leader@Base 0.5.2 - dee_shared_model_is_synchronized@Base 0.5.2 - dee_shared_model_new@Base 0.5.2 - dee_shared_model_new_with_back_end@Base 0.5.2 - dee_term_list_add_term@Base 0.5.2 - dee_term_list_clear@Base 0.5.2 - dee_term_list_get_term@Base 0.5.2 - dee_term_list_get_type@Base 0.5.2 - dee_term_list_num_terms@Base 0.5.2 diff -Nru dee-0.5.22/debian/libdee-1.0-4.install dee-1.0.0/debian/libdee-1.0-4.install --- dee-0.5.22/debian/libdee-1.0-4.install 1970-01-01 00:00:00.000000000 +0000 +++ dee-1.0.0/debian/libdee-1.0-4.install 2012-02-01 00:49:39.000000000 +0000 @@ -0,0 +1 @@ +debian/tmp/usr/lib/lib*.so.* diff -Nru dee-0.5.22/debian/libdee-1.0-4.symbols dee-1.0.0/debian/libdee-1.0-4.symbols --- dee-0.5.22/debian/libdee-1.0-4.symbols 1970-01-01 00:00:00.000000000 +0000 +++ dee-1.0.0/debian/libdee-1.0-4.symbols 2012-02-01 00:49:39.000000000 +0000 @@ -0,0 +1,164 @@ +libdee-1.0.so.4 libdee-1.0-4 #MINVER# + dee_analyzer_add_term_filter@Base 0.5.22-1ubuntu1 + dee_analyzer_analyze@Base 0.5.22-1ubuntu1 + dee_analyzer_collate_cmp@Base 0.5.22-1ubuntu1 + dee_analyzer_collate_cmp_func@Base 0.5.22-1ubuntu1 + dee_analyzer_collate_key@Base 0.5.22-1ubuntu1 + dee_analyzer_get_type@Base 0.5.22-1ubuntu1 + dee_analyzer_new@Base 0.5.22-1ubuntu1 + dee_analyzer_tokenize@Base 0.5.22-1ubuntu1 + dee_client_get_type@Base 1.0.0 + dee_client_new@Base 1.0.0 + dee_client_new_for_address@Base 1.0.0 + dee_file_resource_manager_add_search_path@Base 0.5.12 + dee_file_resource_manager_get_primary_path@Base 0.5.12 + dee_file_resource_manager_get_type@Base 0.5.12 + dee_file_resource_manager_new@Base 0.5.12 + dee_filter_destroy@Base 1.0.0 + dee_filter_map@Base 1.0.0 + dee_filter_model_append_iter@Base 0.5.2 + dee_filter_model_contains@Base 0.5.2 + dee_filter_model_get_type@Base 0.5.2 + dee_filter_model_insert_iter@Base 0.5.2 + dee_filter_model_insert_iter_before@Base 0.5.2 + dee_filter_model_insert_iter_with_original_order@Base 0.5.16 + dee_filter_model_new@Base 0.5.2 + dee_filter_model_prepend_iter@Base 0.5.2 + dee_filter_new@Base 1.0.0 + dee_filter_new_collator@Base 0.5.16 + dee_filter_new_collator_desc@Base 0.5.22 + dee_filter_new_for_any_column@Base 0.5.16 + dee_filter_new_for_key_column@Base 0.5.16 + dee_filter_new_regex@Base 0.5.16 + dee_filter_new_sort@Base 1.0.0 + dee_filter_notify@Base 1.0.0 + dee_glist_result_set_get_type@Base 0.5.2 + dee_glist_result_set_new@Base 0.5.22-1ubuntu1 + dee_hash_index_get_type@Base 0.5.2 + dee_hash_index_new@Base 0.5.2 + dee_index_foreach@Base 0.5.2 + dee_index_get_analyzer@Base 0.5.2 + dee_index_get_model@Base 0.5.2 + dee_index_get_n_rows@Base 0.5.2 + dee_index_get_n_rows_for_term@Base 0.5.2 + dee_index_get_n_terms@Base 0.5.2 + dee_index_get_reader@Base 0.5.22-1ubuntu1 + dee_index_get_supported_term_match_flags@Base 0.5.2 + dee_index_get_type@Base 0.5.2 + dee_index_lookup@Base 0.5.2 + dee_index_lookup_one@Base 0.5.16 + dee_model_append@Base 0.5.2 + dee_model_append_row@Base 0.5.2 + dee_model_build_row@Base 0.5.2 + dee_model_clear@Base 0.5.2 + dee_model_clear_tag@Base 0.5.12 + dee_model_find_row_sorted@Base 1.0.0 + dee_model_find_sorted@Base 1.0.0 + dee_model_get@Base 0.5.2 + dee_model_get_bool@Base 0.5.2 + dee_model_get_column_schema@Base 0.5.2 + dee_model_get_double@Base 0.5.2 + dee_model_get_first_iter@Base 0.5.2 + dee_model_get_int32@Base 0.5.2 + dee_model_get_int64@Base 0.5.2 + dee_model_get_iter_at_row@Base 0.5.2 + dee_model_get_last_iter@Base 0.5.2 + dee_model_get_n_columns@Base 0.5.2 + dee_model_get_n_rows@Base 0.5.2 + dee_model_get_position@Base 0.5.2 + dee_model_get_row@Base 0.5.2 + dee_model_get_schema@Base 0.5.2 + dee_model_get_string@Base 0.5.2 + dee_model_get_tag@Base 0.5.12 + dee_model_get_type@Base 0.5.2 + dee_model_get_uchar@Base 0.5.2 + dee_model_get_uint32@Base 0.5.2 + dee_model_get_uint64@Base 0.5.2 + dee_model_get_value@Base 0.5.2 + dee_model_insert@Base 0.5.2 + dee_model_insert_before@Base 0.5.2 + dee_model_insert_row@Base 0.5.2 + dee_model_insert_row_before@Base 0.5.2 + dee_model_insert_row_sorted@Base 1.0.0 + dee_model_insert_sorted@Base 1.0.0 + dee_model_is_first@Base 0.5.2 + dee_model_is_last@Base 0.5.2 + dee_model_next@Base 0.5.2 + dee_model_prepend@Base 0.5.2 + dee_model_prepend_row@Base 0.5.2 + dee_model_prev@Base 0.5.2 + dee_model_reader_destroy@Base 0.5.22-1ubuntu1 + dee_model_reader_new@Base 0.5.22-1ubuntu1 + dee_model_reader_new_for_int32_column@Base 0.5.22-1ubuntu1 + dee_model_reader_new_for_string_column@Base 0.5.22-1ubuntu1 + dee_model_reader_new_for_uint32_column@Base 0.5.22-1ubuntu1 + dee_model_reader_read@Base 0.5.22-1ubuntu1 + dee_model_register_tag@Base 0.5.12 + dee_model_remove@Base 0.5.2 + dee_model_set@Base 0.5.2 + dee_model_set_row@Base 0.5.2 + dee_model_set_schema@Base 0.5.2 + dee_model_set_schema_full@Base 0.5.2 + dee_model_set_tag@Base 0.5.12 + dee_model_set_value@Base 0.5.2 + dee_peer_get_connections@Base 1.0.0 + dee_peer_get_swarm_leader@Base 0.5.2 + dee_peer_get_swarm_name@Base 0.5.2 + dee_peer_get_type@Base 0.5.2 + dee_peer_is_swarm_leader@Base 0.5.2 + dee_peer_list_peers@Base 1.0.0 + dee_peer_new@Base 0.5.2 + dee_proxy_model_get_type@Base 0.5.2 + dee_resource_manager_get_default@Base 0.5.12 + dee_resource_manager_get_type@Base 0.5.12 + dee_resource_manager_load@Base 0.5.12 + dee_resource_manager_store@Base 0.5.12 + dee_result_set_get_model@Base 0.5.2 + dee_result_set_get_n_rows@Base 0.5.2 + dee_result_set_get_type@Base 0.5.2 + dee_result_set_has_next@Base 0.5.2 + dee_result_set_next@Base 0.5.2 + dee_result_set_peek@Base 0.5.2 + dee_result_set_seek@Base 0.5.2 + dee_result_set_tell@Base 0.5.2 + dee_sequence_model_get_type@Base 0.5.2 + dee_sequence_model_new@Base 0.5.2 + dee_serializable_externalize@Base 0.5.12 + dee_serializable_get_type@Base 0.5.12 + dee_serializable_model_get_seqnum@Base 0.5.12 + dee_serializable_model_get_type@Base 0.5.12 + dee_serializable_model_inc_seqnum@Base 0.5.12 + dee_serializable_model_set_seqnum@Base 0.5.12 + dee_serializable_parse@Base 0.5.12 + dee_serializable_parse_external@Base 0.5.12 + dee_serializable_register_parser@Base 0.5.12 + dee_serializable_serialize@Base 0.5.12 + dee_server_get_client_address@Base 1.0.0 + dee_server_get_type@Base 1.0.0 + dee_server_new@Base 1.0.0 + dee_server_new_for_address@Base 1.0.0 + dee_shared_model_flush_revision_queue@Base 0.5.12 + dee_shared_model_get_peer@Base 0.5.2 + dee_shared_model_get_swarm_name@Base 0.5.2 + dee_shared_model_get_type@Base 0.5.2 + dee_shared_model_is_leader@Base 0.5.2 + dee_shared_model_is_synchronized@Base 0.5.2 + dee_shared_model_new@Base 0.5.2 + dee_shared_model_new_for_peer@Base 1.0.0 + dee_shared_model_new_with_back_end@Base 0.5.2 + dee_term_list_add_term@Base 0.5.2 + dee_term_list_clear@Base 0.5.2 + dee_term_list_clone@Base 0.5.22-1ubuntu1 + dee_term_list_get_term@Base 0.5.2 + dee_term_list_get_type@Base 0.5.2 + dee_term_list_num_terms@Base 0.5.2 + dee_text_analyzer_get_type@Base 0.5.22-1ubuntu1 + dee_text_analyzer_new@Base 0.5.22-1ubuntu1 + dee_transaction_commit@Base 1.0.0 + dee_transaction_error_quark@Base 1.0.0 + dee_transaction_get_target@Base 1.0.0 + dee_transaction_get_type@Base 1.0.0 + dee_transaction_is_committed@Base 1.0.0 + dee_transaction_new@Base 1.0.0 + dee_tree_index_get_type@Base 0.5.22-1ubuntu1 + dee_tree_index_new@Base 0.5.22-1ubuntu1 diff -Nru dee-0.5.22/debian/patches/debian-changes-0.5.22-0ubuntu1 dee-1.0.0/debian/patches/debian-changes-0.5.22-0ubuntu1 --- dee-0.5.22/debian/patches/debian-changes-0.5.22-0ubuntu1 2011-09-26 07:16:10.000000000 +0000 +++ dee-1.0.0/debian/patches/debian-changes-0.5.22-0ubuntu1 1970-01-01 00:00:00.000000000 +0000 @@ -1,345 +0,0 @@ -Description: Upstream changes introduced in version 0.5.22-0ubuntu1 - This patch has been created by dpkg-source during the package build. - Here's the last changelog entry, hopefully it gives details on why - those changes were made: - . - dee (0.5.22-0ubuntu1) oneiric; urgency=low - . - * New upstream release. - - Dee.Model.set_schema() broken in pygi (LP: #845416) - - More strict error checking in DeeSequenceModel to help consumers - (LP: #857432) - . - The person named in the Author field signed this changelog entry. -Author: Didier Roche -Bug-Ubuntu: https://bugs.launchpad.net/bugs/845416 -Bug-Ubuntu: https://bugs.launchpad.net/bugs/857432 - ---- -The information above should follow the Patch Tagging Guidelines, please -checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here -are templates for supplementary fields that you might want to add: - -Origin: , -Bug: -Bug-Debian: http://bugs.debian.org/ -Bug-Ubuntu: https://launchpad.net/bugs/ -Forwarded: -Reviewed-By: -Last-Update: - ---- /dev/null -+++ dee-0.5.22/vapi/dee-1.0-custom.vala -@@ -0,0 +1,40 @@ -+ -+namespace Dee -+{ -+ [CCode (cheader_filename = "dee.h")] -+ public interface Model : GLib.Object -+ { -+ public virtual signal void row_added (ModelIter iter); -+ public virtual signal void row_removed (ModelIter iter); -+ public virtual signal void row_changed (ModelIter iter); -+ } -+ -+ [CCode (cheader_filename = "dee.h")] -+ public class FilterModel -+ { -+ [NoAccessorMethod] -+ public unowned Filter filter { get; construct; } -+ } -+ [Compact] -+ [CCode (free_function = "g_free", cheader_filename = "dee.h")] -+ public class Filter { -+ } -+ -+ -+ [CCode (cheader_filename = "dee.h")] -+ public interface ResultSet: GLib.Object -+ { -+ [CCode (cname = "_vala_dee_result_set_next_value")] -+ public unowned Dee.ModelIter? next_value (); -+ [CCode (cname = "_vala_dee_result_set_iterator")] -+ public ResultSet iterator (); -+ } -+ -+ [CCode (cheader_filename = "dee.h")] -+ public class HashIndex : Dee.Index -+ { -+ [CCode (type = "DeeHashIndex*", has_construct_function = false)] -+ public HashIndex (Dee.Model model, Dee.Analyzer analyzer); -+ } -+ -+} ---- /dev/null -+++ dee-0.5.22/examples/synced-lists.c -@@ -0,0 +1,269 @@ -+/* -+ * Copyright (C) 2010 Canonical Ltd -+ * -+ * This program is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 3 as -+ * published by the Free Software Foundation. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program. If not, see . -+ * -+ * Authored by -+ * Neil Jagdish Patel -+ * Mikkel Kamstrup Erlandsen -+ * -+ * Compile with: -+ * -+ * gcc synced-lists.c -o synced-lists `pkg-config --libs --cflags dee gtk+-2.0` -+ * -+ */ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+static DeeModel *model; -+static GtkWidget *window; -+static GtkWidget *list; -+static GtkListStore *store; -+ -+static void -+on_row_added (DeeModel *model, DeeModelIter *iter) -+{ -+ gint i = 0; -+ gchar *str = NULL; -+ GtkTreeIter titer; -+ -+ dee_model_get (model, iter, 0, &i, 1, &str, -1); -+ -+ gtk_list_store_append (store, &titer); -+ gtk_list_store_set (store, &titer, -+ 0, g_strdup_printf ("%d", i), -+ 1, str, -+ 2, iter, -+ -1); -+ -+ g_free (str); -+} -+ -+static void -+on_row_removed (DeeModel *model, DeeModelIter *old_iter) -+{ -+ GtkTreeIter iter = { 0}; -+ -+ gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter); -+ -+ do -+ { -+ gpointer data = NULL; -+ -+ gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, -+ 2, &data, -+ -1); -+ -+ if (data == old_iter) -+ { -+ gtk_list_store_remove (store, &iter); -+ break; -+ } -+ } -+ while (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter)); -+} -+ -+static void -+on_row_changed (DeeModel *model, DeeModelIter *row_iter) -+{ -+ GtkTreeIter iter = { 0 }; -+ -+ gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter); -+ -+ do -+ { -+ gpointer data = NULL; -+ -+ gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, -+ 2, &data, -+ -1); -+ -+ if (data == row_iter) -+ { -+ gint i = 0; -+ gchar *str = NULL; -+ -+ dee_model_get (model, row_iter, 0, &i, 1, &str, -1); -+ -+ gtk_list_store_set (store, &iter, -+ 0, g_strdup_printf ("%d", i), -+ 1, str, -+ -1); -+ break; -+ } -+ } -+ while (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter)); -+} -+ -+static void -+add_row (GtkWidget *button) -+{ -+ dee_model_append (model, -+ 0, getpid (), -+ 1, "Wazza", -+ -1); -+} -+ -+static void -+remove_row (GtkWidget *button) -+{ -+ GtkTreeSelection *sel; -+ GtkTreeIter iter; -+ -+ sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (list)); -+ -+ if (gtk_tree_selection_get_selected (sel, -+ NULL, -+ &iter)) -+ { -+ gpointer data = NULL; -+ -+ gtk_tree_model_get (GTK_TREE_MODEL (store), -+ &iter, -+ 2, &data, -+ -1); -+ -+ dee_model_remove (model, data); -+ } -+ else -+ g_debug ("No selection to delete"); -+} -+ -+static void -+clear_rows (GtkWidget *button) -+{ -+ dee_model_clear (model); -+} -+ -+static void -+on_cell_edited (GtkCellRendererText *renderer, -+ gchar *path, -+ gchar *new_text, -+ gpointer old_data) -+{ -+ GtkTreeIter iter; -+ -+ if (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (store), -+ &iter, -+ path)) -+ { -+ gpointer data = NULL; -+ -+ gtk_tree_model_get (GTK_TREE_MODEL (store), -+ &iter, -+ 2, &data, -+ -1); -+ -+ dee_model_set (model, -+ (DeeModelIter *)data, -+ 1, new_text, -+ -1); -+ } -+} -+ -+gint -+main (gint argc, gchar *argv[]) -+{ -+ GtkWidget *vbox, *hbox, *scroll, *button; -+ -+ gtk_init (&argc, &argv); -+ -+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); -+ gtk_window_resize (GTK_WINDOW (window), 300, 600); -+ gtk_container_set_border_width (GTK_CONTAINER (window), 12); -+ -+ vbox = gtk_vbox_new (FALSE, 12); -+ gtk_container_add (GTK_CONTAINER (window), vbox); -+ -+ button = gtk_label_new (g_strdup_printf ("My PID: %d", getpid())); -+ g_object_set (button, "use-markup", TRUE, NULL); -+ gtk_misc_set_alignment (GTK_MISC (button), 0.5, 0.5); -+ gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); -+ -+ scroll = gtk_scrolled_window_new (NULL, NULL); -+ gtk_box_pack_start (GTK_BOX (vbox), scroll, TRUE, TRUE, 0); -+ gtk_widget_show (scroll); -+ -+ list = gtk_tree_view_new (); -+ gtk_container_add (GTK_CONTAINER (scroll), list); -+ gtk_widget_show (list); -+ -+ { -+ GtkCellRenderer *cell; -+ GtkTreeViewColumn *col; -+ -+ cell = gtk_cell_renderer_text_new (); -+ col = gtk_tree_view_column_new_with_attributes ("0", -+ cell, -+ "text", 0, -+ NULL); -+ gtk_tree_view_append_column (GTK_TREE_VIEW (list), col); -+ -+ cell = gtk_cell_renderer_text_new (); -+ g_object_set (cell, "editable", TRUE, NULL); -+ g_signal_connect (cell, "edited", -+ G_CALLBACK (on_cell_edited), NULL); -+ col = gtk_tree_view_column_new_with_attributes ("1", -+ cell, -+ "text", 1, -+ NULL); -+ gtk_tree_view_append_column (GTK_TREE_VIEW (list), col); -+ } -+ -+ hbox = gtk_hbox_new (TRUE, 12); -+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); -+ -+ button = gtk_button_new_from_stock (GTK_STOCK_ADD); -+ gtk_container_add (GTK_CONTAINER (hbox), button); -+ g_signal_connect (button, "clicked", -+ G_CALLBACK (add_row), NULL); -+ -+ button = gtk_button_new_from_stock (GTK_STOCK_REMOVE); -+ gtk_container_add (GTK_CONTAINER (hbox), button); -+ g_signal_connect (button, "clicked", -+ G_CALLBACK (remove_row), NULL); -+ -+ button = gtk_button_new_from_stock (GTK_STOCK_CLEAR); -+ gtk_container_add (GTK_CONTAINER (hbox), button); -+ g_signal_connect (button, "clicked", -+ G_CALLBACK (clear_rows), NULL); -+ -+ gtk_widget_show_all (window); -+ -+ store = gtk_list_store_new (3, -+ G_TYPE_STRING, -+ G_TYPE_STRING, -+ G_TYPE_POINTER); -+ gtk_tree_view_set_model (GTK_TREE_VIEW (list), GTK_TREE_MODEL (store)); -+ -+ model = dee_model_new ("com.canonical.Dbus.Model.Example", -+ 2, -+ G_TYPE_INT, -+ G_TYPE_STRING); -+ g_signal_connect (model, "row-added", -+ G_CALLBACK (on_row_added), NULL); -+ g_signal_connect (model, "row-removed", -+ G_CALLBACK (on_row_removed), NULL); -+ g_signal_connect (model, "row-changed", -+ G_CALLBACK (on_row_changed), NULL); -+ -+ dee_model_connect (DEE_SHARED_MODEL (model)); -+ -+ gtk_main (); -+ -+ return 0; -+} diff -Nru dee-0.5.22/debian/patches/series dee-1.0.0/debian/patches/series --- dee-0.5.22/debian/patches/series 2011-09-26 07:16:10.000000000 +0000 +++ dee-1.0.0/debian/patches/series 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -debian-changes-0.5.22-0ubuntu1 diff -Nru dee-0.5.22/debian/rules dee-1.0.0/debian/rules --- dee-0.5.22/debian/rules 2011-09-16 09:46:17.000000000 +0000 +++ dee-1.0.0/debian/rules 2012-02-01 00:49:39.000000000 +0000 @@ -7,19 +7,22 @@ %: dh --with python2 --with autoreconf $@ +override_dh_auto_configure: + dh_auto_configure -- --enable-gtk-doc + override_dh_install: rm debian/tmp/usr/lib/*.la rm debian/tmp/usr/lib/python*/dist-packages/gi/overrides/*.pyc rm debian/tmp/usr/lib/python*/dist-packages/gi/overrides/*.pyo dh_install --fail-missing - dh_python2 -pgir1.2-dee-0.5 + dh_python2 -pgir1.2-dee-1.0 override_dh_gencontrol: dh_girepository dh_gencontrol override_dh_strip: - dh_strip --dbg-package=libdee-1.0-1-dbg + dh_strip --dbg-package=libdee-1.0-4-dbg override_dh_auto_test: diff -Nru dee-0.5.22/debian/source/format dee-1.0.0/debian/source/format --- dee-0.5.22/debian/source/format 2012-02-01 00:49:39.000000000 +0000 +++ dee-1.0.0/debian/source/format 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -3.0 (quilt) diff -Nru dee-0.5.22/dee/com.canonical.Dee.Model-xml.h dee-1.0.0/dee/com.canonical.Dee.Model-xml.h --- dee-0.5.22/dee/com.canonical.Dee.Model-xml.h 2011-09-23 14:17:09.000000000 +0000 +++ dee-1.0.0/dee/com.canonical.Dee.Model-xml.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -static const gchar com_canonical_Dee_Model_xml[] = -"" -"" -" " -"" -" " -" " -" " -" " -" " -" " -" " -" " -" " -"" -" " -"" -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -"" -; diff -Nru dee-0.5.22/dee/dbus/com.canonical.Dee.Model.xml dee-1.0.0/dee/dbus/com.canonical.Dee.Model.xml --- dee-0.5.22/dee/dbus/com.canonical.Dee.Model.xml 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dbus/com.canonical.Dee.Model.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru dee-0.5.22/dee/dbus/com.canonical.Dee.Peer.xml dee-1.0.0/dee/dbus/com.canonical.Dee.Peer.xml --- dee-0.5.22/dee/dbus/com.canonical.Dee.Peer.xml 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dbus/com.canonical.Dee.Peer.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru dee-0.5.22/dee/dee-analyzers.c dee-1.0.0/dee/dee-analyzers.c --- dee-0.5.22/dee/dee-analyzers.c 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-analyzers.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,259 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by: - * Mikkel Kamstrup Erlandsen - */ - -/** - * SECTION:dee-analyzers - * @title: Analyzers - * @short_description: A suite of simple #DeeAnalyzers of common operations - * @include: dee.h - * - */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "dee-model.h" -#include "dee-analyzers.h" -#include "trace-log.h" - -/* - * FORWARDS - */ -static void _dee_analyze_key_func (DeeModel *model, - DeeModelIter *iter, - DeeTermList *out_terms, - gpointer userdata); - -static void _dee_analyze_full_text_func (DeeModel *model, - DeeModelIter *iter, - DeeTermList *out_terms, - gpointer userdata); - -/* - * ANALYZER FUNCS - */ -static void -_dee_analyze_key_func (DeeModel *model, - DeeModelIter *iter, - DeeTermList *out_terms, - gpointer userdata) -{ - const gchar *val; - - val = dee_model_get_string (model, iter, GPOINTER_TO_UINT (userdata)); - dee_term_list_add_term (out_terms, val); -} - -static void -_dee_analyze_full_text_func (DeeModel *model, - DeeModelIter *iter, - DeeTermList *out_terms, - gpointer userdata) -{ - GPtrArray *term_array; - const gchar *val, *p, *last_term, *end; - gchar *term, *_term; - gunichar chr; - gint term_len_bytes, i; - - val = dee_model_get_string (model, iter, GPOINTER_TO_UINT (userdata)); - - if (!g_utf8_validate (val, -1, &end)) - { - g_warning ("Unable to analyze invalid UTF-8: %s", val); - return; - } - - term_array = g_ptr_array_new (); - g_ptr_array_set_free_func (term_array, (GDestroyNotify) g_free); - - /* Split on non-alphanumeric characters - * Watch out: "Clever" pointer arithmetic ahead... :-) */ - p = val; - last_term = val; - while (p != end) - { - chr = g_utf8_get_char (p); - if (!g_unichar_isalnum(chr) || p == end) - { - term_len_bytes = p - last_term; - term = g_strndup (last_term, term_len_bytes); - g_ptr_array_add (term_array, term); - - while (!g_unichar_isalnum(chr) && p != end) - { - p = g_utf8_next_char (p); - chr = g_utf8_get_char (p); - } - - last_term = p; - continue; - } - - p = g_utf8_next_char (p); - }; - - if (last_term != p) - { - term_len_bytes = p - last_term; - term = g_strndup (last_term, term_len_bytes); - g_ptr_array_add (term_array, term); - } - - /* Normalize terms , lowercase them, and add them to the term list */ - for (i = 0; i < term_array->len; i++) - { - term = g_ptr_array_index (term_array, i); - term = g_utf8_normalize (term, -1, G_NORMALIZE_ALL_COMPOSE); - _term = g_utf8_strdown (term, -1); - - dee_term_list_add_term (out_terms, _term); - - g_free (term); - g_free (_term); - } - - g_ptr_array_unref (term_array); -} - -static void -_dee_analyze_int32_func (DeeModel *model, - DeeModelIter *iter, - DeeTermList *out_terms, - gpointer userdata) -{ - gint32 val; - gchar *term; - - val = dee_model_get_int32 (model, iter, GPOINTER_TO_UINT (userdata)); - term = g_strdup_printf ("%i", val); - dee_term_list_add_term (out_terms, term); - g_free (term); -} - -static void -_dee_analyze_uint32_func (DeeModel *model, - DeeModelIter *iter, - DeeTermList *out_terms, - gpointer userdata) -{ - guint32 val; - gchar *term; - - val = dee_model_get_uint32 (model, iter, GPOINTER_TO_UINT (userdata)); - term = g_strdup_printf ("%u", val); - dee_term_list_add_term (out_terms, term); - g_free (term); -} - -/* - * API - */ - -/** - * dee_analyzer_new_for_key_column: - * @column: The index of the column to get strings from - * - * Create a #DeeAnalyzer that takes the string from a column in the model - * and treats that string as one single term. - * - * Returns: (transfer full): A newly allocated #DeeAnalyzer. Do not modify it. - * Free with g_free(). - */ -DeeAnalyzer* -dee_analyzer_new_for_key_column (guint column) -{ - DeeAnalyzer *analyzer; - - analyzer = g_new0 (DeeAnalyzer, 1); - analyzer->analyze = _dee_analyze_key_func; - analyzer->userdata = GUINT_TO_POINTER (column); - - return analyzer; -} - -/** - * dee_analyzer_new_for_full_text_column: - * @column: The index of the column to get full text from - * - * Create a #DeeAnalyzer that does a (simple) full text analysis of textual - * data in some column. - * - * The terms will be split on any non-alphanumeric character, run through - * g_utf8_normalize(), and then g_utf8_strdown(). - * - * Returns: (transfer full): A newly allocated #DeeAnalyzer. Do not modify it. - * Free with g_free(). - */ -DeeAnalyzer* -dee_analyzer_new_for_full_text_column (guint column) -{ - DeeAnalyzer *analyzer; - - analyzer = g_new0 (DeeAnalyzer, 1); - analyzer->analyze = _dee_analyze_full_text_func; - analyzer->userdata = GUINT_TO_POINTER (column); - - return analyzer; -} - -/** - * dee_analyzer_new_for_int32_column: - * @column: The index of the column to get a %gint32 from - * - * Create a #DeeAnalyzer that extracts an 32 bit integer from a given column - * in a #DeeModel. - * - * Returns: (transfer full): A newly allocated #DeeAnalyzer. Do not modify it. - * Free with g_free(). - */ -DeeAnalyzer* -dee_analyzer_new_for_int32_column (guint column) -{ - DeeAnalyzer *analyzer; - - analyzer = g_new0 (DeeAnalyzer, 1); - analyzer->analyze = _dee_analyze_int32_func; - analyzer->userdata = GUINT_TO_POINTER (column); - - return analyzer; -} - -/** - * dee_analyzer_new_for_uint32_column: - * @column: The index of the column to get a %guint32 from - * - * Create a #DeeAnalyzer that extracts an unsigned 32 integer from a given - * column in a #DeeModel. - * - * Returns: (transfer full): A newly allocated #DeeAnalyzer. Do not modify it. - * Free with g_free(). - */ -DeeAnalyzer* -dee_analyzer_new_for_uint32_column (guint column) -{ - DeeAnalyzer *analyzer; - - analyzer = g_new0 (DeeAnalyzer, 1); - analyzer->analyze = _dee_analyze_uint32_func; - analyzer->userdata = GUINT_TO_POINTER (column); - - return analyzer; -} diff -Nru dee-0.5.22/dee/dee-analyzers.h dee-1.0.0/dee/dee-analyzers.h --- dee-0.5.22/dee/dee-analyzers.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-analyzers.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -#if !defined (_DEE_H_INSIDE) && !defined (DEE_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef _HAVE_DEE_ANALYZERS_H -#define _HAVE_DEE_ANALYZERS_H - -#include -#include -#include - -G_BEGIN_DECLS - -DeeAnalyzer* dee_analyzer_new_for_key_column (guint column); - -DeeAnalyzer* dee_analyzer_new_for_full_text_column (guint column); - -DeeAnalyzer* dee_analyzer_new_for_int32_column (guint column); - -DeeAnalyzer* dee_analyzer_new_for_uint32_column (guint column); - -G_END_DECLS - -#endif /* _HAVE_DEE_ANALYZERS_H */ diff -Nru dee-0.5.22/dee/dee-file-resource-manager.c dee-1.0.0/dee/dee-file-resource-manager.c --- dee-0.5.22/dee/dee-file-resource-manager.c 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-file-resource-manager.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,437 +0,0 @@ -/* - * Copyright (C) 2009 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by: - * Mikkel Kamstrup Erlandsen - */ - -/** - * SECTION:dee-file-resource-manager - * @short_description: A resource manager backed by memory mapped files - * - * This is an implementation of the #DeeResourceManager interface. - * It uses atomic operations to write resources to files and memory maps - * the resource files when you load them. - * - * Unless you have very specific circumstances you should normally not - * create resource managers yourself, but get the default one for your - * platform by calling dee_resource_manager_get_default(). - * - */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include // for chmod codes for g_mkdir_with_parents() - -#include "dee-file-resource-manager.h" -#include "trace-log.h" - -static void dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface); -G_DEFINE_TYPE_WITH_CODE (DeeFileResourceManager, - dee_file_resource_manager, - G_TYPE_OBJECT, - G_IMPLEMENT_INTERFACE (DEE_TYPE_RESOURCE_MANAGER, - dee_file_resource_manager_resource_manager_iface_init)) - -#define DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerPrivate)) - -enum -{ - PROP_0, - PROP_PRIMARY_PATH, -}; - -typedef struct -{ - /* Directories to search for resources. The primary-path is stored - * as element 0 in this list */ - GSList *resource_dirs; - - /* Resource monitor ids -> GFileMonitors */ - GHashTable *monitors_by_id; -} DeeFileResourceManagerPrivate; - -/* GObject Init */ -static void -dee_file_resource_manager_finalize (GObject *object) -{ - DeeFileResourceManagerPrivate *priv; - - priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object); - - g_slist_free_full (priv->resource_dirs, g_free); - priv->resource_dirs = NULL; - - if (priv->monitors_by_id) - { - g_hash_table_unref (priv->monitors_by_id); - priv->monitors_by_id = NULL; - } - - G_OBJECT_CLASS (dee_file_resource_manager_parent_class)->finalize (object); -} - -static void -dee_file_resource_manager_set_property (GObject *object, - guint id, - const GValue *value, - GParamSpec *pspec) -{ - DeeResourceManager *self = DEE_RESOURCE_MANAGER (object); - gchar *path; - - switch (id) - { - case PROP_PRIMARY_PATH: - /* Assume ownership of filter */ - path = g_value_dup_string(value); - if (path == NULL) - { - path = g_build_filename (g_get_user_data_dir (), "resources", NULL); - } - dee_file_resource_manager_add_search_path (self, path); - g_free (path); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, id, pspec); - break; - } -} - -static void -dee_file_resource_manager_get_property (GObject *object, - guint id, - GValue *value, - GParamSpec *pspec) -{ - DeeFileResourceManagerPrivate *priv; - - priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (object); - - switch (id) - { - case PROP_PRIMARY_PATH: - g_value_set_string (value, priv->resource_dirs != NULL ? - priv->resource_dirs->data : NULL); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, id, pspec); - break; - } -} - -static void -dee_file_resource_manager_class_init (DeeFileResourceManagerClass *klass) -{ - GParamSpec *pspec; - GObjectClass *obj_class = G_OBJECT_CLASS (klass); - - obj_class->finalize = dee_file_resource_manager_finalize; - obj_class->get_property = dee_file_resource_manager_get_property; - obj_class->set_property = dee_file_resource_manager_set_property; - - /** - * DeeFileResourceManager:primary-path: - * - * Property holding the primary path used to store and load resources - */ - pspec = g_param_spec_string("primary-path", "Primary path", - "The primary path to to store and load resources from", - NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY - | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (obj_class, PROP_PRIMARY_PATH, pspec); - - /* Add private data */ - g_type_class_add_private (obj_class, sizeof (DeeFileResourceManagerPrivate)); -} - -static void -dee_file_resource_manager_init (DeeFileResourceManager *self) -{ - DeeFileResourceManagerPrivate *priv; - - priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self); - priv->resource_dirs = NULL; - priv->monitors_by_id = g_hash_table_new_full(g_direct_hash, - g_direct_equal, - NULL, - (GDestroyNotify) g_object_unref); -} - -/** - * dee_file_resource_manager_new: - * @primary_path: The primary path used to store and load resources. - * If you pass %NULL the manager will use a default path. - * - * Create a new #DeeFileResourceManager with its primary store- and load - * path set to @primary_path. - * - * You can manually add fallback search paths by calling - * dee_file_resource_manager_add_search_path(). - * - * You normally don't need to create you own resource managers. Instead - * you should call dee_resource_manager_get_default(). - * - * Return value: (transfer full): A newly allocated #DeeFileResourceManager. - * Free with g_object_unref(). - */ -DeeResourceManager* -dee_file_resource_manager_new (const gchar *primary_path) -{ - DeeResourceManager *self; - - self = DEE_RESOURCE_MANAGER (g_object_new (DEE_TYPE_FILE_RESOURCE_MANAGER, - "primary-path", primary_path, - NULL)); - - return self; -} - -/** - * dee_file_resource_manager_add_search_path: - * @self: The resource manager to add a search path to - * @path: The path to add to the set of searched paths - * - * Add a path to the set of paths searched for resources. The manager will - * first search the primary path as specified in the constructor and then - * search paths in the order they where added. - */ -void -dee_file_resource_manager_add_search_path (DeeResourceManager *self, - const gchar *path) -{ - DeeFileResourceManagerPrivate *priv; - - g_return_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self)); - g_return_if_fail (path != NULL); - - priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self); - priv->resource_dirs = g_slist_append (priv->resource_dirs, - g_strdup (path)); -} - -/** - * dee_file_resource_manager_get_primary_path: - * @self: The resource manager to inspect - * - * Helper method to access the :primary-path property. - * - * Return value: The value of the :primary-path property - */ -const gchar* -dee_file_resource_manager_get_primary_path (DeeResourceManager *self) -{ - DeeFileResourceManagerPrivate *priv; - - g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL); - - priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self); - return (const gchar *) priv->resource_dirs->data; -} - -static gboolean -dee_file_resource_manager_store (DeeResourceManager *self, - DeeSerializable *resource, - const gchar *resource_name, - GError **error) -{ - GVariant *external; - gsize size; - gchar *buf, *path; - const gchar *primary_path; - gboolean stack_allocated_buffer, result, did_retry = FALSE; - GError *local_error; - - g_return_val_if_fail (DEE_IS_RESOURCE_MANAGER (self), FALSE); - g_return_val_if_fail (DEE_IS_SERIALIZABLE (resource), FALSE); - g_return_val_if_fail (resource_name != NULL, FALSE); - g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - - external = dee_serializable_externalize (resource); - - if (external == NULL) - { - /* This is a programming error, not a runtime error, we don't - * set the error value */ - g_critical ("When writing DeeSerializable %s@%p to the file %s " - "externalize() returned NULL", - G_OBJECT_TYPE_NAME (resource), resource, resource_name); - return FALSE; - } - - size = g_variant_get_size (external); - - /* For less than ½MB structures we use a stack-allocated buffer, - * for bigger sizes we use a heap allocated buffer to avoid - * stack overflows */ - if (size < 524288) - { - buf = g_alloca (size); - stack_allocated_buffer = TRUE; - } - else - { - buf = g_malloc (size); - stack_allocated_buffer = FALSE; - } - - /* Note: Since we're using mmap() in read_from_file() we need atomic - * IO operations. Hence g_file_set_contents(). */ - g_variant_store (external, buf); - primary_path = dee_file_resource_manager_get_primary_path (self); - path = g_build_filename (primary_path, resource_name, NULL); - - store: - local_error = NULL; - result = g_file_set_contents(path, buf, size, &local_error); - - if (local_error) - { - /* The resource directory might not exist - try to create it, - * and then try over */ - if (local_error->domain == G_FILE_ERROR && - local_error->code == G_FILE_ERROR_NOENT && - !did_retry) - { - trace_object (self, "Failed to write resource %s, " - "parent directory %s does not exist. " - "Trying to create it", - resource_name, primary_path); - g_error_free (local_error); - g_mkdir_with_parents (primary_path, S_IRUSR | S_IWUSR | S_IXUSR); // read+write+exec user only permissions - did_retry = TRUE; - goto store; - } - else - { - g_propagate_error (error, local_error); - goto out; - } - } - - out: - if (result) - trace_object (self, "Successfully stored %s", path); - else - trace_object (self, "Failed to store %s", path); - - g_free (path); - - if (!stack_allocated_buffer) - g_free (buf); - - g_variant_unref (external); - - return result; -} - -static GObject* -_load_resource_from_file (const gchar *filename, - GError **error) -{ - GMappedFile *map; - gsize map_size; - gchar *contents; - GVariant *external; - GObject *object; - GError *local_error = NULL; - - g_return_val_if_fail (filename != NULL, FALSE); - g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - - map = g_mapped_file_new (filename, FALSE, &local_error); - - if (local_error) - { - g_propagate_error (error, local_error); - return NULL; - } - - contents = g_mapped_file_get_contents (map); - map_size = g_mapped_file_get_length (map); - external = g_variant_new_from_data (G_VARIANT_TYPE ("(ua{sv}v)"), - contents, - map_size, - FALSE, - (GDestroyNotify) g_mapped_file_unref, - map); - - object = dee_serializable_parse_external (external); - g_variant_unref (external); // should free the mapped file as well - - return object; -} - -static GObject* -dee_file_resource_manager_load (DeeResourceManager *self, - const gchar *resource_name, - GError **error) -{ - DeeFileResourceManagerPrivate *priv; - gchar *resource_path; - GSList *iter; - GError *local_error; - GObject *object = NULL; - - g_return_val_if_fail (DEE_IS_FILE_RESOURCE_MANAGER (self), NULL); - g_return_val_if_fail (resource_name != NULL, NULL); - g_return_val_if_fail (error == NULL || *error == NULL, NULL); - - priv = DEE_FILE_RESOURCE_MANAGER_GET_PRIVATE (self); - - for (iter = priv->resource_dirs; iter != NULL; iter = iter->next) - { - resource_path = g_build_filename (iter->data, resource_name, NULL); - - trace_object (self, "Looking up resource %s in %s", - resource_name, iter->data); - - local_error = NULL; - object = _load_resource_from_file (resource_path, &local_error); - g_free (resource_path); - - /* If we get any error except no-such-file-or-directory we bail out */ - if (local_error != NULL) - { - if (local_error->domain == G_FILE_ERROR && - local_error->code == G_FILE_ERROR_NOENT) - { - continue; - } - else - { - g_propagate_error (error, local_error); - break; - } - } - - if (object != NULL) - break; - } - - return object; -} - -static void -dee_file_resource_manager_resource_manager_iface_init (DeeResourceManagerIface *iface) -{ - iface->store = dee_file_resource_manager_store; - iface->load = dee_file_resource_manager_load; -} - diff -Nru dee-0.5.22/dee/dee-file-resource-manager.h dee-1.0.0/dee/dee-file-resource-manager.h --- dee-0.5.22/dee/dee-file-resource-manager.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-file-resource-manager.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2009 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -#ifndef _DEE_FILE_RESOURCE_MANAGER_H_ -#define _DEE_FILE_RESOURCE_MANAGER_H_ - -#include -#include -#include - -G_BEGIN_DECLS - -#define DEE_TYPE_FILE_RESOURCE_MANAGER (dee_file_resource_manager_get_type ()) - -#define DEE_FILE_RESOURCE_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManager)) - -#define DEE_FILE_RESOURCE_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \ - DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerClass)) - -#define DEE_IS_FILE_RESOURCE_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - DEE_TYPE_FILE_RESOURCE_MANAGER)) - -#define DEE_IS_FILE_RESOURCE_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - DEE_TYPE_FILE_RESOURCE_MANAGER)) - -#define DEE_FILE_RESOURCE_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - DEE_TYPE_FILE_RESOURCE_MANAGER, DeeFileResourceManagerClass)) - -typedef struct _DeeFileResourceManager DeeFileResourceManager; -typedef struct _DeeFileResourceManagerClass DeeFileResourceManagerClass; - -struct _DeeFileResourceManager -{ - GObject parent_instance; -}; - -struct _DeeFileResourceManagerClass -{ - GObjectClass parent_class; -}; - -GType dee_file_resource_manager_get_type (void) G_GNUC_CONST; - -DeeResourceManager* dee_file_resource_manager_new (const gchar *primary_path); - -void dee_file_resource_manager_add_search_path (DeeResourceManager *self, - const gchar *path); - -const gchar* dee_file_resource_manager_get_primary_path (DeeResourceManager *self); - -G_END_DECLS - -#endif /* _DEE_FILE_RESOURCE_MANAGER_H_ */ diff -Nru dee-0.5.22/dee/dee-filter-model.c dee-1.0.0/dee/dee-filter-model.c --- dee-0.5.22/dee/dee-filter-model.c 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-filter-model.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,984 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by: - * Mikkel Kamstrup Erlandsen - */ - -/** - * SECTION:dee-filter-model - * @short_description: A #DeeModel that contains a filtered subset of - * another #DeeModel - * @include: dee.h - * - * A #DeeFilterModel should be regarded as a view on a specific subset of - * of another #DeeModel, filtered according to a given "filtering rule". - * - * Filter models re-use the #DeeModelIters of the back end model they - * filter. This means that any iter from the filter model can be used directly - * on the back end model. This is a powerful invariant, but implies the - * restriction that a row in the filter model contains the exact same data - * as the corresponding row in the back end model (ie. you can not apply - * a "transfomation map" to the filtered data). - * - * The reuse of row iters also minimizes the amount of memory shuffling needed - * to set up a filter model. The filtering functions, #DeeModelMapFunc and - * #DeeModelMapNotify, has also been designed to minimize the amount of work - * done to create a filter model. So if the filter functions are written - * optimally the resulting filter models should be cheap to construct. - * - * Another important feature of the filter model is also that the rows - * need not be in the same order as the original rows in the back end model. - * - * There is a suite of filters shipped with Dee which you can browse in the - * Filters section. - * - */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "dee-peer.h" -#include "dee-model.h" -#include "dee-proxy-model.h" -#include "dee-filter-model.h" -#include "dee-serializable-model.h" -#include "dee-sequence-model.h" -#include "dee-marshal.h" -#include "trace-log.h" - -static void dee_filter_model_model_iface_init (DeeModelIface *iface); - -G_DEFINE_TYPE_WITH_CODE (DeeFilterModel, - dee_filter_model, - DEE_TYPE_PROXY_MODEL, - G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL, - dee_filter_model_model_iface_init)); - -#define DEE_FILTER_MODEL_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_FILTER_MODEL, DeeFilterModelPrivate)) - -/** - * DeeFilterModelPrivate: - * - * Ignore this structure. - **/ -struct _DeeFilterModelPrivate -{ - DeeFilter *filter; - DeeModel *orig_model; - - /* Map of orig_model iters to our own internal GSequenceIters for iter_list */ - GHashTable *iter_map; - - /* Sequence use to keep track of the sorting of iters from iter_map */ - GSequence *iter_list; - - /* When TRUE signals from orig_model will not be forwarded or checked - * via the filter->map_notify function */ - gboolean ignore_orig_signals; - - gulong on_orig_row_added_id; - gulong on_orig_row_removed_id; - gulong on_orig_row_changed_id; -}; - -enum -{ - PROP_0, - PROP_FILTER, -}; - -/* - * DeeModel forward declarations - */ -static void dee_filter_model_set_schema_full (DeeModel *self, - const gchar* const *schema, - guint n_columns); - -static guint dee_filter_model_get_n_rows (DeeModel *self); - -static DeeModelIter* dee_filter_model_append_row (DeeModel *self, - GVariant **row_members); - -static DeeModelIter* dee_filter_model_prepend_row (DeeModel *self, - GVariant **row_members); - -static DeeModelIter* dee_filter_model_insert_row_before (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members); - -static void dee_filter_model_remove (DeeModel *self, - DeeModelIter *iter); - -static DeeModelIter* dee_filter_model_get_first_iter (DeeModel *self); - -static DeeModelIter* dee_filter_model_get_iter_at_row (DeeModel *self, - guint row); - -static DeeModelIter* dee_filter_model_next (DeeModel *self, - DeeModelIter *iter); - -static DeeModelIter* dee_filter_model_prev (DeeModel *self, - DeeModelIter *iter); - -static gboolean dee_filter_model_is_first (DeeModel *self, - DeeModelIter *iter); - -static guint dee_filter_model_get_position (DeeModel *self, - DeeModelIter *iter); - -/* Private forward declarations */ -static gboolean dee_filter_model_is_empty (DeeModel *self); - -static void on_orig_model_row_added (DeeFilterModel *self, - DeeModelIter *iter); - -static void on_orig_model_row_removed (DeeFilterModel *self, - DeeModelIter *iter); - -static void on_orig_model_row_changed (DeeFilterModel *self, - DeeModelIter *iter); - -/* GObject stuff */ -static void -dee_filter_model_finalize (GObject *object) -{ - DeeFilterModelPrivate *priv = DEE_FILTER_MODEL (object)->priv; - - if (priv->filter) - { - if (priv->filter->user_data && priv->filter->destroy) - { - priv->filter->destroy (priv->filter->user_data); - } - g_free (priv->filter); - } - - if (priv->iter_map) - { - g_hash_table_destroy (priv->iter_map); - } - if (priv->iter_list) - { - g_sequence_free (priv->iter_list); - } - - if (priv->on_orig_row_added_id != 0) - g_signal_handler_disconnect (priv->orig_model, priv->on_orig_row_added_id); - if (priv->on_orig_row_removed_id != 0) - g_signal_handler_disconnect (priv->orig_model, priv->on_orig_row_removed_id); - if (priv->on_orig_row_changed_id != 0) - g_signal_handler_disconnect (priv->orig_model, priv->on_orig_row_changed_id); - - G_OBJECT_CLASS (dee_filter_model_parent_class)->finalize (object); -} - -static void -dee_filter_model_constructed (GObject *object) -{ - DeeFilterModelPrivate *priv = DEE_FILTER_MODEL (object)->priv; - DeeFilter *filter = priv->filter; - - if (filter == NULL) - { - g_critical ("You must set the 'filter' property when " - "creating a DeeFilterModel"); - return; - } - - g_object_get (object, "back-end", &(priv->orig_model), NULL); - - /* Map the end iter of the orig_model to the end iter of our iter list */ - g_hash_table_insert (priv->iter_map, - dee_model_get_last_iter (priv->orig_model), - g_sequence_get_end_iter (priv->iter_list)); - - /* Apply filter to orig_model in order to fill this model */ - filter->map_func (priv->orig_model, - DEE_FILTER_MODEL (object), - filter->user_data); - - /* Listen for changes to orig_model */ - priv->on_orig_row_added_id = - g_signal_connect_swapped (priv->orig_model, "row-added", - G_CALLBACK (on_orig_model_row_added), object); - - priv->on_orig_row_removed_id = - g_signal_connect_swapped (priv->orig_model, "row-removed", - G_CALLBACK (on_orig_model_row_removed), object); - - priv->on_orig_row_changed_id = - g_signal_connect_swapped (priv->orig_model, "row-changed", - G_CALLBACK (on_orig_model_row_changed), object); - - if (G_OBJECT_CLASS (dee_filter_model_parent_class)->constructed) - G_OBJECT_CLASS (dee_filter_model_parent_class)->constructed (object); -} - -static void -dee_filter_model_set_property (GObject *object, - guint id, - const GValue *value, - GParamSpec *pspec) -{ - DeeFilterModelPrivate *priv = DEE_FILTER_MODEL (object)->priv; - - switch (id) - { - case PROP_FILTER: - /* Assume ownership of filter */ - priv->filter = g_value_get_pointer (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, id, pspec); - break; - } -} - -static void -dee_filter_model_get_property (GObject *object, - guint id, - GValue *value, - GParamSpec *pspec) -{ - switch (id) - { - case PROP_FILTER: - g_value_set_pointer (value, DEE_FILTER_MODEL (object)->priv->filter); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, id, pspec); - break; - } -} - -static void -dee_filter_model_class_init (DeeFilterModelClass *klass) -{ - GParamSpec *pspec; - GObjectClass *obj_class = G_OBJECT_CLASS (klass); - - obj_class->finalize = dee_filter_model_finalize; - obj_class->constructed = dee_filter_model_constructed; - obj_class->get_property = dee_filter_model_get_property; - obj_class->set_property = dee_filter_model_set_property; - - /** - * DeeFilterModel:filter: - * - * Property holding the #DeeFilter used to filter the model - * defined in the #DeeFilterModel:back-end property. - */ - pspec = g_param_spec_pointer ("filter", "Filter", - "Filtering rules applied to the original model", - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY - | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (obj_class, PROP_FILTER, pspec); - - /* Add private data */ - g_type_class_add_private (obj_class, sizeof (DeeFilterModelPrivate)); -} - -static void -dee_filter_model_init (DeeFilterModel *self) -{ - DeeFilterModelPrivate *priv; - - priv = self->priv = DEE_FILTER_MODEL_GET_PRIVATE (self); - - priv->iter_map = g_hash_table_new (g_direct_hash, g_direct_equal); - priv->iter_list = g_sequence_new (NULL); - - priv->ignore_orig_signals = FALSE; - priv->on_orig_row_added_id = 0; - priv->on_orig_row_removed_id = 0; - priv->on_orig_row_changed_id = 0; -} - -static void -dee_filter_model_model_iface_init (DeeModelIface *iface) -{ - /* Override column spec setters as that would cause a mess... */ - iface->set_schema_full = dee_filter_model_set_schema_full; - iface->get_n_rows = dee_filter_model_get_n_rows; - iface->prepend_row = dee_filter_model_prepend_row; - iface->append_row = dee_filter_model_append_row; - iface->insert_row_before = dee_filter_model_insert_row_before; - iface->remove = dee_filter_model_remove; - iface->get_first_iter = dee_filter_model_get_first_iter; - iface->get_iter_at_row = dee_filter_model_get_iter_at_row; - iface->next = dee_filter_model_next; - iface->prev = dee_filter_model_prev; - iface->is_first = dee_filter_model_is_first; - iface->get_position = dee_filter_model_get_position; -} - -/* - * Public API - */ - -/** - * dee_filter_model_new: - * @filter: Structure containing the logic used to create the filter model. - * The filter model will create it's own copy of @filter so unless - * @filter is allocated statically or on the stack you need to free it - * after calling this method. - * @orig_model: The back end model. This will be set as the - * #DeeProxyModel:back-end property - * - * Returns: (transfer full): A newly allocated #DeeFilterModel. Free with g_object_unref(). - */ -DeeModel* -dee_filter_model_new (const DeeFilter *filter, - DeeModel *orig_model) -{ - DeeModel *self; - DeeFilter *_filter; - - _filter = g_new0 (DeeFilter, 1); - _filter->map_func = filter->map_func; - _filter->map_notify = filter->map_notify; - _filter->destroy = filter->destroy; - _filter->user_data = filter->user_data; - - self = DEE_MODEL (g_object_new (DEE_TYPE_FILTER_MODEL, - "filter", _filter, - "back-end", orig_model, - "proxy-signals", FALSE, - NULL)); - return self; -} - -/** - * dee_filter_model_contains: - * @self: The #DeeFilterModel to check - * @iter: (transfer none):The #DeeModelIter to check - * - * Check if @iter from the back end model is mapped in @self. - * - * Returns: %TRUE if and only if @iter is contained in @self. - */ -gboolean -dee_filter_model_contains (DeeFilterModel *self, - DeeModelIter *iter) -{ - g_return_val_if_fail (DEE_IS_FILTER_MODEL (self), FALSE); - - return g_hash_table_lookup (self->priv->iter_map, iter) != NULL; -} - -/** - * dee_filter_model_append_iter: - * @self: - * @iter: - * - * Includes @iter from the back end model in the filtered model, appending - * it to the end of the filtered rows. - * - * This method is usually called when implementing #DeeModelMapFunc or - * #DeeModelMapNotify methods. - * - * Return value: (transfer none): Always returns @iter - */ -DeeModelIter* -dee_filter_model_append_iter (DeeFilterModel *self, - DeeModelIter *iter) -{ - DeeFilterModelPrivate *priv; - GSequenceIter *seq_iter; - - g_return_val_if_fail (DEE_IS_FILTER_MODEL (self), NULL); - g_return_val_if_fail (!dee_model_is_last ((DeeModel*)self, iter), NULL); - - priv = self->priv; - seq_iter = g_hash_table_lookup (priv->iter_map, iter); - - if (seq_iter != NULL) - { - g_critical ("Iter already present in DeeFilterModel"); - return NULL; - } - - seq_iter = g_sequence_append (priv->iter_list, iter); - g_hash_table_insert (priv->iter_map, iter, seq_iter); - - g_signal_emit_by_name (self, "row-added", iter); - - return iter; -} - -/** - * dee_filter_model_prepend_iter: - * @self: - * @iter: - * - * Includes @iter from the back end model in the filtered model, prepending - * it to the beginning of the filtered rows. - * - * This method is usually called when implementing #DeeModelMapFunc or - * #DeeModelMapNotify methods. - * - * Return value: (transfer none): Always returns @iter - */ -DeeModelIter* -dee_filter_model_prepend_iter (DeeFilterModel *self, - DeeModelIter *iter) -{ - DeeFilterModelPrivate *priv; - GSequenceIter *seq_iter; - - g_return_val_if_fail (DEE_IS_FILTER_MODEL (self), NULL); - - priv = self->priv; - seq_iter = g_hash_table_lookup (priv->iter_map, iter); - - if (seq_iter != NULL) - { - g_critical ("Iter already present in DeeFilterModel"); - return NULL; - } - - seq_iter = g_sequence_prepend (priv->iter_list, iter); - g_hash_table_insert (priv->iter_map, iter, seq_iter); - - g_signal_emit_by_name (self, "row-added", iter); - - return iter; -} - -/** - * dee_filter_model_insert_iter: - * @self: - * @iter: - * @pos: - * - * Includes @iter from the back end model in the filtered model, inserting it at - * @pos pushing other rows down. - * - * This method is usually called when implementing #DeeModelMapFunc or - * #DeeModelMapNotify methods. - * - * Return value: (transfer none): Always returns @iter - */ -DeeModelIter* -dee_filter_model_insert_iter (DeeFilterModel *self, - DeeModelIter *iter, - guint pos) -{ - DeeModelIter *pos_iter; - - g_return_val_if_fail (DEE_IS_FILTER_MODEL (self), NULL); - - pos_iter = dee_model_get_iter_at_row (DEE_MODEL (self), pos); - - return dee_filter_model_insert_iter_before (self, iter, pos_iter); -} - -/** - * dee_filter_model_insert_iter_before: - * @self: - * @iter: - * @pos: - * - * Includes @iter from the back end model in the filtered model, inserting it at - * the position before @pos pushing other rows down. - * - * This method is usually called when implementing #DeeModelMapFunc or - * #DeeModelMapNotify methods. - * - * Return value: (transfer none): Always returns @iter - */ -DeeModelIter* -dee_filter_model_insert_iter_before (DeeFilterModel *self, - DeeModelIter *iter, - DeeModelIter *pos) -{ - DeeFilterModelPrivate *priv; - GSequenceIter *seq_iter; - - g_return_val_if_fail (DEE_IS_FILTER_MODEL (self), NULL); - - priv = self->priv; - - seq_iter = g_hash_table_lookup (priv->iter_map, iter); - if (seq_iter != NULL) - { - g_critical ("Iter already present in DeeFilterModel"); - return NULL; - } - - seq_iter = g_hash_table_lookup (priv->iter_map, pos); - if (seq_iter == NULL) - { - g_critical ("Can not insert iter. Position iter not " - "present in DeeFilterModel"); - return NULL; - } - - seq_iter = g_sequence_insert_before (seq_iter, iter); - g_hash_table_insert (priv->iter_map, iter, seq_iter); - - g_signal_emit_by_name (self, "row-added", iter); - - return iter; -} - -/** - * dee_filter_model_insert_iter_with_original_order: - * @self: - * @iter: - * - * Inserts @iter in @self in a way that is consistent with the ordering of the - * rows in the original #DeeModel behind @self. THis method assumes that @self - * is already ordered this way. If that's not the case then this method has - * undefined behaviour. - * - * This method is mainly intended as a helper for #DeeModelMapNotify functions - * of #DeeFilter implementations that creates filter models sorted in - * accordance with the original models. - * - * Return value:(transfer none): Always returns @iter - */ -DeeModelIter* -dee_filter_model_insert_iter_with_original_order (DeeFilterModel *self, - DeeModelIter *iter) -{ - DeeFilterModelPrivate *priv; - DeeModel *orig_model; - DeeModelIter *probe, *end; - - g_return_val_if_fail (DEE_IS_FILTER_MODEL (self), NULL); - g_return_val_if_fail (iter != NULL, NULL); - - priv = self->priv; - orig_model = priv->orig_model; - - /* We find the first row *after* iter which is both in orig_model and the - * filter model and insert iter *before* that row in the filter model. - * This should assure the sorting is consistent between the models - * (assuming it already was consistent before we started) */ - probe = dee_model_next (orig_model, iter); - end = dee_model_get_last_iter (orig_model); - while (probe != end) - { - if (dee_filter_model_contains (self, probe)) - { - dee_filter_model_insert_iter_before (self, iter, probe); - return iter; - } - probe = dee_model_next (orig_model, probe); - } - - /* We made it to the end without finding a suitable place, - * so just append it */ - return dee_filter_model_append_iter (self, iter); -} - -/* - * Private impl - */ - -static gboolean -dee_filter_model_is_empty (DeeModel *self) -{ - DeeFilterModelPrivate *priv; - - g_return_val_if_fail (DEE_IS_FILTER_MODEL (self), FALSE); - - priv = DEE_FILTER_MODEL (self)->priv; - return g_sequence_get_begin_iter (priv->iter_list) == - g_sequence_get_end_iter (priv->iter_list); -} - -static void -on_orig_model_row_added (DeeFilterModel *self, - DeeModelIter *iter) -{ - DeeFilterModelPrivate *priv; - DeeFilter *filter; - - priv = self->priv; - filter = priv->filter; - - if (priv->ignore_orig_signals) - return; - - filter->map_notify (priv->orig_model, iter, self, filter->user_data); - -} - -static void -on_orig_model_row_removed (DeeFilterModel *self, - DeeModelIter *iter) -{ - DeeFilterModelPrivate *priv; - GSequenceIter *seq_iter; - - priv = self->priv; - - if (priv->ignore_orig_signals) - return; - - seq_iter = g_hash_table_lookup (priv->iter_map, iter); - - if (seq_iter != NULL) - { - /* Emit signal before we delete it from our records */ - g_signal_emit_by_name (self, "row-removed", iter); - g_hash_table_remove (priv->iter_map, iter); - g_sequence_remove (seq_iter); - } -} - -static void -on_orig_model_row_changed (DeeFilterModel *self, - DeeModelIter *iter) -{ - DeeFilterModelPrivate *priv; - - priv = self->priv; - - if (priv->ignore_orig_signals) - return; - - if (dee_filter_model_contains (self, iter)) - g_signal_emit_by_name (self, "row-changed", iter); -} - -/* - * DeeModel Interface Implementation - */ - -static void -dee_filter_model_set_schema_full (DeeModel *self, - const gchar* const *schema, - guint n_columns) -{ - g_return_if_fail (DEE_IS_FILTER_MODEL (self)); - - g_critical ("You can not set the schema on a DeeFilterModel. " - "It will always inherit the ones on the original model"); - return; -} - -/* FALL THROUGH: dee_filter_model_get_schema() */ - -/* FALL THROUGH: dee_filter_model_get_column_schema() */ - -/* FALL THROUGH: dee_filter_model_get_n_columns() */ - -static guint -dee_filter_model_get_n_rows (DeeModel *self) -{ - DeeFilterModelPrivate *priv; - - g_return_val_if_fail (DEE_IS_FILTER_MODEL (self), 0); - - priv = DEE_FILTER_MODEL (self)->priv; - return g_hash_table_size (priv->iter_map) - 1; -} - -/* FALL THROUGH: dee_filter_model_get_column_schema() */ - -/* FALL THROUGH: dee_filter_model_clear() */ - -static DeeModelIter* -dee_filter_model_prepend_row (DeeModel *self, - GVariant **row_members) -{ - DeeFilterModelPrivate *priv; - DeeModelIter *iter; - GSequenceIter *seq_iter; - - g_return_val_if_fail (DEE_IS_FILTER_MODEL (self), NULL); - - priv = DEE_FILTER_MODEL (self)->priv; - - /* If the filter model already contains some rows, then insert the new row - * in the orig model at the position of the first row in the filtered model. - * If it's empty we prepend the row to the orig model */ - if (dee_filter_model_is_empty (self)) - { - priv->ignore_orig_signals = TRUE; - iter = dee_model_prepend_row (priv->orig_model, row_members); - priv->ignore_orig_signals = FALSE; - } - else - { - iter = dee_model_get_first_iter (self); - priv->ignore_orig_signals = TRUE; - iter = dee_model_insert_row_before (priv->orig_model, iter, row_members); - priv->ignore_orig_signals = FALSE; - } - - seq_iter = g_sequence_prepend (priv->iter_list, iter); - g_hash_table_insert (priv->iter_map, iter, seq_iter); - - g_signal_emit_by_name (self, "row-added", iter); - - return iter; -} - -static DeeModelIter* -dee_filter_model_append_row (DeeModel *self, - GVariant **row_members) -{ - DeeFilterModelPrivate *priv; - DeeModelIter *iter; - GSequenceIter *seq_iter; - - g_return_val_if_fail (DEE_IS_FILTER_MODEL (self), NULL); - - priv = DEE_FILTER_MODEL (self)->priv; - - /* If the filter model already contains some rows, then insert the new row - * in the orig model at the position of the last row in the filtered model. - * If it's empty we append the row to the orig model */ - priv->ignore_orig_signals = TRUE; - if (dee_filter_model_is_empty (self)) - { - iter = dee_model_append_row (priv->orig_model, row_members); - } - else - { - iter = dee_model_get_last_iter (self); - iter = dee_model_insert_row_before (priv->orig_model, - iter, row_members); - } - priv->ignore_orig_signals = FALSE; - - seq_iter = g_sequence_append (priv->iter_list, iter); - g_hash_table_insert (priv->iter_map, iter, seq_iter); - - g_signal_emit_by_name (self, "row-added", iter); - - return iter; -} - -/* FALL THROUGH: dee_filter_model_insert_valist() */ - -static DeeModelIter* -dee_filter_model_insert_row_before (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members) -{ - DeeFilterModelPrivate *priv; - DeeModelIter *new_iter; - GSequenceIter *seq_iter; - - g_return_val_if_fail (DEE_IS_FILTER_MODEL (self), NULL); - - priv = DEE_FILTER_MODEL (self)->priv; - - seq_iter = g_hash_table_lookup (priv->iter_map, iter); - if (seq_iter == NULL) - { - g_critical ("DeeFilterModel can not insert before unknown iter"); - return NULL; - } - - priv->ignore_orig_signals = TRUE; - new_iter = dee_model_insert_row_before (priv->orig_model, iter, row_members); - priv->ignore_orig_signals = FALSE; - - seq_iter = g_sequence_insert_before (seq_iter, new_iter); - g_hash_table_insert (priv->iter_map, new_iter, seq_iter); - - g_signal_emit_by_name (self, "row-added", new_iter); - - return iter; -} - -static void -dee_filter_model_remove (DeeModel *self, - DeeModelIter *iter) -{ - DeeFilterModelPrivate *priv; - GSequenceIter *seq_iter; - - g_return_if_fail (DEE_IS_FILTER_MODEL (self)); - - priv = DEE_FILTER_MODEL (self)->priv; - seq_iter = g_hash_table_lookup (priv->iter_map, iter); - if (seq_iter == NULL) - { - g_critical ("Can not remove unknown iter from DeeFilterModel"); - return; - } - - g_hash_table_remove (priv->iter_map, iter); - g_sequence_remove (seq_iter); - - priv->ignore_orig_signals = TRUE; - dee_model_remove (priv->orig_model, iter); - priv->ignore_orig_signals = FALSE; -} - -/* FALL THROUGH: dee_filter_model_set_valist() */ - -/* FALL THROUGH: dee_filter_model_set_value() */ - -/* FALL THROUGH: dee_filter_model_set_value_silently() */ - -/* FALL THROUGH: dee_filter_model_get_valist() */ - -/* FALL THROUGH: dee_filter_model_get_value() */ - -/* FALL THROUGH: dee_filter_model_get_bool() */ - -/* FALL THROUGH: dee_filter_model_get_uchar() */ - -/* FALL THROUGH: dee_filter_model_get_int() */ - -/* FALL THROUGH: dee_filter_model_get_uint() */ - -/* FALL THROUGH: dee_filter_model_get_int64() */ - -/* FALL THROUGH: dee_filter_model_get_uint64() */ - -/* FALL THROUGH: dee_filter_model_get_double() */ - -/* FALL THROUGH: dee_filter_model_get_string() */ - -static DeeModelIter* -dee_filter_model_get_first_iter (DeeModel *self) -{ - DeeFilterModelPrivate *priv; - GSequenceIter *seq_iter; - - g_return_val_if_fail (DEE_IS_FILTER_MODEL (self), NULL); - - priv = DEE_FILTER_MODEL (self)->priv; - - if (dee_filter_model_is_empty (self)) - return dee_model_get_last_iter (priv->orig_model); - - seq_iter = g_sequence_get_begin_iter (priv->iter_list); - return (DeeModelIter*) g_sequence_get (seq_iter); -} - -/* FALL THROUGH: dee_filter_model_get_last_iter() */ - -static DeeModelIter* -dee_filter_model_get_iter_at_row (DeeModel *self, guint row) -{ - DeeFilterModelPrivate *priv; - GSequenceIter *seq_iter; - - g_return_val_if_fail (DEE_IS_FILTER_MODEL (self), NULL); - - priv = DEE_FILTER_MODEL (self)->priv; - seq_iter = g_sequence_get_iter_at_pos (priv->iter_list, row); - - /* On out of bounds we return the end iter of the orig model */ - if (seq_iter == g_sequence_get_end_iter (priv->iter_list)) - return dee_model_get_last_iter (priv->orig_model); - - return (DeeModelIter*) g_sequence_get (seq_iter); -} - -static DeeModelIter* -dee_filter_model_next (DeeModel *self, - DeeModelIter *iter) -{ - DeeFilterModelPrivate *priv; - GSequenceIter *seq_iter; - - g_return_val_if_fail (DEE_IS_FILTER_MODEL (self), NULL); - g_return_val_if_fail (!dee_model_is_last (self, iter), NULL); - - priv = DEE_FILTER_MODEL (self)->priv; - - seq_iter = (GSequenceIter*) g_hash_table_lookup (priv->iter_map, iter); - - if (seq_iter == NULL) - { - g_critical ("Can not find next iter for unknown iter"); - return NULL; - } - - seq_iter = g_sequence_iter_next (seq_iter); - - if (g_sequence_iter_is_end (seq_iter)) - return dee_model_get_last_iter (priv->orig_model); - - return g_sequence_get (seq_iter); -} - -static DeeModelIter* -dee_filter_model_prev (DeeModel *self, - DeeModelIter *iter) -{ - DeeFilterModelPrivate *priv; - GSequenceIter *seq_iter; - - g_return_val_if_fail (DEE_IS_FILTER_MODEL (self), NULL); - g_return_val_if_fail (!dee_model_is_first (self, iter), NULL); - - priv = DEE_FILTER_MODEL (self)->priv; - seq_iter = (GSequenceIter*) g_hash_table_lookup (priv->iter_map, iter); - - if (seq_iter == NULL) - { - g_critical ("Can not find next iter for unknown iter"); - return NULL; - } - - seq_iter = g_sequence_iter_prev (seq_iter); - - return g_sequence_get (seq_iter); -} - -static gboolean -dee_filter_model_is_first (DeeModel *self, DeeModelIter *iter) -{ - DeeFilterModelPrivate *priv; - GSequenceIter *seq_iter; - - g_return_val_if_fail (DEE_IS_FILTER_MODEL (self), -1); - - priv = DEE_FILTER_MODEL (self)->priv; - - if (dee_filter_model_is_empty (self)) - return iter == dee_model_get_last_iter (priv->orig_model); - - seq_iter = g_sequence_get_begin_iter (priv->iter_list); - return g_sequence_get (seq_iter) == iter; -} - -/* FALL THROUGH: dee_filter_model_is_last()*/ - -static guint -dee_filter_model_get_position (DeeModel *self, - DeeModelIter *iter) -{ - DeeFilterModelPrivate *priv; - GSequenceIter *seq_iter; - - g_return_val_if_fail (DEE_IS_FILTER_MODEL (self), -1); - - priv = DEE_FILTER_MODEL (self)->priv; - seq_iter = (GSequenceIter*) g_hash_table_lookup (priv->iter_map, iter); - - if (seq_iter == NULL) - { - g_critical ("Can not find next iter for unknown iter"); - return -1; - } - - return (guint) ABS(g_sequence_iter_get_position (seq_iter)); -} diff -Nru dee-0.5.22/dee/dee-filter-model.h dee-1.0.0/dee/dee-filter-model.h --- dee-0.5.22/dee/dee-filter-model.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-filter-model.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,176 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -#if !defined (_DEE_H_INSIDE) && !defined (DEE_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef _HAVE_DEE_FILTER_MODEL_H -#define _HAVE_DEE_FILTER_MODEL_H - -#include -#include - -#include -#include - -G_BEGIN_DECLS - -#define DEE_TYPE_FILTER_MODEL (dee_filter_model_get_type ()) - -#define DEE_FILTER_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - DEE_TYPE_FILTER_MODEL, DeeFilterModel)) - -#define DEE_FILTER_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \ - DEE_TYPE_FILTER_MODEL, DeeFilterModelClass)) - -#define DEE_IS_FILTER_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - DEE_TYPE_FILTER_MODEL)) - -#define DEE_IS_FILTER_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - DEE_TYPE_FILTER_MODEL)) - -#define DEE_FILTER_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - DBUS_TYPE_FILTER_MODEL, DeeFilterModelClass)) - -typedef struct _DeeFilterModel DeeFilterModel; -typedef struct _DeeFilterModelClass DeeFilterModelClass; -typedef struct _DeeFilterModelPrivate DeeFilterModelPrivate; -typedef struct _DeeFilter DeeFilter; - -/** - * DeeModelMapFunc: - * @orig_model: The model containing the original data to filter - * @filter_model: The model that will contain the filtered results. The - * filter func must iterate over @orig_model and add all relevant - * rows to @filter_model. This model is guaranteed to be empty - * when the filter func is invoked - * @user_data: User data passed together with the filter func - * - * Function used to collect the rows from a model that should be included in - * a #DeeFilterModel. To add rows to @filter_model use the methods - * dee_filter_model_append_iter(), dee_filter_model_prepend_iter(), - * dee_filter_model_insert_iter(), and dee_filter_model_insert_iter_before(). - * - * The iteration over the original model is purposely left to the map func - * in order to allow optimized iterations if the the caller has a priori - * knowledge of the sorting and grouping of the data in the original model. - */ -typedef void (*DeeModelMapFunc) (DeeModel *orig_model, - DeeFilterModel *filter_model, - gpointer user_data); - -/** - * DeeModelMapNotify: - * @orig_model: The model containing the added row - * @orig_iter: A #DeeModelIter pointing to the new row in @orig_model - * @filter_model: The model that was also passed to the #DeeModelMapFunc - * of the #DeeFilter this functions is a part of - * @user_data: User data for the #DeeFilter - * - * Callback invoked when a row is added to @orig_model. To add rows to - * @filter_model use the methods dee_filter_model_append_iter(), - * dee_filter_model_prepend_iter(), dee_filter_model_insert_iter(), - * and dee_filter_model_insert_iter_before(). - */ -typedef void (*DeeModelMapNotify) (DeeModel *orig_model, - DeeModelIter *orig_iter, - DeeFilterModel *filter_model, - gpointer user_data); - -/** - * DeeFilter: - * @map_func: The #DeeModelMapFunc used to construct the initial contents of - * a #DeeFilterModel - * @map_notify: Callback invoked when the original model changes - * @destroy: Callback for freeing the @user_data - * @user_data: Free form user data associated with the filter. This pointer will - * be passed to @map_func and @map_notify - * - * Structure encapsulating the mapping logic used to construct a #DeeFilterModel - */ -struct _DeeFilter -{ - DeeModelMapFunc map_func; - DeeModelMapNotify map_notify; - GDestroyNotify destroy; - gpointer user_data; -} ; - -/** - * DeeFilterModel: - * - * All fields in the DeeFilterModel structure are private and should never be - * accessed directly - */ -struct _DeeFilterModel -{ - /*< private >*/ - DeeProxyModel parent; - - DeeFilterModelPrivate *priv; -}; - -struct _DeeFilterModelClass -{ - /*< private >*/ - DeeProxyModelClass parent_class; - - /*< private >*/ - void (*_dee_filter_model_1) (void); - void (*_dee_filter_model_2) (void); - void (*_dee_filter_model_3) (void); - void (*_dee_filter_model_4) (void); -}; - -/** - * dee_filter_model_get_type: - * - * The GType of #DeeFilterModel - * - * Return value: the #GType of #DeeFilterModel - **/ -GType dee_filter_model_get_type (void) G_GNUC_CONST; - -DeeModel* dee_filter_model_new (const DeeFilter *filter, - DeeModel *orig_model); - -gboolean dee_filter_model_contains (DeeFilterModel *self, - DeeModelIter *iter); - -DeeModelIter* dee_filter_model_append_iter (DeeFilterModel *self, - DeeModelIter *iter); - -DeeModelIter* dee_filter_model_prepend_iter (DeeFilterModel *self, - DeeModelIter *iter); - -DeeModelIter* dee_filter_model_insert_iter (DeeFilterModel *self, - DeeModelIter *iter, - guint pos); - -DeeModelIter* dee_filter_model_insert_iter_before (DeeFilterModel *self, - DeeModelIter *iter, - DeeModelIter *pos); - -DeeModelIter* dee_filter_model_insert_iter_with_original_order (DeeFilterModel *self, - DeeModelIter *iter); - -G_END_DECLS - -#endif /* _HAVE_DEE_FILTER_MODEL_H */ diff -Nru dee-0.5.22/dee/dee-filters.c dee-1.0.0/dee/dee-filters.c --- dee-0.5.22/dee/dee-filters.c 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-filters.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,568 +0,0 @@ -/* - * Copyright (C) 2011 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by: - * Mikkel Kamstrup Erlandsen - */ - -/** - * SECTION:dee-filters - * @title: Filters - * @short_description: A suite of simple #DeeFilters for use with #DeeFilterModels - * @include: dee.h - * - * #DeeFilters are used together with #DeeFilterModels to build - * "views" of some original #DeeModel. An example could be to build a view - * of a model that exposes the rows of the original model sorted by a given - * column (leaving the original model unaltered): - * |[ - * DeeModel *model, *view; - * DeeFilter *collator; - * - * // Create and populate a model with some unsorted rows - * model = dee_sequence_model_new (); - * dee_model_set_schema (model, "i", "s", NULL); - * dee_model_append (model, 27, "Foo"); - * dee_model_append (model, 68, "Bar"); - * - * // Create a collator for column 1 - * collator = dee_filter_new_collator (1); - * - * // Create the sorted view - * view = dee_filter_model_new (collator, model); - * g_free (collator); - * - * // When accessing the view the row with 'Bar' will be first - * ]| - */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "dee-filter-model.h" -#include "trace-log.h" - -/* The CollatorFilter stores collation keys for the columns in a DeeModelTag */ -typedef struct { - guint column; - DeeModelTag *collation_key_tag; -} CollatorFilter; - -typedef struct { - guint column; - gchar *key; -} KeyFilter; - -typedef struct { - guint column; - GRegex *regex; -} RegexFilter; - -typedef struct { - guint column; - GVariant *value; -} ValueFilter; - -/* - * Private impl - */ -static void _dee_filter_collator_map_notify (DeeModel *orig_model, - DeeModelIter *orig_iter, - DeeFilterModel *filter_model, - gpointer user_data); - -static void _dee_filter_collator_desc_map_notify (DeeModel *orig_model, - DeeModelIter *orig_iter, - DeeFilterModel *filter_model, - gpointer user_data); - -static void -_dee_filter_collator_map_func (DeeModel *orig_model, - DeeFilterModel *filter_model, - gpointer user_data) -{ - DeeModelIter *iter, *end; - CollatorFilter *filter; - - g_return_if_fail (user_data != NULL); - - filter = (CollatorFilter *) user_data; - filter->collation_key_tag = - dee_model_register_tag (orig_model, (GDestroyNotify) g_free); - - iter = dee_model_get_first_iter (orig_model); - end = dee_model_get_last_iter (orig_model); - while (iter != end) - { - _dee_filter_collator_map_notify (orig_model, iter, filter_model, filter); - iter = dee_model_next (orig_model, iter); - } - -} - -static void -_dee_filter_collator_desc_map_func (DeeModel *orig_model, - DeeFilterModel *filter_model, - gpointer user_data) -{ - DeeModelIter *iter, *end; - CollatorFilter *filter; - - g_return_if_fail (user_data != NULL); - - filter = (CollatorFilter *) user_data; - filter->collation_key_tag = - dee_model_register_tag (orig_model, (GDestroyNotify) g_free); - - iter = dee_model_get_first_iter (orig_model); - end = dee_model_get_last_iter (orig_model); - while (iter != end) - { - _dee_filter_collator_desc_map_notify (orig_model, iter, filter_model, filter); - iter = dee_model_next (orig_model, iter); - } - -} - -static void -_dee_filter_collator_map_notify (DeeModel *orig_model, - DeeModelIter *orig_iter, - DeeFilterModel *filter_model, - gpointer user_data) -{ - DeeModelIter *iter, *end; - CollatorFilter *filter; - const gchar *column_value, *test_value; - gchar *collation_key; - - g_return_if_fail (user_data != NULL); - g_return_if_fail (orig_iter != NULL); - - filter = (CollatorFilter *) user_data; - - /* Build and set collation ley for the current row */ - column_value = dee_model_get_string (orig_model, orig_iter, filter->column); - collation_key = g_utf8_collate_key (column_value, -1); - dee_model_set_tag (orig_model, orig_iter, - filter->collation_key_tag, collation_key); // steal collation_key - - iter = dee_model_get_first_iter (DEE_MODEL (filter_model)); - end = dee_model_get_last_iter (DEE_MODEL (filter_model)); - while (iter != end) - { - test_value = dee_model_get_tag (orig_model, iter, filter->collation_key_tag); - if (g_strcmp0 (test_value, column_value) < 0) - { - iter = dee_model_next (DEE_MODEL (filter_model), iter); - } - else - { - dee_filter_model_insert_iter_before (filter_model, orig_iter, iter); - iter = NULL; - break; - } - } - - if (iter == end) - { - dee_filter_model_append_iter(filter_model, orig_iter); - } -} - -static void -_dee_filter_collator_desc_map_notify (DeeModel *orig_model, - DeeModelIter *orig_iter, - DeeFilterModel *filter_model, - gpointer user_data) -{ - DeeModelIter *iter, *end; - CollatorFilter *filter; - const gchar *column_value, *test_value; - gchar *collation_key; - - g_return_if_fail (user_data != NULL); - g_return_if_fail (orig_iter != NULL); - - filter = (CollatorFilter *) user_data; - - /* Build and set collation ley for the current row */ - column_value = dee_model_get_string (orig_model, orig_iter, filter->column); - collation_key = g_utf8_collate_key (column_value, -1); - dee_model_set_tag (orig_model, orig_iter, - filter->collation_key_tag, collation_key); // steal collation_key - - iter = dee_model_get_first_iter (DEE_MODEL (filter_model)); - end = dee_model_get_last_iter (DEE_MODEL (filter_model)); - while (iter != end) - { - test_value = dee_model_get_tag (orig_model, iter, filter->collation_key_tag); - if (g_strcmp0 (test_value, column_value) > 0) - { - iter = dee_model_next (DEE_MODEL (filter_model), iter); - } - else - { - dee_filter_model_insert_iter_before (filter_model, orig_iter, iter); - iter = NULL; - break; - } - } - - if (iter == end) - { - dee_filter_model_append_iter(filter_model, orig_iter); - } -} - -static void -_dee_filter_key_map_func (DeeModel *orig_model, - DeeFilterModel *filter_model, - gpointer user_data) -{ - DeeModelIter *iter, *end; - KeyFilter *filter; - guint column; - const gchar *key, *val; - - g_return_if_fail (user_data != NULL); - - filter = (KeyFilter *) user_data; - key = filter->key; - column = filter->column; - - iter = dee_model_get_first_iter (orig_model); - end = dee_model_get_last_iter (orig_model); - while (iter != end) - { - val = dee_model_get_string (orig_model, iter, column); - if (g_strcmp0 (key, val) == 0) - { - dee_filter_model_append_iter (filter_model, iter); - } - iter = dee_model_next (orig_model, iter); - } -} - -static void -_dee_filter_key_map_notify (DeeModel *orig_model, - DeeModelIter *orig_iter, - DeeFilterModel *filter_model, - gpointer user_data) -{ - KeyFilter *filter; - const gchar *val; - - g_return_if_fail (user_data != NULL); - - filter = (KeyFilter *) user_data; - val = dee_model_get_string (orig_model, orig_iter, filter->column); - - /* Ignore rows that don't match the key */ - if (g_strcmp0 (filter->key, val) != 0) - return; - - dee_filter_model_insert_iter_with_original_order (filter_model, orig_iter); -} - -static void -_dee_filter_value_map_func (DeeModel *orig_model, - DeeFilterModel *filter_model, - gpointer user_data) -{ - DeeModelIter *iter, *end; - ValueFilter *filter; - GVariant *val; - - g_return_if_fail (user_data != NULL); - - filter = (ValueFilter *) user_data; - - iter = dee_model_get_first_iter (orig_model); - end = dee_model_get_last_iter (orig_model); - while (iter != end) - { - val = dee_model_get_value (orig_model, iter, filter->column); - if (g_variant_equal (filter->value, val)) - { - dee_filter_model_append_iter (filter_model, iter); - } - iter = dee_model_next (orig_model, iter); - } -} - -static void -_dee_filter_value_map_notify (DeeModel *orig_model, - DeeModelIter *orig_iter, - DeeFilterModel *filter_model, - gpointer user_data) -{ - ValueFilter *filter; - GVariant *val; - - g_return_if_fail (user_data != NULL); - - filter = (ValueFilter *) user_data; - val = dee_model_get_value (orig_model, orig_iter, filter->column); - - /* Ignore rows that don't match the value */ - if (!g_variant_equal (filter->value, val)) - return; - - dee_filter_model_insert_iter_with_original_order (filter_model, orig_iter); -} - -static void -_dee_filter_regex_map_func (DeeModel *orig_model, - DeeFilterModel *filter_model, - gpointer user_data) -{ - DeeModelIter *iter, *end; - RegexFilter *filter; - guint column; - GRegex *regex; - const gchar *val; - - g_return_if_fail (user_data != NULL); - - filter = (RegexFilter *) user_data; - regex = filter->regex; - column = filter->column; - - iter = dee_model_get_first_iter (orig_model); - end = dee_model_get_last_iter (orig_model); - while (iter != end) - { - val = dee_model_get_string (orig_model, iter, column); - if (g_regex_match (regex, val, 0, NULL)) - { - dee_filter_model_append_iter (filter_model, iter); - } - iter = dee_model_next (orig_model, iter); - } -} - -static void -_dee_filter_regex_map_notify (DeeModel *orig_model, - DeeModelIter *orig_iter, - DeeFilterModel *filter_model, - gpointer user_data) -{ - RegexFilter *filter; - const gchar *val; - - g_return_if_fail (user_data != NULL); - - filter = (RegexFilter *) user_data; - val = dee_model_get_string (orig_model, orig_iter, filter->column); - - /* Ignore rows that don't match the key */ - if (!g_regex_match (filter->regex, val, 0, NULL)) - return; - - dee_filter_model_insert_iter_with_original_order (filter_model, orig_iter); -} - -static void -key_filter_free (KeyFilter *filter) -{ - g_free (filter->key); - g_free (filter); -} - -static void -value_filter_free (ValueFilter *filter) -{ - g_variant_unref (filter->value); - g_free (filter); -} - -static void -regex_filter_free (RegexFilter *filter) -{ - g_regex_unref (filter->regex); - g_free (filter); -} - -/* - * API - */ - -/** - * dee_filter_new_collator: - * @column: The index of a column containing the strings to sort after - * - * Create a #DeeFilter that takes string values from a column in the model - * and builds a #DeeFilterModel with the rows sorted according to the - * collation rules of the current locale. - * - * Returns: (transfer full): A newly allocated #DeeFilter. Do not modify it. - * Free with g_free(). - */ -DeeFilter* -dee_filter_new_collator (guint column) -{ - DeeFilter *filter; - CollatorFilter *collator; - - filter = g_new0 (DeeFilter, 1); - filter->map_func = _dee_filter_collator_map_func; - filter->map_notify = _dee_filter_collator_map_notify; - - collator = g_new0 (CollatorFilter, 1); - collator->column = column; - - filter->destroy = (GDestroyNotify) g_free; - filter->user_data =collator; - - return filter; -} - -/** - * dee_filter_new_collator_desc: - * @column: The index of a column containing the strings to sort after - * - * Create a #DeeFilter that takes string values from a column in the model - * and builds a #DeeFilterModel with the rows sorted descending according to the - * collation rules of the current locale. - * - * Returns: (transfer full): A newly allocated #DeeFilter. Do not modify it. - * Free with g_free(). - */ -DeeFilter* -dee_filter_new_collator_desc (guint column) -{ - DeeFilter *filter; - CollatorFilter *collator; - - filter = g_new0 (DeeFilter, 1); - filter->map_func = _dee_filter_collator_desc_map_func; - filter->map_notify = _dee_filter_collator_desc_map_notify; - - collator = g_new0 (CollatorFilter, 1); - collator->column = column; - - filter->destroy = (GDestroyNotify) g_free; - filter->user_data =collator; - - return filter; -} - - -/** - * dee_filter_new_for_key_column: - * @column: The index of a column containing the string key to match - * - * Create a #DeeFilter that only includes rows from the original model - * which has an exact match on some string column. A #DeeFilterModel created - * with this filter will be ordered in accordance with its parent model. - * - * Returns: (transfer full): A newly allocated #DeeFilter. Do not modify it. - * Free with g_free(). - */ -DeeFilter* -dee_filter_new_for_key_column (guint column, const gchar *key) -{ - DeeFilter *filter; - KeyFilter *key_filter; - - filter = g_new0 (DeeFilter, 1); - filter->map_func = _dee_filter_key_map_func; - filter->map_notify = _dee_filter_key_map_notify; - - key_filter = g_new0 (KeyFilter, 1); - key_filter->column = column; - key_filter->key = g_strdup (key); - - filter->destroy = (GDestroyNotify) key_filter_free; - filter->user_data = key_filter; - - return filter; -} - -/** - * dee_filter_new_for_any_column: - * @column: The index of a column containing the string to match - * @value: (transfer none): A #GVariant value columns must match exactly. - * The matching semantics are those of g_variant_equal(). If @value - * is floating the ownership will be transfered to the filter - * - * Create a #DeeFilter that only includes rows from the original model - * which match a variant value in a given column. A #DeeFilterModel - * created with this filter will be ordered in accordance with its parent model. - * - * This method will work on any column, disregarding its schema, since the - * value comparison is done using g_variant_equal(). This means you can use - * this filter as a convenient fallback when there is no predefined filter - * for your column type if raw performance is not paramount. - * - * Returns: (transfer full): A newly allocated #DeeFilter. Do not modify it. - * Free with g_free(). - */ -DeeFilter* -dee_filter_new_for_any_column (guint column, GVariant *value) -{ - DeeFilter *filter; - ValueFilter *v_filter; - - g_return_val_if_fail (value != NULL, NULL); - - filter = g_new0 (DeeFilter, 1); - filter->map_func = _dee_filter_value_map_func; - filter->map_notify = _dee_filter_value_map_notify; - - v_filter = g_new0 (ValueFilter, 1); - v_filter->column = column; - v_filter->value = g_variant_ref_sink (value); - - filter->destroy = (GDestroyNotify) value_filter_free; - filter->user_data = v_filter; - - return filter; -} - -/** - * dee_filter_new_regex: - * @column: The index of a column containing the string to match - * @regex: (transfer none):The regular expression @column must match - * - * Create a #DeeFilter that only includes rows from the original model - * which match a regular expression on some string column. A #DeeFilterModel - * created with this filter will be ordered in accordance with its parent model. - * - * Returns: (transfer full): A newly allocated #DeeFilter. Do not modify it. - * Free with g_free(). - */ -DeeFilter* -dee_filter_new_regex (guint column, GRegex *regex) -{ - DeeFilter *filter; - RegexFilter *r_filter; - - g_return_val_if_fail (regex != NULL, NULL); - - filter = g_new0 (DeeFilter, 1); - filter->map_func = _dee_filter_regex_map_func; - filter->map_notify = _dee_filter_regex_map_notify; - - r_filter = g_new0 (RegexFilter, 1); - r_filter->column = column; - r_filter->regex = g_regex_ref (regex); - - filter->destroy = (GDestroyNotify) regex_filter_free; - filter->user_data = r_filter; - - return filter; -} diff -Nru dee-0.5.22/dee/dee-filters.h dee-1.0.0/dee/dee-filters.h --- dee-0.5.22/dee/dee-filters.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-filters.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2011 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -#if !defined (_DEE_H_INSIDE) && !defined (DEE_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef _HAVE_DEE_FILTERS_H -#define _HAVE_DEE_FILTERS_H - -#include -#include -#include - -G_BEGIN_DECLS - -DeeFilter* dee_filter_new_collator (guint column); - -DeeFilter* dee_filter_new_collator_desc (guint column); - -DeeFilter* dee_filter_new_for_key_column (guint column, const gchar *key); - -DeeFilter* dee_filter_new_for_any_column (guint column, GVariant *value); - -DeeFilter* dee_filter_new_regex (guint column, GRegex *regex); - -G_END_DECLS - -#endif /* _HAVE_DEE_FILTERS_H */ diff -Nru dee-0.5.22/dee/dee-glist-result-set.c dee-1.0.0/dee/dee-glist-result-set.c --- dee-0.5.22/dee/dee-glist-result-set.c 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-glist-result-set.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,228 +0,0 @@ -/* - * Copyright (C) 2009 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by: - * Mikkel Kamstrup Erlandsen - */ - -/** - * SECTION:dee-glist-result-set - * @short_description: Internal API do not use - * - * GList implementation of a #DeeResultSet on top of a #GList - * - */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "dee-glist-result-set.h" - -static void dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface); -G_DEFINE_TYPE_WITH_CODE (DeeGListResultSet, - dee_glist_result_set, - G_TYPE_OBJECT, - G_IMPLEMENT_INTERFACE (DEE_TYPE_RESULT_SET, - dee_glist_result_set_result_set_iface_init)) - -#define DEE_GLIST_RESULT_SET_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetPrivate)) - -typedef struct -{ - GList *rows; - DeeModel *model; - GList *cursor; - GObject *row_owner; - guint pos; - guint n_rows; - gboolean n_rows_calculated; -} DeeGListResultSetPrivate; - -/* GObject Init */ -static void -dee_glist_result_set_finalize (GObject *object) -{ - DeeGListResultSetPrivate *priv; - - priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (object); - - if (priv->model) - g_object_unref (priv->model); - if (priv->row_owner) - g_object_unref (priv->row_owner); - - G_OBJECT_CLASS (dee_glist_result_set_parent_class)->finalize (object); -} - -static void -dee_glist_result_set_class_init (DeeGListResultSetClass *klass) -{ - GObjectClass *obj_class = G_OBJECT_CLASS (klass); - - obj_class->finalize = dee_glist_result_set_finalize; - - /* Add private data */ - g_type_class_add_private (obj_class, sizeof (DeeGListResultSetPrivate)); -} - -static void -dee_glist_result_set_init (DeeGListResultSet *self) -{ - DeeGListResultSetPrivate *priv; - - priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self); - priv->pos = 0; - priv->n_rows_calculated = FALSE; -} - -static guint -dee_glist_result_set_get_n_rows (DeeResultSet *self) -{ - DeeGListResultSetPrivate *priv; - - g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0); - - priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self); - - if (!priv->n_rows_calculated) - { - priv->n_rows_calculated = TRUE; - priv->n_rows = g_list_length (priv->rows); - } - - return priv->n_rows; -} - -static DeeModelIter* -dee_glist_result_set_next (DeeResultSet *self) -{ - DeeGListResultSetPrivate *priv; - DeeModelIter *next; - - g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL); - g_return_val_if_fail (dee_result_set_has_next (self), NULL); - - priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self); - next = dee_result_set_peek (self); - priv->cursor = priv->cursor->next; - priv->pos++; - return next; -} - -static gboolean -dee_glist_result_set_has_next (DeeResultSet *self) -{ - DeeGListResultSetPrivate *priv; - - g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), FALSE); - - priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self); - - return priv->cursor != NULL; -} - -static DeeModelIter* -dee_glist_result_set_peek (DeeResultSet *self) -{ - DeeGListResultSetPrivate *priv; - - g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL); - - priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self); - - if (priv->cursor == NULL) - return NULL; - - return (DeeModelIter*) (priv->cursor->data); -} - -static void -dee_glist_result_set_seek (DeeResultSet *self, - guint pos) -{ - DeeGListResultSetPrivate *priv; - - g_return_if_fail (DEE_IS_GLIST_RESULT_SET (self)); - - priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self); - priv->cursor = g_list_nth (priv->rows, pos); - priv->pos = pos; - - if (priv->cursor == NULL && pos != 0) - { - g_warning ("Illegal seek in DeeGListResultSet. Seeking 0"); - priv->cursor = priv->rows; - priv->pos = 0; - } -} - -static guint -dee_glist_result_set_tell (DeeResultSet *self) -{ - DeeGListResultSetPrivate *priv; - - g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), 0); - - priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self); - return priv->pos; -} - -static DeeModel* -dee_glist_result_set_get_model (DeeResultSet *self) -{ - DeeGListResultSetPrivate *priv; - - g_return_val_if_fail (DEE_IS_GLIST_RESULT_SET (self), NULL); - - priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self); - return priv->model; -} - -static void -dee_glist_result_set_result_set_iface_init (DeeResultSetIface *iface) -{ - iface->get_n_rows = dee_glist_result_set_get_n_rows; - iface->next = dee_glist_result_set_next; - iface->has_next = dee_glist_result_set_has_next; - iface->peek = dee_glist_result_set_peek; - iface->seek = dee_glist_result_set_seek; - iface->tell = dee_glist_result_set_tell; - iface->get_model = dee_glist_result_set_get_model; -} - -/* Internal constructor. Takes a ref on @model, @rows are implicitly reffed - * by reffing @row_owner. Row owner may be NULL, in which case we cross fingers - * and trust the caller that @rows are not freed */ -DeeResultSet* -_dee_glist_result_set_new (GList *rows, - DeeModel *model, - GObject *row_owner) -{ - GObject *self; - DeeGListResultSetPrivate *priv; - - self = g_object_new (DEE_TYPE_GLIST_RESULT_SET, NULL); - priv = DEE_GLIST_RESULT_SET_GET_PRIVATE (self); - priv->rows = rows; - priv->cursor = rows; - priv->model = g_object_ref (model); - - if (row_owner != NULL) - priv->row_owner = g_object_ref (row_owner); - - return (DeeResultSet*)self; -} diff -Nru dee-0.5.22/dee/dee-glist-result-set.h dee-1.0.0/dee/dee-glist-result-set.h --- dee-0.5.22/dee/dee-glist-result-set.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-glist-result-set.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2009 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -#ifndef _DEE_GLIST_RESULT_SET_H_ -#define _DEE_GLIST_RESULT_SET_H_ - -#include -#include -#include -#include - -G_BEGIN_DECLS - -#define DEE_TYPE_GLIST_RESULT_SET (dee_glist_result_set_get_type ()) - -#define DEE_GLIST_RESULT_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSet)) - -#define DEE_GLIST_RESULT_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \ - DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetClass)) - -#define DEE_IS_GLIST_RESULT_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - DEE_TYPE_GLIST_RESULT_SET)) - -#define DEE_IS_GLIST_RESULT_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - DEE_TYPE_GLIST_RESULT_SET)) - -#define DEE_GLIST_RESULT_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - DEE_TYPE_GLIST_RESULT_SET, DeeGListResultSetClass)) - -typedef struct _DeeGListResultSet DeeGListResultSet; -typedef struct _DeeGListResultSetClass DeeGListResultSetClass; - -struct _DeeGListResultSet -{ - GObject parent_instance; -}; - -struct _DeeGListResultSetClass -{ - GObjectClass parent_class; -}; - -DeeResultSet* _dee_glist_result_set_new (GList *rows, - DeeModel *model, - GObject *row_owner); - -G_END_DECLS - -#endif /* _DEE_GLIST_RESULT_SET_H_ */ diff -Nru dee-0.5.22/dee/dee.h dee-1.0.0/dee/dee.h --- dee-0.5.22/dee/dee.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -/** - * SECTION:dee - * @short_description: A single-include header - * @include: dee.h - * - */ - -#ifndef _HAVE_DEE_H_ -#define _HAVE_DEE_H_ - -#define _DEE_H_INSIDE - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#undef _DEE_H_INSIDE - -#endif /* _HAVE_DEE_H_ */ diff -Nru dee-0.5.22/dee/dee-hash-index.c dee-1.0.0/dee/dee-hash-index.c --- dee-0.5.22/dee/dee-hash-index.c 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-hash-index.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,422 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by: - * Mikkel Kamstrup Erlandsen - */ - -/** - * SECTION:dee-hash-index - * @short_description: A #DeeHashIndex implementation doing lookups in a hash map - * @include: dee.h - * - * #DeeHashIndex is an implementation of #DeeHashIndex which is backed - * by a hashmap. This means that it only supports the #DEE_TERM_MATCH_EXACT - * flag in dee_hash_index_lookup(). - * - */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "dee-hash-index.h" -#include "dee-result-set.h" -#include "dee-glist-result-set.h" -#include "trace-log.h" - -G_DEFINE_TYPE (DeeHashIndex, dee_hash_index, DEE_TYPE_INDEX); - -#define DEE_HASH_INDEX_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_HASH_INDEX, DeeHashIndexPrivate)) - -/* - * FORWARDS - */ -static DeeResultSet* dee_hash_index_lookup (DeeIndex *self, - const gchar *term, - DeeTermMatchFlag flags); - -static void dee_hash_index_foreach (DeeIndex *self, - const gchar *start_term, - DeeIndexIterFunc func, - gpointer userdata); - -static guint dee_hash_index_get_n_terms (DeeIndex *self); - -static guint dee_hash_index_get_n_rows (DeeIndex *self); - -static guint dee_hash_index_get_n_rows_for_term (DeeIndex *self, - const gchar *term); - -static guint dee_hash_index_get_supported_term_match_flags (DeeIndex *self); - -static void on_row_added (DeeIndex *self, - DeeModelIter *iter, - DeeModel *model); - -static void on_row_removed (DeeIndex *self, - DeeModelIter *iter, - DeeModel *model); - -static void on_row_changed (DeeIndex *self, - DeeModelIter *iter, - DeeModel *model); - -/* - * GOBJECT STUFF - */ - -struct _DeeHashIndexPrivate -{ - /* Holds map of term -> GHashTable. - * The term keys are owned by term_list */ - GHashTable *terms; - - /* Holds map of DeeModelIter -> GPtrArray. - * The terms are owned by term_list */ - GHashTable *row_terms; - - /* All terms are stored here */ - DeeTermList *term_list; - - gulong on_row_added_handler; - gulong on_row_removed_handler; - gulong on_row_changed_handler; -}; - -enum -{ - PROP_0, -}; - -/* GObject stuff */ -static void -dee_hash_index_finalize (GObject *object) -{ - DeeHashIndexPrivate *priv = DEE_HASH_INDEX (object)->priv; - DeeModel *model = dee_index_get_model (DEE_INDEX (object)); - - if (priv->on_row_added_handler) - g_signal_handler_disconnect(model, priv->on_row_added_handler); - if (priv->on_row_removed_handler) - g_signal_handler_disconnect(model, priv->on_row_removed_handler); - if (priv->on_row_changed_handler) - g_signal_handler_disconnect(model, priv->on_row_changed_handler); - - if (priv->terms) - { - g_hash_table_unref (priv->terms); - priv->terms = NULL; - } - if (priv->row_terms) - { - g_hash_table_unref (priv->row_terms); - priv->row_terms = NULL; - } - if (priv->term_list) - { - g_object_unref (priv->term_list); - priv->term_list = NULL; - } - - G_OBJECT_CLASS (dee_hash_index_parent_class)->finalize (object); -} - -static void -dee_hash_index_constructed (GObject *object) -{ - DeeHashIndexPrivate *priv = DEE_HASH_INDEX (object)->priv; - DeeIndex *self = DEE_INDEX (object); - DeeModel *model = dee_index_get_model (self); - DeeModelIter *iter; - - /* Listen for changes in the model so we automagically pick those up */ - priv->on_row_added_handler = g_signal_connect_swapped (model, "row-added", - G_CALLBACK (on_row_added), - self); - - priv->on_row_removed_handler = g_signal_connect_swapped (model, "row-removed", - G_CALLBACK (on_row_removed), - self); - - priv->on_row_changed_handler = g_signal_connect_swapped (model, "row-changed", - G_CALLBACK (on_row_changed), - self); - - /* Index existing rows in the model */ - iter = dee_model_get_first_iter (model); - while (!dee_model_is_last (model, iter)) - { - on_row_added (self, iter, model); - iter = dee_model_next (model, iter); - } -} - -static void -dee_hash_index_class_init (DeeHashIndexClass *klass) -{ - GObjectClass *obj_class = G_OBJECT_CLASS (klass); - DeeIndexClass *idx_class = DEE_INDEX_CLASS (klass); - - obj_class->finalize = dee_hash_index_finalize; - obj_class->constructed = dee_hash_index_constructed; - - idx_class->lookup = dee_hash_index_lookup; - idx_class->foreach = dee_hash_index_foreach; - idx_class->get_n_terms = dee_hash_index_get_n_terms; - idx_class->get_n_rows = dee_hash_index_get_n_rows; - idx_class->get_n_rows_for_term = dee_hash_index_get_n_rows_for_term; - idx_class->get_supported_term_match_flags = dee_hash_index_get_supported_term_match_flags; - - /* Add private data */ - g_type_class_add_private (obj_class, sizeof (DeeHashIndexPrivate)); -} - -static void -dee_hash_index_init (DeeHashIndex *self) -{ - self->priv = DEE_HASH_INDEX_GET_PRIVATE (self); - - self->priv->terms = g_hash_table_new (g_str_hash, g_str_equal); - self->priv->row_terms = g_hash_table_new_full(g_direct_hash, g_direct_equal, - NULL, (GDestroyNotify) g_ptr_array_unref); - self->priv->term_list = g_object_new (DEE_TYPE_TERM_LIST, NULL); -} - -/* - * IMPLEMENTATION - */ - -static DeeResultSet* -dee_hash_index_lookup (DeeIndex *self, - const gchar *term, - DeeTermMatchFlag flags) -{ - DeeHashIndexPrivate *priv; - GHashTable *term_data; - - g_return_val_if_fail (DEE_IS_HASH_INDEX (self), NULL); - g_return_val_if_fail (term != NULL, NULL); - - if (flags != DEE_TERM_MATCH_EXACT) - g_warning ("The DeeHashIndex only supports exact matching of terms"); - - priv = DEE_HASH_INDEX (self)->priv; - term_data = g_hash_table_lookup (priv->terms, term); - - if (term_data == NULL) - return _dee_glist_result_set_new (NULL, /* The empty GList */ - dee_index_get_model (self), - NULL); - - return _dee_glist_result_set_new (g_hash_table_get_keys(term_data), - dee_index_get_model (self), - G_OBJECT (self)); -} - -static void -dee_hash_index_foreach (DeeIndex *self, - const gchar *start_term, - DeeIndexIterFunc func, - gpointer userdata) -{ - DeeResultSet *results; - - g_return_if_fail (DEE_IS_HASH_INDEX (self)); - g_return_if_fail (func != NULL); - - if (start_term == NULL) - return; - - results = dee_index_lookup (self, start_term, DEE_TERM_MATCH_EXACT); - - if (results != NULL) - func (start_term, results, userdata); - - g_object_unref (results); - - return; -} - -static guint -dee_hash_index_get_n_terms (DeeIndex *self) -{ - DeeHashIndexPrivate *priv; - - g_return_val_if_fail (DEE_IS_HASH_INDEX (self), 0); - - priv = DEE_HASH_INDEX (self)->priv; - return g_hash_table_size(priv->terms); -} - -static guint -dee_hash_index_get_n_rows (DeeIndex *self) -{ - DeeHashIndexPrivate *priv; - - g_return_val_if_fail (DEE_IS_HASH_INDEX (self), 0); - - priv = DEE_HASH_INDEX (self)->priv; - return g_hash_table_size(priv->row_terms); -} - -static guint -dee_hash_index_get_n_rows_for_term (DeeIndex *self, - const gchar *term) -{ - DeeHashIndexPrivate *priv; - GHashTable *term_data; - - g_return_val_if_fail (DEE_IS_HASH_INDEX (self), 0); - g_return_val_if_fail (term != NULL, 0); - - priv = DEE_HASH_INDEX (self)->priv; - term_data = g_hash_table_lookup (priv->terms, term); - - if (term_data == NULL) - return 0; - - return g_hash_table_size (term_data); -} - -static guint -dee_hash_index_get_supported_term_match_flags (DeeIndex *self) -{ - return DEE_TERM_MATCH_EXACT; -} - -static void -on_row_added (DeeIndex *self, - DeeModelIter *iter, - DeeModel *model) -{ - DeeHashIndexPrivate *priv; - DeeAnalyzer *analyzer; - guint i, num_terms; - const gchar *term; - GHashTable *term_data; - GPtrArray *row_term_data; - - - priv = DEE_HASH_INDEX (self)->priv; - analyzer = dee_index_get_analyzer (self); - - dee_term_list_clear (priv->term_list); - analyzer->analyze (model, iter, priv->term_list, analyzer->userdata); - num_terms = dee_term_list_num_terms (priv->term_list); - - if (num_terms == 0) - return; - - /* Make sure we have row_terms registered for this iter */ - row_term_data = (GPtrArray*) g_hash_table_lookup (priv->row_terms, iter); - if (row_term_data == NULL) - { - row_term_data = g_ptr_array_sized_new (num_terms); - g_hash_table_insert (priv->row_terms, iter, row_term_data); - } - - for (i = 0; i < num_terms; i++) - { - /* Important: The following works because @term lives in the scope - * of priv->term_list. This makes the 'const gchar*' to 'gpointer' - * casts valid. Yes, they even survive term_list.clear(). */ - term = dee_term_list_get_term (priv->term_list, i); - - /* Update priv->terms */ - term_data = g_hash_table_lookup (priv->terms, term); - - if (term_data == NULL) - { - term_data = g_hash_table_new (g_direct_hash, g_direct_equal); - g_hash_table_insert (priv->terms, (gpointer) term, term_data); - } - - /* Register the row for the term */ - g_hash_table_insert (term_data, iter, NULL); - - /* Update reverse map row -> terms */ - g_ptr_array_add(row_term_data, (gpointer) term); - } -} - -static void -on_row_removed (DeeIndex *self, - DeeModelIter *iter, - DeeModel *model) -{ - DeeHashIndexPrivate *priv; - GHashTable *term_data; - GPtrArray *row_term_data; - gint i; - gchar *term; - - priv = DEE_HASH_INDEX (self)->priv; - row_term_data = (GPtrArray*) g_hash_table_lookup (priv->row_terms, iter); - - if (row_term_data == NULL) - return; - - for (i = 0; i < row_term_data->len; i++) - { - term = g_ptr_array_index (row_term_data, i); - term_data = g_hash_table_lookup (priv->terms, term); - if (term_data == NULL) - continue; - g_hash_table_remove (term_data, iter); - - if (g_hash_table_size (term_data) == 0) - g_hash_table_remove (priv->terms, term); - } - - g_hash_table_remove (priv->row_terms, iter); -} - -static void -on_row_changed (DeeIndex *self, - DeeModelIter *iter, - DeeModel *model) -{ - on_row_removed (self, iter, model); - on_row_added (self, iter, model); -} - -/* - * API - */ - -/** - * dee_hash_index_new: - * @model: The mode to index - * @analyzer: The analyzer used to extract terms from the model - * - * Create a new hash index. - * - * Returns: A newly allocated hash index. Free with g_object_free(). - */ -DeeHashIndex* -dee_hash_index_new (DeeModel *model, - DeeAnalyzer *analyzer) -{ - GObject *self; - - self = g_object_new (DEE_TYPE_HASH_INDEX, - "model", model, - "analyzer", analyzer, - NULL); - - return (DeeHashIndex*) self; -} diff -Nru dee-0.5.22/dee/dee-hash-index.h dee-1.0.0/dee/dee-hash-index.h --- dee-0.5.22/dee/dee-hash-index.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-hash-index.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -#if !defined (_DEE_H_INSIDE) && !defined (DEE_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef _HAVE_DEE_HASH_INDEX_H -#define _HAVE_DEE_HASH_INDEX_H - -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -#define DEE_TYPE_HASH_INDEX (dee_hash_index_get_type ()) - -#define DEE_HASH_INDEX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - DEE_TYPE_HASH_INDEX, DeeHashIndex)) - -#define DEE_HASH_INDEX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \ - DEE_TYPE_HASH_INDEX, DeeHashIndexClass)) - -#define DEE_IS_HASH_INDEX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - DEE_TYPE_HASH_INDEX)) - -#define DEE_IS_HASH_INDEX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - DEE_TYPE_HASH_INDEX)) - -#define DEE_HASH_INDEX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - DBUS_TYPE_HASH_INDEX, DeeHashIndexClass)) - -typedef struct _DeeHashIndexClass DeeHashIndexClass; -typedef struct _DeeHashIndex DeeHashIndex; -typedef struct _DeeHashIndexPrivate DeeHashIndexPrivate; - -/** - * DeeHashIndex: - * - * All fields in the DeeHashIndex structure are private and should never be - * accessed directly - */ -struct _DeeHashIndex -{ - /*< private >*/ - DeeIndex parent; - - DeeHashIndexPrivate *priv; -}; - -struct _DeeHashIndexClass -{ - DeeIndexClass parent_class; -}; - -GType dee_hash_index_get_type (void) G_GNUC_CONST; - -DeeHashIndex* dee_hash_index_new (DeeModel *model, - DeeAnalyzer *analyzer); - -G_END_DECLS - -#endif /* _HAVE_DEE_HASH_INDEX_H */ diff -Nru dee-0.5.22/dee/dee-index.c dee-1.0.0/dee/dee-index.c --- dee-0.5.22/dee/dee-index.c 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-index.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,394 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by: - * Mikkel Kamstrup Erlandsen - */ - -/** - * SECTION:dee-index - * @short_description: An inverted index interface for smart access to a #DeeModel - * @include: dee.h - * - * #DeeIndex is an interface for doing key based access to a #DeeModel. - * A key in the index is known as a term and each term is - * mapped to a set of matching #DeeModelIters. - * - * The terms are calculated by means of a #DeeAnalyzer which extracts a set of - * terms from a given row in the model adding these terms to a #DeeTermList. - * There is a suite of analyzers shipped with Dee, which you can browse in the - * Analyzers section. - */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "dee-model.h" -#include "dee-index.h" -#include "dee-marshal.h" -#include "trace-log.h" - -G_DEFINE_ABSTRACT_TYPE (DeeIndex, dee_index, G_TYPE_OBJECT); - -#define DEE_INDEX_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_INDEX, DeeIndexPrivate)) - -/** - * DeeIndexPrivate: - * - * Ignore this structure. - **/ -struct _DeeIndexPrivate -{ - DeeModel *model; - DeeAnalyzer *analyzer; -}; - -enum -{ - PROP_0, - PROP_MODEL, - PROP_ANALYZER, -}; - -/* GObject stuff */ -static void -dee_index_finalize (GObject *object) -{ - DeeIndexPrivate *priv = DEE_INDEX (object)->priv; - - if (priv->model) - { - g_object_unref (priv->model); - priv->model = NULL; - } - if (priv->analyzer) - { - if (priv->analyzer->destroy) - priv->analyzer->destroy (priv->analyzer->userdata); - g_free (priv->analyzer); - priv->analyzer = NULL; - } - - G_OBJECT_CLASS (dee_index_parent_class)->finalize (object); -} - -static void -dee_index_set_property (GObject *object, - guint id, - const GValue *value, - GParamSpec *pspec) -{ - DeeIndexPrivate *priv = DEE_INDEX (object)->priv; - DeeAnalyzer *analyzer; - - switch (id) - { - case PROP_MODEL: - priv->model = DEE_MODEL (g_value_dup_object (value)); - break; - case PROP_ANALYZER: - priv->analyzer = g_new0 (DeeAnalyzer, 1); - analyzer = (DeeAnalyzer*) g_value_get_pointer(value); - priv->analyzer->analyze = analyzer->analyze; - priv->analyzer->userdata = analyzer->userdata; - priv->analyzer->destroy = analyzer->destroy; - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, id, pspec); - break; - } -} - -static void -dee_index_get_property (GObject *object, - guint id, - GValue *value, - GParamSpec *pspec) -{ - DeeIndexPrivate *priv = DEE_INDEX (object)->priv; - - switch (id) - { - case PROP_MODEL: - g_value_set_object(value, priv->model); - break; - case PROP_ANALYZER: - g_value_set_pointer(value, priv->analyzer); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, id, pspec); - break; - } -} - -static void -dee_index_class_init (DeeIndexClass *klass) -{ - GParamSpec *pspec; - GObjectClass *obj_class = G_OBJECT_CLASS (klass); - - obj_class->finalize = dee_index_finalize; - obj_class->get_property = dee_index_get_property; - obj_class->set_property = dee_index_set_property; - - /** - * DeeIndex:model: - * - * The #DeeModel being indexed - */ - pspec = g_param_spec_object ("model", "Model", - "The model being indexed", - DEE_TYPE_MODEL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY - | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (obj_class, PROP_MODEL, pspec); - - /** - * DeeIndex:analyzer: - * - * The #DeeAnalyzer used to extract terms from rows in the model - */ - pspec = g_param_spec_pointer("analyzer", "Analyzer", - "The analyzer extracting terms for each row", - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY - | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (obj_class, PROP_ANALYZER, pspec); - - /* Add private data */ - g_type_class_add_private (obj_class, sizeof (DeeIndexPrivate)); -} - -static void -dee_index_init (DeeIndex *self) -{ - self->priv = DEE_INDEX_GET_PRIVATE (self); -} - -/** - * dee_index_lookup: - * @self: The index to perform the lookup in - * @term: The term to look up on - * @flags: A bitmask of #DeeTermMatchFlag to control how matching is - * done - * - * Returns: (transfer full): A #DeeResultSet. Free with g_object_unref(). - */ -DeeResultSet* -dee_index_lookup (DeeIndex *self, - const gchar *term, - DeeTermMatchFlag flags) -{ - DeeIndexClass *klass; - - g_return_val_if_fail (DEE_IS_INDEX (self), NULL); - - klass = DEE_INDEX_GET_CLASS (self); - - return (* klass->lookup) (self, term, flags); -} - -/** - * dee_index_lookup_one: - * @self: The index to do the lookup in - * @term: The exact term to match - * - * Convenience function in for cases where you have a priori guarantee that - * a dee_index_lookup() call will return exactly 0 or 1 row. If the lookup - * returns more than 1 row a warning will be printed on standard error and - * %NULL will be returned. - * - * The typical use case for this function is if you need something akin to - * a primary key in a relational database. - * - * Return value: (transfer none): A #DeeModelIter pointing to the matching - * row or %NULL in case no rows matches @term - */ -DeeModelIter* -dee_index_lookup_one (DeeIndex *self, - const gchar *term) -{ - DeeResultSet *results; - DeeModelIter *iter; - - g_return_val_if_fail (DEE_IS_INDEX (self), NULL); - - results = dee_index_lookup (self, term, DEE_TERM_MATCH_EXACT); - - if (!dee_result_set_has_next (results)) - { - g_object_unref (results); - return NULL; - } - - iter = dee_result_set_next (results); - - if (dee_result_set_has_next (results)) - { - g_warning ("dee_index_lookup_one(index, '%s') expects exactly 0 or 1" - " rows in the result set. Found %u", - term, dee_result_set_get_n_rows (results)); - g_object_unref (results); - return NULL; - } - - g_object_unref (results); - return iter; - -} - -/** - * dee_index_foreach: - * @self: The index to iterate over - * @start_term: The term to start from or %NULL to iterate over all terms - * @func: (scope call): Called for each term in the index - * @userdata: (closure): Arbitrary data to pass back to @func - * - * Iterate over an index optionally starting from some given term. Note that - * unordered indexes (like #DeeHashIndex) has undefined behaviour with - * this method. - */ -void -dee_index_foreach (DeeIndex *self, - const gchar *start_term, - DeeIndexIterFunc func, - gpointer userdata) -{ - DeeIndexClass *klass; - - g_return_if_fail (DEE_IS_INDEX (self)); - - klass = DEE_INDEX_GET_CLASS (self); - - (* klass->foreach) (self, start_term, func, userdata); -} - -/** - * dee_index_get_model: - * @self: The index to get the model for - * - * Get the model being indexed by this index - * - * Returns: (transfer none): The #DeeModel being indexed by this index - */ -DeeModel* -dee_index_get_model (DeeIndex *self) -{ - g_return_val_if_fail (DEE_IS_INDEX (self), NULL); - - return self->priv->model; -} - -/** - * dee_index_get_analyzer: - * @self: The index to get the analyzer for - * - * Get the analyzer being used to extract terms from rows in the model - * - * Returns: (transfer none): The #DeeAnalyzer used to extract terms with - */ -DeeAnalyzer* -dee_index_get_analyzer (DeeIndex *self) -{ - g_return_val_if_fail (DEE_IS_INDEX (self), NULL); - - return self->priv->analyzer; -} - -/** - * dee_index_get_n_terms: - * @self: The index to get the number of terms for - * - * Get the number of terms in the index - * - * Returns: The number of unique terms in the index - */ -guint -dee_index_get_n_terms (DeeIndex *self) -{ - DeeIndexClass *klass; - - g_return_val_if_fail (DEE_IS_INDEX (self), 0); - - klass = DEE_INDEX_GET_CLASS (self); - - return (* klass->get_n_terms) (self); -} - -/** - * dee_index_get_n_rows: - * @self: The index to get the number of rows for - * - * Get the number of indexed rows. A row is only indexed if it has at least one - * term associated with it. If the analyzer has returned 0 terms then the row - * is omitted from the index. - * - * Returns: The number of rows in the index. Note that this may less than or - * equal to dee_model_get_n_rows(). - */ -guint -dee_index_get_n_rows (DeeIndex *self) -{ - DeeIndexClass *klass; - - g_return_val_if_fail (DEE_IS_INDEX (self), 0); - - klass = DEE_INDEX_GET_CLASS (self); - - return (* klass->get_n_rows) (self); -} - -/** - * dee_index_get_n_rows_for_term: - * @self: The index to inspect - * @term: The term to look for - * - * Get the number of rows that matches a given term - * - * Returns: The number of rows in the index registered for the given term - */ -guint -dee_index_get_n_rows_for_term (DeeIndex *self, - const gchar *term) -{ - DeeIndexClass *klass; - - g_return_val_if_fail (DEE_IS_INDEX (self), 0); - - klass = DEE_INDEX_GET_CLASS (self); - - return (* klass->get_n_rows_for_term) (self, term); -} - -/** - * dee_index_get_supported_term_match_flags: - * @self: The index to inspect - * - * Get the #DeeTermMatchFlag supported by this #DeeIndex instance - * - * Returns: A bit mask of the acceptedd #DeeTermMatchFlags - */ -guint -dee_index_get_supported_term_match_flags (DeeIndex *self) -{ - DeeIndexClass *klass; - - g_return_val_if_fail (DEE_IS_INDEX (self), 0); - - klass = DEE_INDEX_GET_CLASS (self); - - return (* klass->get_supported_term_match_flags) (self); -} diff -Nru dee-0.5.22/dee/dee-index.h dee-1.0.0/dee/dee-index.h --- dee-0.5.22/dee/dee-index.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-index.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,217 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -#if !defined (_DEE_H_INSIDE) && !defined (DEE_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef _HAVE_DEE_INDEX_H -#define _HAVE_DEE_INDEX_H - -#include -#include -#include -#include -#include - -G_BEGIN_DECLS - -#define DEE_TYPE_INDEX (dee_index_get_type ()) - -#define DEE_INDEX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - DEE_TYPE_INDEX, DeeIndex)) - -#define DEE_INDEX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \ - DEE_TYPE_INDEX, DeeIndexClass)) - -#define DEE_IS_INDEX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - DEE_TYPE_INDEX)) - -#define DEE_IS_INDEX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - DEE_TYPE_INDEX)) - -#define DEE_INDEX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - DBUS_TYPE_INDEX, DeeIndexClass)) - -typedef struct _DeeIndexClass DeeIndexClass; -typedef struct _DeeIndex DeeIndex; -typedef struct _DeeIndexPrivate DeeIndexPrivate; -typedef struct _DeeAnalyzer DeeAnalyzer; - -/** - * DeeIndexIterFunc: - * @key: A key in the index being traversed - * @rows: A #DeeResultSet. Do not free or modify. - * @userdata: The pointer passed to dee_index_foreach() - * - * The signature of the function passed to dee_index_foreach(). - * - * Be cautious if you plan on modifying the rows in the model via the - * DeeModelIters you find. Your code may have to be reentrant since - * the index may change in reaction to the changes in the model. It's not - * impossible to do this in a non-broken manner, but it may likely require - * you calling dee_model_freeze_signals() and dee_model_thaw_signals() at - * strategic points. - * - * Returns: %FALSE if iteration should stop, %TRUE if it should continue - */ -typedef gboolean (*DeeIndexIterFunc) (const gchar *key, - DeeResultSet *rows, - gpointer userdata); - -/** - * DeeAnalyzerFunc: - * @model: The model being indexed - * @iter: The row to extract terms for - * @out_terms: A #DeeTermList to store the extracted terms in - * @userdata: The @userdata member of the #DeeAnalyzer instance - * - * The signature of the function used to build a #DeeTermList for a given - * row in a #DeeModel. - */ -typedef void (*DeeAnalyzerFunc) (DeeModel *model, - DeeModelIter *iter, - DeeTermList *out_terms, - gpointer userdata); - -/** - * DeeAnalyzer: - * @analyzer: The #DeeAnalyzerFunc to call to extract terms for a - * given row - * @userdata: Arbitrary data to pass to @analyze - * @destroy: If non-%NULL this function will be invoked on @userdata when - * the #DeeIndex is finalized - * - * Structure encapsulating the logic used to extract terms from a model. This - * library ships with a few simple default analyzers. See for example - * dee_analyzer_new_for_key_column() and dee_analyzer_new_for_full_text_column(). - * - * You can access the analyzer used by a #DeeIndex via the - * #DeeIndex:analyzer property. - */ -struct _DeeAnalyzer -{ - DeeAnalyzerFunc analyze; - gpointer userdata; - GDestroyNotify destroy; - - /*< private >*/ - gpointer reserved1; - gpointer reserved2; - gpointer reserved3; - gpointer reserved4; - gpointer reserved5; -}; - -/** - * DeeTermMatchFlag: - * @DEE_TERM_MATCH_EXACT: Match terms byte for byte as specified in the - * query string - * @DEE_TERM_MATCH_PREFIX: Match if the indexed term begins with the byte string - * being queried by. This is also sometimes known as - * truncated- or wildcard queries - * - * Flags passed to dee_index_lookup() to control how matching is done. - * Note that it is not required that index backends support more than just - * #DEE_TERM_MATCH_EXACT. - * - * You can query for the supported flags with - * dee_index_get_supported_term_match_flags(). - */ -typedef enum -{ - DEE_TERM_MATCH_EXACT = 0, - DEE_TERM_MATCH_PREFIX = 1 << 1 -} DeeTermMatchFlag; - -/** - * DeeIndex: - * - * All fields in the DeeIndex structure are private and should never be - * accessed directly - */ -struct _DeeIndex -{ - /*< private >*/ - GObject parent; - - DeeIndexPrivate *priv; -}; - -struct _DeeIndexClass -{ - GObjectClass parent_class; - - /*< public >*/ - DeeResultSet* (* lookup) (DeeIndex *self, - const gchar *term, - DeeTermMatchFlag flags); - - void (* foreach) (DeeIndex *self, - const gchar *start_term, - DeeIndexIterFunc func, - gpointer userdata); - - guint (* get_n_terms) (DeeIndex *self); - - guint (* get_n_rows) (DeeIndex *self); - - guint (* get_n_rows_for_term)(DeeIndex *self, - const gchar *term); - - guint (*get_supported_term_match_flags) (DeeIndex *self); - - /*< private >*/ - void (*_dee_index_1) (void); - void (*_dee_index_2) (void); - void (*_dee_index_3) (void); - void (*_dee_index_4) (void); - void (*_dee_index_5) (void); -}; - -GType dee_index_get_type (void) G_GNUC_CONST; - -DeeResultSet* dee_index_lookup (DeeIndex *self, - const gchar *term, - DeeTermMatchFlag flags); - -DeeModelIter* dee_index_lookup_one (DeeIndex *self, - const gchar *term); - -void dee_index_foreach (DeeIndex *self, - const gchar *start_term, - DeeIndexIterFunc func, - gpointer userdata); - -DeeModel* dee_index_get_model (DeeIndex *self); - -DeeAnalyzer* dee_index_get_analyzer (DeeIndex *self); - -guint dee_index_get_n_terms (DeeIndex *self); - -guint dee_index_get_n_rows (DeeIndex *self); - -guint dee_index_get_n_rows_for_term (DeeIndex *self, - const gchar *term); - -guint dee_index_get_supported_term_match_flags (DeeIndex *self); - -G_END_DECLS - -#endif /* _HAVE_DEE_INDEX_H */ diff -Nru dee-0.5.22/dee/dee-marshal.c dee-1.0.0/dee/dee-marshal.c --- dee-0.5.22/dee/dee-marshal.c 2011-09-23 14:17:09.000000000 +0000 +++ dee-1.0.0/dee/dee-marshal.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,164 +0,0 @@ - -#include - - -#ifdef G_ENABLE_DEBUG -#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) -#define g_marshal_value_peek_char(v) g_value_get_char (v) -#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) -#define g_marshal_value_peek_int(v) g_value_get_int (v) -#define g_marshal_value_peek_uint(v) g_value_get_uint (v) -#define g_marshal_value_peek_long(v) g_value_get_long (v) -#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v) -#define g_marshal_value_peek_int64(v) g_value_get_int64 (v) -#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v) -#define g_marshal_value_peek_enum(v) g_value_get_enum (v) -#define g_marshal_value_peek_flags(v) g_value_get_flags (v) -#define g_marshal_value_peek_float(v) g_value_get_float (v) -#define g_marshal_value_peek_double(v) g_value_get_double (v) -#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v) -#define g_marshal_value_peek_param(v) g_value_get_param (v) -#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v) -#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v) -#define g_marshal_value_peek_object(v) g_value_get_object (v) -#define g_marshal_value_peek_variant(v) g_value_get_variant (v) -#else /* !G_ENABLE_DEBUG */ -/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API. - * Do not access GValues directly in your code. Instead, use the - * g_value_get_*() functions - */ -#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int -#define g_marshal_value_peek_char(v) (v)->data[0].v_int -#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint -#define g_marshal_value_peek_int(v) (v)->data[0].v_int -#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint -#define g_marshal_value_peek_long(v) (v)->data[0].v_long -#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong -#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64 -#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64 -#define g_marshal_value_peek_enum(v) (v)->data[0].v_long -#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong -#define g_marshal_value_peek_float(v) (v)->data[0].v_float -#define g_marshal_value_peek_double(v) (v)->data[0].v_double -#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer -#endif /* !G_ENABLE_DEBUG */ - - -/* VOID:BOXED,BOXED,BOXED (./dee-marshal.list:2) */ -void -_dee_marshal_VOID__BOXED_BOXED_BOXED (GClosure *closure, - GValue *return_value G_GNUC_UNUSED, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint G_GNUC_UNUSED, - gpointer marshal_data) -{ - typedef void (*GMarshalFunc_VOID__BOXED_BOXED_BOXED) (gpointer data1, - gpointer arg_1, - gpointer arg_2, - gpointer arg_3, - gpointer data2); - register GMarshalFunc_VOID__BOXED_BOXED_BOXED callback; - register GCClosure *cc = (GCClosure*) closure; - register gpointer data1, data2; - - g_return_if_fail (n_param_values == 4); - - if (G_CCLOSURE_SWAP_DATA (closure)) - { - data1 = closure->data; - data2 = g_value_peek_pointer (param_values + 0); - } - else - { - data1 = g_value_peek_pointer (param_values + 0); - data2 = closure->data; - } - callback = (GMarshalFunc_VOID__BOXED_BOXED_BOXED) (marshal_data ? marshal_data : cc->callback); - - callback (data1, - g_marshal_value_peek_boxed (param_values + 1), - g_marshal_value_peek_boxed (param_values + 2), - g_marshal_value_peek_boxed (param_values + 3), - data2); -} - -/* VOID:BOXED,BOXED (./dee-marshal.list:5) */ -void -_dee_marshal_VOID__BOXED_BOXED (GClosure *closure, - GValue *return_value G_GNUC_UNUSED, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint G_GNUC_UNUSED, - gpointer marshal_data) -{ - typedef void (*GMarshalFunc_VOID__BOXED_BOXED) (gpointer data1, - gpointer arg_1, - gpointer arg_2, - gpointer data2); - register GMarshalFunc_VOID__BOXED_BOXED callback; - register GCClosure *cc = (GCClosure*) closure; - register gpointer data1, data2; - - g_return_if_fail (n_param_values == 3); - - if (G_CCLOSURE_SWAP_DATA (closure)) - { - data1 = closure->data; - data2 = g_value_peek_pointer (param_values + 0); - } - else - { - data1 = g_value_peek_pointer (param_values + 0); - data2 = closure->data; - } - callback = (GMarshalFunc_VOID__BOXED_BOXED) (marshal_data ? marshal_data : cc->callback); - - callback (data1, - g_marshal_value_peek_boxed (param_values + 1), - g_marshal_value_peek_boxed (param_values + 2), - data2); -} - -/* VOID:STRING,STRING (./dee-marshal.list:8) */ -void -_dee_marshal_VOID__STRING_STRING (GClosure *closure, - GValue *return_value G_GNUC_UNUSED, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint G_GNUC_UNUSED, - gpointer marshal_data) -{ - typedef void (*GMarshalFunc_VOID__STRING_STRING) (gpointer data1, - gpointer arg_1, - gpointer arg_2, - gpointer data2); - register GMarshalFunc_VOID__STRING_STRING callback; - register GCClosure *cc = (GCClosure*) closure; - register gpointer data1, data2; - - g_return_if_fail (n_param_values == 3); - - if (G_CCLOSURE_SWAP_DATA (closure)) - { - data1 = closure->data; - data2 = g_value_peek_pointer (param_values + 0); - } - else - { - data1 = g_value_peek_pointer (param_values + 0); - data2 = closure->data; - } - callback = (GMarshalFunc_VOID__STRING_STRING) (marshal_data ? marshal_data : cc->callback); - - callback (data1, - g_marshal_value_peek_string (param_values + 1), - g_marshal_value_peek_string (param_values + 2), - data2); -} - diff -Nru dee-0.5.22/dee/dee-marshal.h dee-1.0.0/dee/dee-marshal.h --- dee-0.5.22/dee/dee-marshal.h 2011-09-23 14:17:09.000000000 +0000 +++ dee-1.0.0/dee/dee-marshal.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ - -#ifndef ___dee_marshal_MARSHAL_H__ -#define ___dee_marshal_MARSHAL_H__ - -#include - -G_BEGIN_DECLS - -/* VOID:BOXED,BOXED,BOXED (./dee-marshal.list:2) */ -extern void _dee_marshal_VOID__BOXED_BOXED_BOXED (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); - -/* VOID:BOXED,BOXED (./dee-marshal.list:5) */ -extern void _dee_marshal_VOID__BOXED_BOXED (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); - -/* VOID:STRING,STRING (./dee-marshal.list:8) */ -extern void _dee_marshal_VOID__STRING_STRING (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); - -G_END_DECLS - -#endif /* ___dee_marshal_MARSHAL_H__ */ - diff -Nru dee-0.5.22/dee/dee-marshal.list dee-1.0.0/dee/dee-marshal.list --- dee-0.5.22/dee/dee-marshal.list 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-marshal.list 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -# DbusSharedModel::RowsAdded, DbusSharedModel::RowsChanged -VOID:BOXED,BOXED,BOXED - -# DbusSharedModel::RowsRemoved -VOID:BOXED,BOXED - -# DbusPeer::bye -VOID:STRING,STRING diff -Nru dee-0.5.22/dee/dee-model.c dee-1.0.0/dee/dee-model.c --- dee-0.5.22/dee/dee-model.c 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-model.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1706 +0,0 @@ -/* - * Copyright (C) 2009 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by: - * Neil Jagdish Patel - * Mikkel Kamstrup Erlandsen - * - * NB: Inspiration for column storage taken from GtkListStore - * API inspired by ClutterModel by Matthew Allumn - * Neil Patel - * Emmanuele Bassi - */ -/** - * SECTION:dee-model - * @short_description: A generic table model interface - * @include: dee.h - * - * #DeeModel is a generic table model that can holds #GVariants as - * column values. Each column is restricted to hold variants with some - * predefined type signature. This is known as the - * column schema. - * - * - * Indexes - Access by Key or Full Text Analysis - * - * Instead of forcing you to search the rows and columns for given values - * or patterns #DeeModel is integrated with a powerful #DeeIndex that allows - * you to create custom indexes over the model content that are updated - * automatically as the model changes. - * - * - * Indexes can be created for integer keys, string keys (fx. URIs), or for - * full text search into the model contents. The indexing API is flexible - * and extensible and can provide huge optimizations in terms of access times - * if you find yourself iterating over the model searching for something. - * - * - * - * - * Tags - Attach Arbitrary Data to Rows - * - * It's a very common pattern that you want to render a #DeeModel into some - * view in a classinc MVC pattern. If the view needs to reflect changes in the - * model dynamically you often find yourself creating ad-hoc mappings between - * the rows of the model and the widgets in your view. - * - * - * In situations where you need to pair the rows in a model with some external - * data structure the tags API may come in handy. - * It consists of the functions dee_model_register_tag(), dee_model_set_tag(), - * dee_model_get_tag(), and dee_model_clear_tag(). - * - * - * - */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include - -#include "dee-model.h" -#include "dee-marshal.h" -#include "trace-log.h" - -typedef DeeModelIface DeeModelInterface; -G_DEFINE_INTERFACE (DeeModel, dee_model, G_TYPE_OBJECT) - -enum -{ - /* Public signals */ - DEE_MODEL_SIGNAL_ROW_ADDED, - DEE_MODEL_SIGNAL_ROW_REMOVED, - DEE_MODEL_SIGNAL_ROW_CHANGED, - - DEE_MODEL_LAST_SIGNAL -}; - -static guint32 dee_model_signals[DEE_MODEL_LAST_SIGNAL] = { 0 }; - -#define CHECK_SCHEMA(self,return_expression) \ -if (G_UNLIKELY (dee_model_get_schema (self, NULL) == NULL)) \ - { \ - g_critical ("The model %s@%p doesn't have a schema", \ - G_OBJECT_TYPE_NAME (self), self); \ - return_expression; \ - } - -static void -dee_model_default_init (DeeModelInterface *klass) -{ - /** - * DeeModel::row-added: - * @self: the #DeeModel on which the signal is emitted - * @iter: (transfer none) (type Dee.ModelIter): a #DeeModelIter pointing to the newly added row - * - * Connect to this signal to be notified when a row is added to @self. - **/ - dee_model_signals[DEE_MODEL_SIGNAL_ROW_ADDED] = - g_signal_new ("row-added", - DEE_TYPE_MODEL, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (DeeModelIface,row_added), - NULL, NULL, - g_cclosure_marshal_VOID__POINTER, - G_TYPE_NONE, 1, - G_TYPE_POINTER); - /** - * DeeModel::row-removed: - * @self: the #DeeModel on which the signal is emitted - * @iter: (transfer none) (type Dee.ModelIter): a #DeeModelIter pointing to the removed row - * - * Connect to this signal to be notified when a row is removed from @self. - * The row is still valid while the signal is being emitted. - **/ - dee_model_signals[DEE_MODEL_SIGNAL_ROW_REMOVED] = - g_signal_new ("row-removed", - DEE_TYPE_MODEL, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (DeeModelIface,row_removed), - NULL, NULL, - g_cclosure_marshal_VOID__POINTER, - G_TYPE_NONE, 1, - G_TYPE_POINTER); - /** - * DeeModel::row-changed: - * @self: the #DeeModel on which the signal is emitted - * @iter: (transfer none) (type Dee.ModelIter): a #DeeModelIter pointing to the changed row - * - * Connect to this signal to be notified when a row is changed. - **/ - dee_model_signals[DEE_MODEL_SIGNAL_ROW_CHANGED] = - g_signal_new ("row-changed", - DEE_TYPE_MODEL, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (DeeModelIface,row_changed), - NULL, NULL, - g_cclosure_marshal_VOID__POINTER, - G_TYPE_NONE, 1, - G_TYPE_POINTER); -} - -/** - * dee_model_set_schema: - * @self: The #DeeModel to set the column layout for - * @VarArgs: A list of #GVariant type strings terminated by a %NULL - * - * Set the #GVariant types and the number of columns used by @self. - * This method must be called exactly once before using @self. Note that - * some constructors will do this for you. - * - * To create a model with three columns; a 32 bit integer, a string, - * and lastly an array of strings, you would do: - * - * DeeModel *model; - * model = dee_sequence_model_new (); - * dee_model_set_schema (model, "i", "s", "as", NULL); - * - */ -void -dee_model_set_schema (DeeModel *self, - ...) -{ - va_list args; - - g_return_if_fail (DEE_IS_MODEL (self)); - - va_start (args, self); - dee_model_set_schema_valist(self, &args); - va_end (args); -} - -/** - * dee_model_set_schema_valist: (skip) - * @self: The #DeeModel to change - * @VarArgs: A list of #GVariant type strings terminated by a %NULL - * - * Like dee_model_set_schema() but for language bindings. - */ -void -dee_model_set_schema_valist (DeeModel *self, - va_list *args) -{ - DeeModelIface *iface; - GSList *columns, *iter; - const gchar *column_schema; - gchar **column_schemas; - guint n_columns, i; - - g_return_if_fail (DEE_IS_MODEL (self)); - - /* Extract and validate the column schema strings from the va_list */ - column_schema = va_arg (*args, const gchar*); - n_columns = 0; - columns = NULL; - while (column_schema != NULL) - { - if (!g_variant_type_string_is_valid (column_schema)) - { - g_critical ("When setting schema for DeeModel %p: '%s' is not a " - "valid GVariant type string", self, column_schema); - return; - } - - columns = g_slist_prepend (columns, g_strdup (column_schema)); - column_schema = va_arg (*args, const gchar*); - n_columns++; - } - - /* Construct a string array with the validated column schemas */ - columns = g_slist_reverse (columns); - column_schemas = g_new0 (gchar*, n_columns + 1); - - for ((i = 0, iter = columns); iter; (i++, iter = iter->next)) - { - column_schemas[i] = iter->data; // steal the duped type string - } - -#ifdef ENABLE_TRACE_LOG - gchar* schema = g_strjoinv (", ", column_schemas); - trace_object (self, "Set schema: (%s)", schema); - g_free (schema); -#endif - - iface = DEE_MODEL_GET_IFACE (self); - (* iface->set_schema_full) (self, (const gchar**) column_schemas, n_columns); - - g_slist_free (columns); - g_strfreev (column_schemas); -} - -/** - * dee_model_set_schema_full: - * @self: The #DeeModel to set the column layout for - * @column_schemas: (array length=num_columns zero-terminated=1) (element-type utf8) (transfer none): A list of #GVariant type strings terminated by a %NULL - * @num_columns: an integer specifying the array length for @VarArgs - * - * Set the #GVariant types and the number of columns used by @self. - * This method must be called exactly once before using @self. Note that - * some constructors will do this for you. - */ -void -dee_model_set_schema_full (DeeModel *self, - const gchar* const *column_schemas, - guint num_columns) -{ - DeeModelIface *iface; - - g_return_if_fail (DEE_IS_MODEL (self)); - - if (dee_model_get_schema (self, NULL) != NULL) - { - g_critical ("The model %s@%p already has a schema set", - G_OBJECT_TYPE_NAME (self), self); - return; - } - - iface = DEE_MODEL_GET_IFACE (self); - - (* iface->set_schema_full) (self, column_schemas, num_columns); -} - -/** - * dee_model_get_schema: - * @self: The #DeeModel to get the the schema for - * @num_columns: (out) (allow-none): Address of an integer in which to store the - * number of columns in @self. Or %NULL to ignore the array length. - * - * Get a %NULL-terminated array of #GVariant type strings that defines the - * required formats for the columns of @self. - * - * Returns: (array) (element-type utf8) (transfer none): A %NULL-terminated - * array of #GVariant type strings. The length of - * the returned array is written to @num_columns. The returned array - * should not be freed or modified. It is owned by the model. - */ -const gchar* const* -dee_model_get_schema (DeeModel *self, - guint *num_columns) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->get_schema) (self, num_columns); -} - -/** - * dee_model_get_column_schema: - * @self: a #DeeModel - * @column: the column to get retrieve the #GVariant type string of - * - * Get the #GVariant signature of a column - * - * Return value: the #GVariant signature of the column at index @column - */ -const gchar* -dee_model_get_column_schema (DeeModel *self, - guint column) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->get_column_schema) (self, column); -} - -/** - * dee_model_get_n_columns: - * @self: a #DeeModel - * - * Gets the number of columns in @self - * - * Return value: the number of columns per row in @self - **/ -guint -dee_model_get_n_columns (DeeModel *self) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), 0); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->get_n_columns) (self); -} - -/** - * dee_model_get_n_rows: - * @self: a #DeeModel - * - * Gets the number of rows in @self - * - * Return value: the number of rows in @self - **/ -guint -dee_model_get_n_rows (DeeModel *self) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), 0); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->get_n_rows) (self); -} - -/** - * dee_model_build_row: - * @self: The model to create a row for - * @out_row_members: An array to write the values to or %NULL to allocate - * a new array. If non-%NULL it must have a length - * that is longer or equal to the number of columns in @self - * @VarArgs: A list with values matching the column schemas of @self. - * Basic variant types are passed directly while any other - * types must be boxed in a #GVariant. It's important to note that - * any floating references on variants passed to this method will be - * not be consumed. A %NULL value for a string - * type column will be converted to the empty string. - * - * Build an array of #GVariants with values from the variadic argument - * list according to the model schema for @self. The caller must call - * g_variant_ref_sink() and g_variant_unref() on all the returned variants and - * g_free() the array itself if %NULL was passed as @out_row_members. - * - * This is utility function and will not touch or modify @self in any way. - * - * Returns: If @out_row_members is %NULL a newly allocated array of variants - * will be returned and the array must be freed with g_free(). - * If @out_row_members is non%NULL it will be reused, and variants in - * the array may or may not have floating references, which means the - * caller must make sure that g_variant_ref_sink() and - * g_variant_unref() are called on them. - * - */ -GVariant** -dee_model_build_row (DeeModel *self, - GVariant **out_row_members, - ...) -{ - va_list args; - GVariant **result; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - CHECK_SCHEMA (self, return NULL); - - va_start (args, out_row_members); - result = dee_model_build_row_valist (self, out_row_members, &args); - va_end (args); - - return result; -} - -/** - * dee_model_build_row_valist: (skip): - * @self: The model to build a row for - * @out_row_members: An array to write the values to or %NULL to allocate - * a new array - * @args: A %va_list of arguments as described in dee_model_build_row() - * - * Like dee_model_build_row() but intended for language bindings. - * - * Returns: See dee_model_build_row() - */ -GVariant** -dee_model_build_row_valist (DeeModel *self, - GVariant **out_row_members, - va_list *args) -{ - guint i, n_cols; - const gchar *col_schema; - const gchar *col_string; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - n_cols = dee_model_get_n_columns (self); - - if (out_row_members == NULL) - out_row_members = g_new0 (GVariant*, n_cols); - - for (i = 0; i < n_cols; i++) - { - col_schema = dee_model_get_column_schema (self, i); - - /* Basic types are passed raw, while everything else is boxed in - * a GVariant already */ - if (g_variant_type_is_basic (G_VARIANT_TYPE (col_schema))) - { - switch (col_schema[0]) - { - case 's': - case 'o': - case 'g': - col_string = va_arg (*args, const gchar*); - out_row_members[i] = g_variant_new (col_schema, - col_string ? col_string : ""); - break; - default: - out_row_members[i] = g_variant_new_va (col_schema, NULL, args); - } - } - else - out_row_members[i] = va_arg (*args, GVariant*); - - if (G_UNLIKELY (out_row_members[i] == NULL)) - { - g_critical ("Trying to build a row with a NULL member on position" - " %i. This is probably an error in an application using" - " libdee", i); - return NULL; - } - } - - return out_row_members; -} - -/** - * dee_model_append: - * @self: a #DeeModel - * @VarArgs: A list of values matching the column schemas of @self. - * Any basic variant type is passed as the standard C type while - * any other type must be boxed in a #GVariant. Any floating - * references will be consumed. A %NULL value for a string - * type column will be converted to the empty string. - * - * Creates and appends a new row to the end of a #DeeModel, setting the row - * values upon creation. - * - * For and example see dee_model_insert_before(). - * - * Returns: (transfer none) (type Dee.ModelIter): A #DeeModelIter pointing to the new row - */ -DeeModelIter* -dee_model_append (DeeModel *self, - ...) -{ - DeeModelIter *iter; - va_list args; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - va_start (args, self); - iter = dee_model_append_valist (self, &args); - va_end (args); - - return iter; -} - -/** - * dee_model_append_valist: (skip): - * @self: A #DeeModel - * @args: A pointer to a variable argument list - * - * Returns: A #DeeModelIter pointing to the new row - */ -DeeModelIter* -dee_model_append_valist (DeeModel *self, - va_list *args) -{ - DeeModelIface *iface; - DeeModelIter *iter; - GVariant **row_members; - gsize slice_size; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - CHECK_SCHEMA (self, return NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - /* We use the slice allocator for this and not just g_new() since we - * can expect a lot of allocations of the same size */ - slice_size = dee_model_get_n_columns (self) * sizeof(gpointer); - row_members = g_slice_alloc (slice_size); - dee_model_build_row_valist (self, row_members, args); - - iter = (* iface->append_row) (self, row_members); - g_slice_free1 (slice_size, row_members); - return iter; -} - -/** - * dee_model_append_row: - * @self: The model to prepend a row to - * @row_members: (array zero-terminated=1): An array of #GVariants with type - * signature matching those of the column schemas of @self. - * If any of the variants have floating references they will be - * consumed - * - * Like dee_model_append() but intended for language bindings or - * situations where you work with models on a meta level and may not have - * a prior knowledge of the column schemas of the models. See also - * dee_model_build_row(). - * - * Returns: (transfer none) (type Dee.ModelIter): A #DeeModelIter pointing to the new row - */ -DeeModelIter* -dee_model_append_row (DeeModel *self, - GVariant **row_members) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - CHECK_SCHEMA (self, return NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->append_row) (self, row_members); -} - -/** - * dee_model_prepend: - * @self: a #DeeModel - * @VarArgs: A list of values matching the column schemas of @self. - * Any basic variant type is passed as the standard C type while - * any other type must be boxed in a #GVariant. Any floating - * references will be consumed. A %NULL value for a string - * type column will be converted to the empty string. - * - * Creates and prepends a new row to the beginning of a #DeeModel, setting the - * row values upon creation. - * - * Returns: (transfer none) (type Dee.ModelIter): A #DeeModelIter pointing to the new row - * - * Example: - * - * - * DeeModel *model; - * model = ... - * dee_model_set_schema (model, "i", "s", NULL); - * dee_model_prepend (model, 10, "Rooney"); - * - */ -DeeModelIter* -dee_model_prepend (DeeModel *self, - ...) -{ - DeeModelIter *iter; - va_list args; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - va_start (args, self); - iter = dee_model_prepend_valist (self, &args); - va_end (args); - - return iter; -} - -/** - * dee_model_prepend_valist: (skip): - * @self: A #DeeModel - * @args: A pointer to a variable argument list - * - * Returns: A #DeeModelIter pointing to the new row - */ -DeeModelIter* -dee_model_prepend_valist (DeeModel *self, - va_list *args) -{ - DeeModelIface *iface; - DeeModelIter *iter; - GVariant **row_members; - gsize slice_size; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - CHECK_SCHEMA (self, return NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - /* We use the slice allocator for this and not just g_new() since we - * can expect a lot of allocations of the same size */ - slice_size = dee_model_get_n_columns (self) * sizeof(gpointer); - row_members = g_slice_alloc (slice_size); - dee_model_build_row_valist (self, row_members, args); - - iter = (* iface->prepend_row) (self, row_members); - g_slice_free1 (slice_size, row_members); - return iter; -} - -/** - * dee_model_prepend_row: - * @self: The model to prepend a row to - * @row_members: (array zero-terminated=1): An array of - * #GVariants with type signature matching those of - * the column schemas of @self. If any of the variants have - * floating references they will be consumed. - * - * Like dee_model_prepend() but intended for language bindings or - * situations where you work with models on a meta level and may not have - * a priori knowledge of the column schemas of the models. See also - * dee_model_build_row(). - * - * Returns: (transfer none) (type Dee.ModelIter): A #DeeModelIter pointing to the new row - */ -DeeModelIter* -dee_model_prepend_row (DeeModel *self, - GVariant **row_members) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - CHECK_SCHEMA (self, return NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->prepend_row) (self, row_members); -} - -/** - * dee_model_insert: - * @self: a #DeeModel - * @pos: The index to insert the row on. The existing row will be pushed down - * @VarArgs: A list of values matching the column schemas of @self. - * Any basic variant type is passed as the standard C type while - * any other type must be boxed in a #GVariant. Any floating - * references will be consumed. A %NULL value for a string - * type column will be converted to the empty string. - * - * Creates and inserts a new row into a #DeeModel, pushing the existing - * rows down. - * - * For and example see dee_model_insert_before(). - * - * Returns: (transfer none) (type Dee.ModelIter): A #DeeModelIter pointing to the new row - */ -DeeModelIter* -dee_model_insert (DeeModel *self, - guint pos, - ...) -{ - DeeModelIter *iter; - va_list args; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - va_start (args, pos); - iter = dee_model_insert_valist (self, pos, &args); - va_end (args); - - return iter; -} - -/** - * dee_model_insert_valist: (skip): - * @self: A #DeeModel - * @pos: The index to insert the row on. The existing row will be pushed down - * @args: A pointer to a variable argument list - * - * Returns: A #DeeModelIter pointing to the new row - */ -DeeModelIter* -dee_model_insert_valist (DeeModel *self, - guint pos, - va_list *args) -{ - DeeModelIface *iface; - DeeModelIter *iter; - GVariant **row_members; - gsize slice_size; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - CHECK_SCHEMA (self, return NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - /* We use the slice allocator for this and not just g_new() since we - * can expect a lot of allocations of the same size */ - slice_size = dee_model_get_n_columns (self) * sizeof(gpointer); - row_members = g_slice_alloc (slice_size); - dee_model_build_row_valist (self, row_members, args); - - iter = (* iface->insert_row) (self, pos, row_members); - g_slice_free1 (slice_size, row_members); - return iter; -} - -/** - * dee_model_insert_row: - * @self: a #DeeModel - * @pos: The index to insert the row on. The existing row will be pushed down. - * @row_members: (array zero-terminated=1): An array of - * #GVariants with type signature matching those of - * the column schemas of @self. If any of the variants have - * floating references they will be consumed. - * - * As dee_model_insert(), but intended for language bindings or - * situations where you work with models on a meta level and may not have - * a priori knowledge of the column schemas of the models. See also - * dee_model_build_row(). - * - * Returns: (transfer none) (type Dee.ModelIter): A #DeeModelIter pointing to the new row - */ -DeeModelIter* -dee_model_insert_row (DeeModel *self, - guint pos, - GVariant **row_members) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - CHECK_SCHEMA (self, return NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->insert_row) (self, pos, row_members); -} - -/** - * dee_model_insert_before: - * @self: a #DeeModel - * @iter: An iter pointing to the row before which to insert the new one - * @VarArgs: A list of values matching the column schemas of @self. - * Any basic variant type is passed as the standard C type while - * any other type must be boxed in a #GVariant. Any floating - * references will be consumed. A %NULL value for a string - * type column will be converted to the empty string. - * - * Creates and inserts a new row into a #DeeModel just before the row pointed - * to by @iter. - * - * For example, to insert a new row in a model with schema ("u", "s", "as") - * you would do: - * - * - * DeeModelIter *iter; - * GVariantBuilder b; - * - * g_variant_builder_init (&b, "as"); - * g_variant_builder_add (&b, "s", "Hello"); - * g_variant_builder_add (&b, "s", "World"); - * - * iter = find_my_special_row (model); - * dee_model_insert_before (model, iter, - * 27, - * "Howdy", - * g_variant_builder_end (&b)); - * - * - * Returns: (transfer none) (type Dee.ModelIter): A #DeeModelIter pointing to the new row - */ -DeeModelIter* -dee_model_insert_before (DeeModel *self, - DeeModelIter *iter, - ...) -{ - va_list args; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - va_start (args, iter); - iter = dee_model_insert_before_valist (self, iter, &args); - va_end (args); - - return iter; -} - -/** - * dee_model_insert_before_valist: (skip): - * @self: a #DeeModel - * @iter: An iter pointing to the row before which to insert the new one - * @args: See dee_model_insert_before() - * - * As dee_model_insert_before(), but intended for language bindings. - * - * Returns: A #DeeModelIter pointing to the new row - */ -DeeModelIter* -dee_model_insert_before_valist (DeeModel *self, - DeeModelIter *iter, - va_list *args) -{ - DeeModelIface *iface; - GVariant **row_members; - gsize slice_size; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - CHECK_SCHEMA (self, return NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - /* We use the slice allocator for this and not just g_new() since we - * can expect a lot of allocations of the same size */ - slice_size = dee_model_get_n_columns (self) * sizeof(gpointer); - row_members = g_slice_alloc (slice_size); - dee_model_build_row_valist (self, row_members, args); - - iter = (* iface->insert_row_before) (self, iter, row_members); - g_slice_free1 (slice_size, row_members); - return iter; -} - -/** - * dee_model_insert_row_before: - * @self: a #DeeModel - * @iter: An iter pointing to the row before which to insert the new one - * @row_members: (array zero-terminated=1): An array of - * #GVariants with type signature matching those of the - * column schemas of @self. If any of the variants have floating - * references they will be consumed. - * - * As dee_model_insert_before(), but intended for language bindings or - * situations where you work with models on a meta level and may not have - * a priori knowledge of the column schemas of the models. See also - * dee_model_build_row(). - * - * Returns: (transfer none) (type Dee.ModelIter): A #DeeModelIter pointing to the new row - **/ -DeeModelIter* -dee_model_insert_row_before (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - CHECK_SCHEMA (self, return NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->insert_row_before) (self, iter, row_members); -} - -/** - * dee_model_remove: - * @self: a #DeeModel - * @iter: a #DeeModelIter pointing to the row to remove - * - * Removes the row at the given position from the model. - */ -void -dee_model_remove (DeeModel *self, - DeeModelIter *iter) -{ - DeeModelIface *iface; - - g_return_if_fail (DEE_IS_MODEL (self)); - - CHECK_SCHEMA (self, return); - - iface = DEE_MODEL_GET_IFACE (self); - - (* iface->remove) (self, iter); -} - -/** - * dee_model_clear: - * @self: a #DeeModel object to clear - * - * Removes all rows in the model. Signals are emitted for each row in the model - */ -void -dee_model_clear (DeeModel *self) -{ - DeeModelIface *iface; - - g_return_if_fail (DEE_IS_MODEL (self)); - - CHECK_SCHEMA (self, return); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->clear) (self); -} - -/** - * dee_model_set: - * @self: a #DeeModel - * @iter: a #DeeModelIter - * @VarArgs: A list of values to set matching the column schemas. - * Any basic variant type is passed as the standard C type while - * any other type must be boxed in a #GVariant. Any floating - * references will be consumed. A %NULL value for a string - * type column will be converted to the empty string. - * - * Sets all values across the entire row referenced by @iter. The - * variable argument list should contain values that match the column schemas - * for the model. All basic variant type (see g_variant_type_is_basic()) are - * passed in as their raw C type while all other types are passed in boxed in - * a #GVariant. Any floating references on variants passed to this method are - * consumed. - * - * For example, to set the values for a row on model with the schema - * ("u", "s", "as"): - * - * GVariantBuilder b; - * - * g_variant_builder_init (&b, "as"); - * g_variant_builder_add (&b, "Hello"); - * g_variant_builder_add (&b, "World"); - * - * dee_model_set (model, iter, 27, "foo", g_variant_builder_end (&b)); - * - **/ -void -dee_model_set (DeeModel *self, - DeeModelIter *iter, - ...) -{ - va_list args; - - g_return_if_fail (DEE_IS_MODEL (self)); - - /* Update data */ - va_start (args, iter); - dee_model_set_valist (self, iter, &args); - va_end (args); -} - -/** - * dee_model_set_valist: (skip): - * @self: a #DeeModel - * @iter: a #DeeModelIter - * @args: See dee_model_set() - * - * See dee_model_set(). This version takes a va_list for language bindings. - */ -void -dee_model_set_valist (DeeModel *self, - DeeModelIter *iter, - va_list *args) -{ - DeeModelIface *iface; - GVariant **row_members; - gsize slice_size; - - g_return_if_fail (DEE_IS_MODEL (self)); - - iface = DEE_MODEL_GET_IFACE (self); - slice_size = dee_model_get_n_columns (self) * sizeof(gpointer); - row_members = g_slice_alloc (slice_size); - dee_model_build_row_valist (self, row_members, args); - - (* iface->set_row) (self, iter, row_members); - g_slice_free1 (slice_size, row_members); -} - -/** - * dee_model_set_value: - * @self: a #DeeModel - * @iter: a #DeeModelIter - * @column: column number to set the value - * @value: New value for cell. If @value is a floating reference the model - * will assume ownership of the variant - * - * Sets the data in @column for the row @iter points to, to @value. The type - * of @value must be convertible to the type of the column. - * - * When this method call completes the model will emit ::row-changed. You can - * edit the model in place without triggering the change signals by calling - * dee_model_set_value_silently(). - */ -void -dee_model_set_value (DeeModel *self, - DeeModelIter *iter, - guint column, - GVariant *value) -{ - DeeModelIface *iface; - - g_return_if_fail (DEE_IS_MODEL (self)); - - CHECK_SCHEMA (self, return); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->set_value) (self, iter, column, value); -} - -/** - * dee_model_set_row: - * @self: a #DeeModel - * @iter: a #DeeModelIter - * @row_members: (array): And array of - * #GVariants with type signature matching - * those from the model schema. If any of the variants have - * floating references these will be consumed - * - * Sets all columns in the row @iter points to, to those found in - * @row_members. The variants in @row_members must match the types defined in - * the model's schema. - */ -void -dee_model_set_row (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members) -{ - DeeModelIface *iface; - - g_return_if_fail (DEE_IS_MODEL (self)); - - CHECK_SCHEMA (self, return); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->set_row) (self, iter, row_members); -} - -/** - * dee_model_get: - * @self: a #DeeModel - * @iter: a #DeeModelIter - * @VarArgs: a list of return locations matching the types defined in the - * column schemas. To ignore the data in a specific column pass - * a %NULL on that position - * - * Gets all the values across the entire row referenced by @iter. The - * variable argument list should contain pointers to variables that match - * the column schemas of this model. - * - * For all basic variant types (see g_variant_type_is_basic()) this method - * expects pointers to their native C types while for all other types it - * expects a pointer to a pointer to a #GVariant. - * - * For string values you are passed a constant reference which is owned by the - * model, but any returned variants must be freed with g_variant_unref (). - * - * For example, to get all values a model with signature ("u", "s", "as") you - * would do: - * - * guint32 u; - * const gchar *s; - * GVariant *v; - * - * dee_model_get (model, iter, &u, &s, &v); - * - * // do stuff - * - * g_variant_unref (v); - * - **/ -void -dee_model_get (DeeModel *self, - DeeModelIter *iter, - ...) -{ - va_list args; - - g_return_if_fail (DEE_IS_MODEL (self)); - g_return_if_fail (iter); - - va_start (args, iter); - dee_model_get_valist (self, iter, args); - va_end (args); -} - -/** - * dee_model_get_valist: (skip): - * @self: a #DeeModel - * @iter: a #DeeModelIter - * @args: a list of column/return location pairs, terminated by -1 - * - * See #dee_model_get(). This version takes a va_list for language bindings. - **/ -void -dee_model_get_valist (DeeModel *self, - DeeModelIter *iter, - va_list args) -{ - GVariant *val; - const GVariantType *val_t; - guint col, n_cols; - gpointer *col_data; - - g_return_if_fail (DEE_IS_MODEL (self)); - g_return_if_fail (iter != NULL); - - n_cols = dee_model_get_n_columns (self); - - for (col = 0; col < n_cols; col++) - { - col_data = va_arg (args, gpointer*); - - /* Skip past here if this column's data was not request */ - if (col_data == NULL) - { - continue; - } - - val = dee_model_get_value (self, iter, col); - val_t = g_variant_get_type (val); - - /* Basic types are passed back unboxed, and non-basic types are passed - * back wrapped in variants. Strings are special because we pass them - * back without copying them */ - if (g_variant_type_is_basic (val_t)) - { - if (g_variant_type_equal (val_t, G_VARIANT_TYPE_SIGNATURE) || - g_variant_type_equal (val_t, G_VARIANT_TYPE_STRING) || - g_variant_type_equal (val_t, G_VARIANT_TYPE_OBJECT_PATH)) - { - /* We need to cast away the constness */ - *col_data = (gpointer) g_variant_get_string (val, NULL); - } - else - g_variant_get (val, dee_model_get_column_schema (self, col), - col_data); - - /* dee_model_get_value() returns a ref we need to free */ - g_variant_unref (val); - } - else - { - /* For complex types the ref on val is transfered to the caller */ - *col_data = val; - } - } -} - -/** - * dee_model_get_row: - * @self: A #DeeModel to get a row from - * @iter: A #DeeModelIter pointing to the row to get - * @out_row_members: (array) (out): An array - * of variants with a length bigger than or equal to - * the number of columns in @self, or %NULL. If you pass - * %NULL here a new array will be allocated for you. The - * returned variants will have a non-floating reference - * - * Returns: @out_row_members if it was not %NULL or a newly allocated array - * otherwise which you must free with g_free(). The variants in the - * array will have a strong reference and needs to be freed with - * g_variant_unref(). - **/ -GVariant** -dee_model_get_row (DeeModel *self, - DeeModelIter *iter, - GVariant **out_row_members) -{ - guint col, n_cols; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - g_return_val_if_fail (iter != NULL, NULL); - - n_cols = dee_model_get_n_columns (self); - - if (out_row_members == NULL) - out_row_members = g_new0 (GVariant*, n_cols + 1); - - for (col = 0; col < n_cols; col++) - out_row_members[col] = dee_model_get_value (self, iter, col); - - return out_row_members; -} - -/** - * dee_model_get_value: - * @self: The #DeeModel to inspect - * @iter: a #DeeModelIter pointing to the row to inspect - * @column: column number to retrieve the value from - * - * Returns: (transfer full): A, guaranteed non-floating, reference to a - * #GVariant containing the row data. Free with g_variant_unref(). - */ -GVariant* -dee_model_get_value (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->get_value) (self, iter, column); -} - -/** - * dee_model_get_bool: - * @self: a #DeeModel - * @iter: a #DeeModelIter - * @column: the column to retrieve a boolean from - * - * Return value: if @iter and @column are valid, the boolean stored at @column. - * Otherwise %FALSE - */ -gboolean -dee_model_get_bool (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), FALSE); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->get_bool) (self, iter, column); -} - -/** - * dee_model_get_uchar: - * @self: a #DeeModel - * @iter: a #DeeModelIter - * @column: the column to retrieve a uchar from - * - * Return value: if @iter and @column are valid, the uchar stored at @column. - * Otherwise 0. - **/ -guchar -dee_model_get_uchar (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), '\0'); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->get_uchar) (self, iter, column); -} - -/** - * dee_model_get_int32: - * @self: a #DeeModel - * @iter: a #DeeModelIter - * @column: the column to retrieve a int from - * - * Return value: if @iter and @column are valid, the int stored at @column. - * Otherwise 0. - **/ -gint32 -dee_model_get_int32 (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), 0); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->get_int32) (self, iter, column); -} - -/** - * dee_model_get_uint32: - * @self: a #DeeModel - * @iter: a #DeeModelIter - * @column: the column to retrieve a uint from - * - * Return value: if @iter and @column are valid, the uint stored at @column. - * Otherwise 0. - **/ -guint32 -dee_model_get_uint32 (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), 0); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->get_uint32) (self, iter, column); -} - - -/** - * dee_model_get_int64: - * @self: a #DeeModel - * @iter: a #DeeModelIter - * @column: the column to retrieve a int64 from - * - * Return value: if @iter and @column are valid, the int64 stored at @column. - * Otherwise 0. - **/ -gint64 -dee_model_get_int64 (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), 0); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->get_int64) (self, iter, column); -} - - -/** - * dee_model_get_uint64: - * @self: a #DeeModel - * @iter: a #DeeModelIter - * @column: the column to retrieve a uint64 from - * - * Return value: if @iter and @column are valid, the uint64 stored at @column. - * Otherwise 0. - **/ -guint64 -dee_model_get_uint64 (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), 0); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->get_uint64) (self, iter, column); -} - -/** - * dee_model_get_double: - * @self: a #DeeModel - * @iter: a #DeeModelIter - * @column: the column to retrieve a double from - * - * Return value: if @iter and @column are valid, the double stored at @column. - * Otherwise 0. - **/ -gdouble -dee_model_get_double (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), 0); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->get_double) (self, iter, column); -} - -/** - * dee_model_get_string: - * @self: a #DeeModel - * @iter: a #DeeModelIter - * @column: the column to retrieve a string from - * - * Return value: if @iter and @column are valid, the string stored at @column. - * Otherwise %NULL. - **/ -const gchar* -dee_model_get_string (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->get_string) (self, iter, column); -} - -/** - * dee_model_get_first_iter: - * @self: a #DeeModel - * - * Retrieves a #DeeModelIter representing the first row in @self. - * - * Return value: (transfer none): A #DeeModelIter (owned by @self, do not - * free it) - */ -DeeModelIter* -dee_model_get_first_iter (DeeModel *self) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->get_first_iter) (self); -} - -/** - * dee_model_get_last_iter: - * @self: a #DeeModel - * - * Retrieves a #DeeModelIter representing the last row in @self. - * - * Return value: (transfer none): A #DeeModelIter (owned by @self, do not - * free it) - **/ -DeeModelIter* -dee_model_get_last_iter (DeeModel *self) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->get_last_iter) (self); -} - -/** - * dee_model_get_iter_at_row: - * @self: a #DeeModel - * @row: position of the row to retrieve - * - * Retrieves a #DeeModelIter representing the row at the given index. - * - * Return value: (transfer none): A new #DeeModelIter, or %NULL if @row - * was out of bounds. The returned iter is owned by @self, so do not free it. - **/ -DeeModelIter* -dee_model_get_iter_at_row (DeeModel *self, guint row) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->get_iter_at_row) (self, row); -} - -/** - * dee_model_next: - * @self: a #DeeModel - * @iter: a #DeeModelIter - * - * Returns a #DeeModelIter that points to the next position in the model. - * - * Return value: (transfer none): A #DeeModelIter, pointing to the next row in - * the model. The iter is owned by @self, do not free it. - **/ -DeeModelIter* -dee_model_next (DeeModel *self, - DeeModelIter *iter) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->next) (self, iter); -} - -/** - * dee_model_prev: - * @self: a #DeeModel - * @iter: a #DeeModelIter - * - * Returns a #DeeModelIter that points to the previous position in the model. - * - * Return value: (transfer none): A #DeeModelIter, pointing to the previous - * row in the model. The iter is owned by @self, do not free it. - **/ -DeeModelIter * -dee_model_prev (DeeModel *self, - DeeModelIter *iter) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->prev) (self, iter); -} - -/** - * dee_model_is_first: - * @self: a #DeeModel - * @iter: a #DeeModelIter - * - * Where @iter is at the start of @self. - * - * Return value: #TRUE if @iter is the first iter in the model - */ -gboolean -dee_model_is_first (DeeModel *self, - DeeModelIter *iter) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), FALSE); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->is_first) (self, iter); -} - -/** - * dee_model_is_last: - * @self: a #DeeModel - * @iter: a #DeeModelIter - * - * Whether @iter is at the end of @self. - * - * Return value: #TRUE if @iter is the last iter in the model - */ -gboolean -dee_model_is_last (DeeModel *self, - DeeModelIter *iter) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), FALSE); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->is_last) (self, iter); -} - -/** - * dee_model_get_position: - * @self: - * @iter: - * - * Returns: The integer offset of @iter in @self - */ -guint -dee_model_get_position (DeeModel *self, - DeeModelIter *iter) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), -1); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->get_position) (self, iter); -} - -/** - * dee_model_register_tag: - * @self: The model to register a tag on - * @tag_destroy: Function called when a tagged row is removed from the model. - * This function will also be called on all tagged rows when the - * model is finalized. - * - * Register a new tag on a #DeeModel. A tag is an extra - * value attached to a given row on a model. The tags are invisible to all - * that doesn't have the tag handle returned by this method. #DeeModel - * implementations must ensure that dee_model_get_tag() is an O(1) operation. - * - * Tags can be very useful in associating some extra data to a row in a model - * and have that automatically synced when the model changes. If you're - * writing a tiled view for a model you might want to tag each row with the - * tile widget for that row. That way you have very convenient access to the - * tile widget given any row in the model. - * - * The private nature of tags and the fact that you can store arbitrary pointers - * and binary data in them also means that they are not serialized if you - * utilize a model implementation that exposes the #DeeSerializable interface. - * - * Return value: (transfer none) (type Dee.ModelTag): A #DeeModelTag handle - * that you can use to set and get tags with - */ -DeeModelTag* -dee_model_register_tag (DeeModel *self, - GDestroyNotify tag_destroy) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->register_tag) (self, tag_destroy); -} - -/** - * dee_model_get_tag: - * @self: The model to get a tag from - * @iter: A #DeeModelIter pointing to the row to get the tag from - * @tag: The tag handle to retrieve the tag value for - * - * Look up a tag value for a given row in a model. This method is guaranteed - * to be O(1). - * - * Return value: (transfer none): Returns %NULL if @tag is unset otherwise the - * value of the tag as it was set with dee_model_set_tag(). - */ -gpointer -dee_model_get_tag (DeeModel *self, - DeeModelIter *iter, - DeeModelTag *tag) -{ - DeeModelIface *iface; - - g_return_val_if_fail (DEE_IS_MODEL (self), NULL); - - iface = DEE_MODEL_GET_IFACE (self); - - return (* iface->get_tag) (self, iter, tag); -} - -/** - * dee_model_set_tag: - * @self: The model to set a tag on - * @iter: The row to set the tag on - * @tag: The tag handle for the tag as obtained from dee_model_register_tag() - * @value: The value to set for @tag. Note that %NULL represents an unset tag - * - * Set a tag on a row in a model. This function is guaranteed to be O(1). - * See also dee_model_register_tag(). - * - * If @tag is already set on this row the existing tag value will be destroyed - * with the #GDestroyNotify passed to the dee_model_register_tag(). - */ -void -dee_model_set_tag (DeeModel *self, - DeeModelIter *iter, - DeeModelTag *tag, - gpointer value) -{ - DeeModelIface *iface; - - g_return_if_fail (DEE_IS_MODEL (self)); - - iface = DEE_MODEL_GET_IFACE (self); - - (* iface->set_tag) (self, iter, tag, value); -} - -/** - * dee_model_clear_tag: - * @self: The model to clear a tag on - * @iter: The row to clear the tag from - * @tag: The tag to clear from @iter - * - * This method is purely syntactic sugar for calling dee_model_set_tag() with - * a @value of %NULL. It's included in order to help developers write more - * readable code. - */ -void -dee_model_clear_tag (DeeModel *self, - DeeModelIter *iter, - DeeModelTag *tag) -{ - DeeModelIface *iface; - - g_return_if_fail (DEE_IS_MODEL (self)); - - iface = DEE_MODEL_GET_IFACE (self); - - (* iface->set_tag) (self, iter, tag, NULL); -} diff -Nru dee-0.5.22/dee/dee-model.h dee-1.0.0/dee/dee-model.h --- dee-0.5.22/dee/dee-model.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-model.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,390 +0,0 @@ -/* - * Copyright (C) 2009 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -#if !defined (_DEE_H_INSIDE) && !defined (DEE_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef _HAVE_DEE_MODEL_H -#define _HAVE_DEE_MODEL_H - -#include -#include -#include - -G_BEGIN_DECLS - -#define DEE_TYPE_MODEL (dee_model_get_type ()) - -#define DEE_MODEL(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), DEE_TYPE_MODEL, DeeModel)) - -#define DEE_IS_MODEL(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DEE_TYPE_MODEL)) - -#define DEE_MODEL_GET_IFACE(obj) \ - (G_TYPE_INSTANCE_GET_INTERFACE(obj, dee_model_get_type (), DeeModelIface)) - -typedef struct _DeeModelIface DeeModelIface; -typedef struct _DeeModel DeeModel; - -/** - * DeeModelIter: - * - * The DeeModelIter structure is private and should only be used with the - * provided #DeeModel API. It is owned by DeeModel and should not be freed. - **/ -typedef struct _DeeModelIter DeeModelIter; - -/** - * DeeModelTag: - * - * The DeeModelTag structure is private and should only be used with the - * provided #DeeModel API. It is owned by DeeModel and should not be freed. - **/ -typedef struct _DeeModelTag DeeModelTag; - -struct _DeeModelIface -{ - GTypeInterface g_iface; - - /* Signals */ - void (*row_added) (DeeModel *self, - DeeModelIter *iter); - - void (*row_removed) (DeeModel *self, - DeeModelIter *iter); - - void (*row_changed) (DeeModel *self, - DeeModelIter *iter); - - /*< public >*/ - void (*set_schema_full) (DeeModel *self, - const char* const *column_schemas, - guint num_columns); - - const gchar* const* (*get_schema) (DeeModel *self, - guint *num_columns); - - const gchar* (*get_column_schema) (DeeModel *self, - guint column); - - guint (*get_n_columns) (DeeModel *self); - - guint (*get_n_rows) (DeeModel *self); - - DeeModelIter* (*append_row) (DeeModel *self, - GVariant **row_members); - - DeeModelIter* (*prepend_row) (DeeModel *self, - GVariant **row_members); - - DeeModelIter* (*insert_row) (DeeModel *self, - guint pos, - GVariant **row_members); - - DeeModelIter* (*insert_row_before) (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members); - - void (*remove) (DeeModel *self, - DeeModelIter *iter); - - void (*clear) (DeeModel *self); - - void (*set_value) (DeeModel *self, - DeeModelIter *iter, - guint column, - GVariant *value); - - void (*set_row) (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members); - - GVariant* (*get_value) (DeeModel *self, - DeeModelIter *iter, - guint column); - - DeeModelIter* (*get_first_iter) (DeeModel *self); - - DeeModelIter* (*get_last_iter) (DeeModel *self); - - DeeModelIter* (*get_iter_at_row) (DeeModel *self, - guint row); - - gboolean (*get_bool) (DeeModel *self, - DeeModelIter *iter, - guint column); - - guchar (*get_uchar) (DeeModel *self, - DeeModelIter *iter, - guint column); - - gint32 (*get_int32) (DeeModel *self, - DeeModelIter *iter, - guint column); - - guint32 (*get_uint32) (DeeModel *self, - DeeModelIter *iter, - guint column); - - gint64 (*get_int64) (DeeModel *self, - DeeModelIter *iter, - guint column); - - guint64 (*get_uint64) (DeeModel *self, - DeeModelIter *iter, - guint column); - - gdouble (*get_double) (DeeModel *self, - DeeModelIter *iter, - guint column); - - const gchar* (*get_string) (DeeModel *self, - DeeModelIter *iter, - guint column); - - DeeModelIter* (*next) (DeeModel *self, - DeeModelIter *iter); - - DeeModelIter* (*prev) (DeeModel *self, - DeeModelIter *iter); - - gboolean (*is_first) (DeeModel *self, - DeeModelIter *iter); - - gboolean (*is_last) (DeeModel *self, - DeeModelIter *iter); - - guint (*get_position) (DeeModel *self, - DeeModelIter *iter); - - DeeModelTag* (*register_tag) (DeeModel *self, - GDestroyNotify tag_destroy); - - gpointer (*get_tag) (DeeModel *self, - DeeModelIter *iter, - DeeModelTag *tag); - - void (*set_tag) (DeeModel *self, - DeeModelIter *iter, - DeeModelTag *tag, - gpointer value); - - /*< private >*/ - void (*_dee_model_1) (void); - void (*_dee_model_2) (void); - void (*_dee_model_3) (void); - void (*_dee_model_4) (void); - void (*_dee_model_5) (void); - void (*_dee_model_6) (void); - void (*_dee_model_7) (void); - void (*_dee_model_8) (void); -}; - -/** - * dee_model_get_type: - * - * The GType of #DeeModel - * - * Return value: the #GType of #DeeModel - **/ -GType dee_model_get_type (void) G_GNUC_CONST; - -void dee_model_set_schema (DeeModel *self, - ...) G_GNUC_NULL_TERMINATED; - -void dee_model_set_schema_valist (DeeModel *self, - va_list *args); - -void dee_model_set_schema_full (DeeModel *self, - const gchar* const *column_schemas, - guint num_columns); - -const gchar* const* dee_model_get_schema (DeeModel *self, - guint *num_columns); - -const gchar* dee_model_get_column_schema (DeeModel *self, - guint column); - -guint dee_model_get_n_columns (DeeModel *self); - -guint dee_model_get_n_rows (DeeModel *self); - -DeeModelIter* dee_model_append (DeeModel *self, - ...); - -DeeModelIter* dee_model_append_valist (DeeModel *self, - va_list *args); - -DeeModelIter* dee_model_append_row (DeeModel *self, - GVariant **row_members); - -DeeModelIter* dee_model_prepend (DeeModel *self, - ...); - -DeeModelIter* dee_model_prepend_valist (DeeModel *self, - va_list *args); - -DeeModelIter* dee_model_prepend_row (DeeModel *self, - GVariant **row_members); - -DeeModelIter* dee_model_insert (DeeModel *self, - guint pos, - ...); - -DeeModelIter* dee_model_insert_valist (DeeModel *self, - guint pos, - va_list *args); - -DeeModelIter* dee_model_insert_row (DeeModel *self, - guint pos, - GVariant **row_members); - -DeeModelIter* dee_model_insert_before (DeeModel *self, - DeeModelIter *iter, - ...); - -DeeModelIter* dee_model_insert_before_valist (DeeModel *self, - DeeModelIter *iter, - va_list *args); - -DeeModelIter* dee_model_insert_row_before (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members); - -void dee_model_remove (DeeModel *self, - DeeModelIter *iter); - -void dee_model_clear (DeeModel *self); - -void dee_model_set (DeeModel *self, - DeeModelIter *iter, - ...); - -void dee_model_set_valist (DeeModel *self, - DeeModelIter *iter, - va_list *args); - -void dee_model_set_value (DeeModel *self, - DeeModelIter *iter, - guint column, - GVariant *value); - -void dee_model_set_row (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members); - -void dee_model_get (DeeModel *self, - DeeModelIter *iter, - ...); - -void dee_model_get_valist (DeeModel *self, - DeeModelIter *iter, - va_list args); - -GVariant** dee_model_get_row (DeeModel *self, - DeeModelIter *iter, - GVariant **out_row_members); - -GVariant* dee_model_get_value (DeeModel *self, - DeeModelIter *iter, - guint column); - -DeeModelIter* dee_model_get_first_iter (DeeModel *self); - -DeeModelIter* dee_model_get_last_iter (DeeModel *self); - -DeeModelIter* dee_model_get_iter_at_row (DeeModel *self, - guint row); - -gboolean dee_model_get_bool (DeeModel *self, - DeeModelIter *iter, - guint column); - -guchar dee_model_get_uchar (DeeModel *self, - DeeModelIter *iter, - guint column); - -gint32 dee_model_get_int32 (DeeModel *self, - DeeModelIter *iter, - guint column); - -guint32 dee_model_get_uint32 (DeeModel *self, - DeeModelIter *iter, - guint column); - -gint64 dee_model_get_int64 (DeeModel *self, - DeeModelIter *iter, - guint column); - -guint64 dee_model_get_uint64 (DeeModel *self, - DeeModelIter *iter, - guint column); - -gdouble dee_model_get_double (DeeModel *self, - DeeModelIter *iter, - guint column); - -const gchar * dee_model_get_string (DeeModel *self, - DeeModelIter *iter, - guint column); - -DeeModelIter * dee_model_next (DeeModel *self, - DeeModelIter *iter); - -DeeModelIter * dee_model_prev (DeeModel *self, - DeeModelIter *iter); - -gboolean dee_model_is_first (DeeModel *self, - DeeModelIter *iter); - -gboolean dee_model_is_last (DeeModel *self, - DeeModelIter *iter); - -guint dee_model_get_position (DeeModel *self, - DeeModelIter *iter); - -DeeModelTag* dee_model_register_tag (DeeModel *self, - GDestroyNotify tag_destroy); - -gpointer dee_model_get_tag (DeeModel *self, - DeeModelIter *iter, - DeeModelTag *tag); - -void dee_model_set_tag (DeeModel *self, - DeeModelIter *iter, - DeeModelTag *tag, - gpointer value); - -void dee_model_clear_tag (DeeModel *self, - DeeModelIter *iter, - DeeModelTag *tag); - -GVariant** dee_model_build_row (DeeModel *self, - GVariant **out_row_members, - ...); - -GVariant** dee_model_build_row_valist (DeeModel *self, - GVariant **out_row_members, - va_list *args); - -G_END_DECLS - -#endif /* _HAVE_DEE_MODEL_H */ diff -Nru dee-0.5.22/dee/dee-peer.c dee-1.0.0/dee/dee-peer.c --- dee-0.5.22/dee/dee-peer.c 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-peer.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1450 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authors: - * Neil Jagdish Patel - * Mikkel Kamstrup Erlandsen - * - */ -/** - * SECTION:dee-peer - * @short_description: Finds other objects with the same swarm-name on the bus. - * @include: dee.h - * - * #DeePeer allows you to build objects that can rendevouz on DBus - * without the need for an central registration service. Think of it like - * peer-to-peer for your application. The DBus session bus will also implicitly - * elect a swarm leader - namely the one owning the swarm name on the bus, but - * it's up to the consumer of this API to determine whether swarm leadership has - * any concrete responsibilities associated. - * - * Peers find eachother through a well-known "swarm-name", which is a - * well known DBus name, such as: org.myapp.MyPeers. Choose a namespaced - * name that would not normally be used outside of your program. - * - * For example: - * - * { - * DeePeer *peer; - * - * peer = g_object_new (DBUS_TYPE_PEER, - * "swarm-name", "org.myapp.MyPeers", - * NULL); - * - * g_signal_connect (peer, "peer-found", - * G_CALLBACK (on_peer_found), NULL); - * g_signal_connect (peer, "peer-lost", - * G_CALLBACK (on_peer_lost), NULL); - * } - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "dee-peer.h" -#include "dee-marshal.h" -#include "trace-log.h" - -G_DEFINE_TYPE (DeePeer, dee_peer, G_TYPE_OBJECT) - -#define DEE_PEER_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PEER, DeePeerPrivate)) - -#define _DeePeerIter GSequenceIter - -/** - * DeePeerPrivate: - * - * Ignore this structure. - **/ -struct _DeePeerPrivate -{ - GDBusConnection *connection; - - /* Used as a hash set with the unique addresses of the peers. - * This hash table must be protected from concurrent access, - * since it's used in the GDBus message dispatch thread */ - GHashTable *peers; - - /* A List with the string-formatted match rules we've installed */ - GSList *match_rules; - - /* The GDBus filter id, so we can uninstall our message filter again */ - guint filter_id; - - /* GDBus id for the DBus signal subscriptions */ - guint dbus_signals_id; - - /* The GDBus name owner id for g_bus_own_name() */ - guint name_owner_id; - - /* The GDBus name watcher id from g_bus_watch_name() */ - guint name_watcher_id; - - const gchar *own_name; - gchar *swarm_name; - gchar *swarm_path; - gchar *swarm_leader; - - gboolean connected; - gboolean is_swarm_leader; - gboolean has_been_leader; - gboolean is_first_name_check; - - /* if priv->head_count != NULL it indicates that we are in - * "head counting mode" in which case priv->head_count_source will be a - * GSource id for a timeout that completes the head count */ - GSList *head_count; - guint head_count_source; - - /* Protecting the priv->peers table from concurrent access in - * the GDBus message dispatch thread */ - GMutex *lock; -}; - -/* Globals */ -enum -{ - PROP_0, - PROP_SWARM_NAME, - PROP_SWARM_LEADER -}; - -enum -{ - CONNECTED, - PEER_FOUND, - PEER_LOST, - - LAST_SIGNAL -}; - -static guint32 _peer_signals[LAST_SIGNAL] = { 0 }; - -/* Forwards */ -static void remove_match_rule (GDBusConnection *conn, - const gchar *rule); - -static void emit_peer_found (DeePeer *self, - const gchar *name); - -static void on_bus_acquired (GDBusConnection *connection, - const gchar *name, - gpointer user_data); - -static void on_leadership_lost (GDBusConnection *connection, - const gchar *name, - gpointer user_data); - -static void on_leadership_acquired (GDBusConnection *connection, - const gchar *name, - gpointer user_data); - -static void on_leadership_changed (GDBusConnection *connection, - const gchar *name, - const gchar *name_owner, - gpointer user_data); - -static void on_join_received (DeePeer *self, - const gchar *peer_address); - -static void on_bye_received (DeePeer *self, - const gchar *peer_address); - -static void on_ping_received (DeePeer *self, - const gchar *leader_address); - -static void on_pong_received (DeePeer *self, - const gchar *peer_address); - -static void on_list_received (GObject *source_object, - GAsyncResult *res, - gpointer user_data); - -static void set_swarm_name (DeePeer *self, - const gchar *swarm_name); - -static void emit_ping (DeePeer *self); - -static void emit_pong (DeePeer *self); - -static void on_dbus_peer_signal (GDBusConnection *connection, - const gchar *sender_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *signal_name, - GVariant *parameters, - gpointer user_data); - -static GDBusMessage* gdbus_message_filter (GDBusConnection *connection, - GDBusMessage *message, - gboolean incoming, - gpointer user_data); - -/* GObject methods */ -static void -dee_peer_finalize (GObject *object) -{ - DeePeerPrivate *priv; - GSList *match_iter; - - priv = DEE_PEER (object)->priv; - - /* Remove match rules from the bus, and free the string repr. of the rule */ - if (priv->connection) - { - /* Uninstall filter. - * Implementation note: We must remove the filter and signal listener - * _before_ dropping the swarm name because gdbus currently does a - * sync dbus call to release the name which makes us race against - * getting a NameOwnerChanged */ - g_dbus_connection_remove_filter (priv->connection, priv->filter_id); - - for (match_iter = priv->match_rules; - match_iter != NULL; - match_iter = match_iter->next) - { - remove_match_rule (priv->connection, match_iter->data); - g_free (match_iter->data); - } - - /* Stop listening for signals */ - if (priv->dbus_signals_id != 0) - { - g_dbus_connection_signal_unsubscribe (priv->connection, - priv->dbus_signals_id); - priv->dbus_signals_id = 0; - } - - g_object_unref (priv->connection); - priv->connection = NULL; - } - - /* Stop trying to own the swarm name. - * See implementation note above */ - if (priv->name_owner_id != 0) - { - g_bus_unown_name (priv->name_owner_id); - priv->name_owner_id = 0; - } - - /* Stop listening for swarm leadership changes */ - if (priv->name_watcher_id != 0) - { - g_bus_unwatch_name (priv->name_watcher_id); - priv->name_watcher_id = 0; - } - - /* Free resources */ - if (priv->swarm_name) - { - g_free (priv->swarm_name); - priv->swarm_name = NULL; - } - if (priv->swarm_path) - { - g_free (priv->swarm_path); - priv->swarm_path = NULL; - } - if (priv->swarm_leader) - { - g_free (priv->swarm_leader); - priv->swarm_leader = NULL; - } - if (priv->peers) - { - g_hash_table_destroy (priv->peers); - priv->peers = NULL; - } - if (priv->match_rules) - { - g_slist_free (priv->match_rules); - priv->match_rules = NULL; - } - if (priv->lock != NULL) - { - g_mutex_free (priv->lock); - priv->lock = NULL; - } - if (priv->head_count != NULL) - { - g_slist_foreach(priv->head_count, (GFunc) g_free, NULL); - g_slist_free (priv->head_count); - priv->head_count = NULL; - } - if (priv->head_count_source != 0) - { - g_source_remove (priv->head_count_source); - priv->head_count_source = 0; - } - - G_OBJECT_CLASS (dee_peer_parent_class)->finalize (object); -} - -static void -dee_peer_constructed (GObject *self) -{ - DeePeerPrivate *priv; - gpointer *weak_self; - - priv = DEE_PEER (self)->priv; - - if (priv->swarm_name == NULL) - { - g_critical ("DeePeer created without a swarm name. You must specify " - "a non-NULL swarm name"); - return; - } - - /* We need to use a weak pointer on self because g_bus_own_name() can - * not be cancelled and we might end up finalizing @self before obtaining - * a connection to the bus. And, no, adding a temporary ref on self is not - * a good idea since we still can't know if we've been cancelled and we'd - * just make the peer live on; happily ever after. - * With a weak ref we can check if self == NULL and take that as a - * cancellation. - */ - weak_self = g_new0 (gpointer, 1); - *weak_self = self; - g_object_add_weak_pointer (self, weak_self); - - /* Contend to be swarm leaders. Pick me! Pick me! */ - priv->name_owner_id = g_bus_own_name (G_BUS_TYPE_SESSION, - priv->swarm_name, /* name to own */ - G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT, - on_bus_acquired, - on_leadership_acquired, - on_leadership_lost, - weak_self, /* user data */ - NULL); /* free func */ - - /* Listen for changes in leadership */ - priv->name_watcher_id = g_bus_watch_name(G_BUS_TYPE_SESSION, - priv->swarm_name, - G_BUS_NAME_WATCHER_FLAGS_NONE, - on_leadership_changed, - NULL, /* name vanished cb */ - self, /* user data */ - NULL); /* user data free func */ -} - - -static void -dee_peer_set_property (GObject *object, - guint id, - const GValue *value, - GParamSpec *pspec) -{ - DeePeerPrivate *priv = DEE_PEER (object)->priv; - - - switch (id) - { - case PROP_SWARM_NAME: - set_swarm_name (DEE_PEER (object), g_value_get_string (value)); - break; - case PROP_SWARM_LEADER: - g_free (priv->swarm_leader); - priv->swarm_leader = g_value_dup_string (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, id, pspec); - break; - } -} - -static void -dee_peer_get_property (GObject *object, - guint id, - GValue *value, - GParamSpec *pspec) -{ - switch (id) - { - case PROP_SWARM_NAME: - g_value_set_string (value, DEE_PEER (object)->priv->swarm_name); - break; - case PROP_SWARM_LEADER: - g_value_set_string (value, DEE_PEER (object)->priv->swarm_leader); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, id, pspec); - break; - } -} - -static void -dee_peer_class_init (DeePeerClass *klass) -{ - GObjectClass *obj_class = G_OBJECT_CLASS (klass); - GParamSpec *pspec; - - obj_class->finalize = dee_peer_finalize; - obj_class->set_property = dee_peer_set_property; - obj_class->get_property = dee_peer_get_property; - obj_class->constructed = dee_peer_constructed; - - - /* Add Signals */ - - /** - * DeePeer::peer-found: - * @self: the #DeePeer on which the signal is emitted - * @name: the DBus name of the object found - * - * Connect to this signal to be notified of existing and new peers that are - * in your swarm. - **/ - _peer_signals[PEER_FOUND] = - g_signal_new ("peer-found", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (DeePeerClass, peer_found), - NULL, NULL, - g_cclosure_marshal_VOID__STRING, - G_TYPE_NONE, 1, - G_TYPE_STRING); - - /** - * DeePeer::peer-lost: - * @self: the #DeePeer on which the signal is emitted - * @name: the DBus name of the object that disconnected - * - * Connect to this signal to be notified when peers disconnect from the swarm - **/ - _peer_signals[PEER_LOST] = - g_signal_new ("peer-lost", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (DeePeerClass, peer_lost), - NULL, NULL, - g_cclosure_marshal_VOID__STRING, - G_TYPE_NONE, 1, - G_TYPE_STRING); - - /* Add properties */ - /** - * DeePeer::swarm-name: - * - * The name of the swarm that this peer is connected to. All swarm members - * will try and own this name on the session bus. The one owning the name - * is the swarm leader. - */ - pspec = g_param_spec_string ("swarm-name", "Swarm Name", - "Well-known name to find other peers with", - NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT - | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (obj_class, PROP_SWARM_NAME, pspec); - - /** - * DeePeer::swarm-leader: - * - * The name of the swarm that this peer is connected to. All swarm members - * will try and own this name on the session bus. The one owning the name - * is the swarm leader. - **/ - pspec = g_param_spec_string ("swarm-leader", "Swarm Leader", - "Unique DBus address of the swarm leader", - NULL, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (obj_class, PROP_SWARM_LEADER, pspec); - - /* Add private data */ - g_type_class_add_private (obj_class, sizeof (DeePeerPrivate)); -} - -static void -dee_peer_init (DeePeer *peer) -{ - DeePeerPrivate *priv; - - priv = peer->priv = DEE_PEER_GET_PRIVATE (peer); - - priv->swarm_name = NULL; - priv->swarm_leader = NULL; - priv->own_name = NULL; - priv->match_rules = NULL; - priv->peers = g_hash_table_new_full (g_str_hash, - g_str_equal, - (GDestroyNotify) g_free, - NULL); - - priv->connected = FALSE; - priv->is_swarm_leader = FALSE; - priv->has_been_leader = FALSE; - priv->is_first_name_check = TRUE; - - priv->lock = g_mutex_new (); - - priv->head_count_source = 0; -} - -/* Private Methods */ - - -/* Async callback for com.canonical.Dee.Peer.List */ -static void -on_list_received (GObject *source_object, - GAsyncResult *res, - gpointer user_data) -{ - DeePeer *self = DEE_PEER (user_data); - DeePeerPrivate *priv; - GHashTable *peers; - GSList *new_peers, *iter; - guint i; - GVariant *val, *_val; - const gchar **names; - gsize n_names; - GError *error; - GHashTableIter hiter; - gpointer hkey, hval; - - g_return_if_fail (DEE_IS_PEER (self)); - priv = self->priv; - - error = NULL; - _val = g_dbus_connection_call_finish (priv->connection, res, &error); - if (error != NULL) - { - g_warning ("%s: Unable to list peers: %s", G_STRLOC, error->message); - g_error_free (error); - return; - } - - /* Unpack the wrapping struct from the reply */ - val = g_variant_get_child_value (_val, 0); - g_variant_unref (_val); - - names = g_variant_get_strv (val, &n_names); - trace_object (self, "Got list of %d peers", n_names); - - /* We diff the current list of peers against the new list - * and emit signals accordingly. New peers are added to new_peers, - * and lost peers will remain in priv->peers: */ - new_peers = NULL; - peers = g_hash_table_new_full (g_str_hash, - g_str_equal, - (GDestroyNotify)g_free, - NULL); - for (i = 0; i < n_names; i++) - { - g_hash_table_insert (peers, g_strdup (names[i]), NULL); - if (!g_hash_table_remove (priv->peers, names[i])) - { - /* The peer was not previously known */ - new_peers = g_slist_prepend (new_peers, (gchar *) names[i]); - } - } - - /* Signal about lost peers */ - g_hash_table_iter_init (&hiter, priv->peers); - while (g_hash_table_iter_next (&hiter, &hkey, &hval)) - { - g_signal_emit (self, _peer_signals[PEER_LOST], 0, hkey); - } - - /* Signal about new peers */ - for (iter = new_peers; iter; iter = iter->next) - { - emit_peer_found (self, (const gchar*)iter->data); - } - - /* The return value of g_variant_get_strv() is a shallow copy */ - g_free (names); - g_variant_unref (val); - - /* Free just the array, not the strings - they are owned by 'peers' now */ - g_slist_free (new_peers); - g_hash_table_destroy (priv->peers); - priv->peers = peers; -} - -/* Install a DBus match rule, async, described by a printf-like format string. - * The match rule will be properly retracted when @self is finalized */ -static void -install_match_rule (DeePeer *self, const char *rule, ...) -{ - DeePeerPrivate *priv; - gchar *f_rule; - va_list args; - - g_return_if_fail (DEE_IS_PEER (self)); - g_return_if_fail (rule != NULL); - - priv = self->priv; - - va_start (args, rule); - f_rule = g_strdup_vprintf (rule, args); - va_end (args); - - /* By setting the error argument to NULL libdbus will use async mode - * for adding the match rule. We want that. */ - g_dbus_connection_call (priv->connection, - "org.freedesktop.DBus", - "/org/freedesktop/dbus", - "org.freedesktop.DBus", - "AddMatch", - g_variant_new ("(s)", f_rule), - NULL, /* reply type */ - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, /* cancellable */ - NULL, /* callback */ - NULL); /* user_data */ - - priv->match_rules = g_slist_prepend (priv->match_rules, f_rule); -} - -static void -remove_match_rule (GDBusConnection *conn, const gchar *rule) -{ - g_dbus_connection_call (conn, - "org.freedesktop.DBus", - "/org/freedesktop/dbus", - "org.freedesktop.DBus", - "RemoveMatch", - g_variant_new ("(s)", rule), - NULL, /* reply type */ - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, /* cancellable */ - NULL, /* callback */ - NULL); /* user_data */ -} - -/* Public Methods */ - -/** - * dee_peer_new - * @swarm_name: The name of the swarm to join. - * Fx "org.example.DataProviders" - * - * Create a new #DeePeer. The peer will immediately connect to the swarm - * and start the peer discovery. - * - * Return value: (transfer full): A newly constructed #DeePeer. - * Free with g_object_unref(). - */ -DeePeer* -dee_peer_new (const gchar* swarm_name) -{ - g_return_val_if_fail (swarm_name != NULL, NULL); - - return g_object_new (DEE_TYPE_PEER, "swarm-name", swarm_name, NULL); -} - -/** - * dee_peer_is_swarm_leader - * @self: a #DeePeer - * - * Return value: %TRUE if and only if this peer owns the swarm name on - * the session bus - */ -const gboolean -dee_peer_is_swarm_leader (DeePeer *self) -{ - g_return_val_if_fail (DEE_PEER (self), FALSE); - - return self->priv->is_swarm_leader; -} - -/** - * dee_peer_get_swarm_leader - * @self: a #DeePeer - * - * Gets the unique DBus address of the current swarm leader. - * - * This function can only be used after dee_peer_connect() has been called. - * - * Return value: Unique DBus address of the current swarm leader, possibly %NULL - * if the leader has not been detected yet - */ -const gchar* -dee_peer_get_swarm_leader (DeePeer *self) -{ - g_return_val_if_fail (DEE_PEER (self), NULL); - - return self->priv->swarm_leader; -} - -/** - * dee_peer_get_swarm_name: - * @self: a #DeePeer - * - * Gets the unique name for this swarm. The swarm leader is the Peer owning - * this name on the session bus. - * - * Return value: The swarm name - **/ -const gchar* -dee_peer_get_swarm_name (DeePeer *self) -{ - g_return_val_if_fail (DEE_PEER (self), NULL); - - return self->priv->swarm_name; -} - -static void -emit_peer_found (DeePeer *self, - const gchar *name) -{ - DeePeerPrivate *priv; - - g_return_if_fail (DEE_IS_PEER(self)); - g_return_if_fail (name != NULL); - - priv = self->priv; - - if (!g_str_equal (name, priv->own_name)) - { - g_signal_emit (self, _peer_signals[PEER_FOUND], 0, name); - } -} - -static void -set_swarm_name (DeePeer *self, - const gchar *swarm_name) -{ - DeePeerPrivate *priv; - gchar *dummy; - - g_return_if_fail (DEE_IS_PEER (self)); - g_return_if_fail (swarm_name != NULL); - priv = self->priv; - - if (priv->swarm_name) - { - g_warning ("%s: Unable to set previously set swarm_name (%s) to (%s)", - G_STRLOC, - priv->swarm_name, - swarm_name); - return; - } - - /* If swarm_name is org.example.MyService then the swarm_path will - * become /com/canonical/dee/org/example/MyService. Note that - * the actual object path of the peer is not used in the Swarm spec */ - - priv->swarm_name = g_strdup (swarm_name); - dummy = g_strdelimit (g_strdup(swarm_name), ".", '/'); - priv->swarm_path = g_strdup_printf ("/com/canonical/dee/peer/%s", dummy); - - g_free (dummy); -} - -/* Called when we get the bus connection the first time. - * Note that user_data is a weak pointer to self */ -static void -on_bus_acquired (GDBusConnection *connection, - const gchar *name, - gpointer user_data) -{ - DeePeer *self; - DeePeerPrivate *priv; - gpointer *weak_self; - - g_return_if_fail (user_data != NULL); - - weak_self = user_data; - if (*weak_self == NULL) - { - trace ("DeePeer finalized before getting a connection to the bus"); - return; - } - - g_return_if_fail (DEE_IS_PEER (*weak_self)); - - self = DEE_PEER (*weak_self); - priv = self->priv; - priv->connection = g_object_ref (connection); - priv->own_name = g_strdup (g_dbus_connection_get_unique_name (connection)); - - priv->filter_id = g_dbus_connection_add_filter (priv->connection, - gdbus_message_filter, - self, /* self */ - NULL); - - /* Detect when someone joins the swarm */ - install_match_rule (self, - "interface='org.freedesktop.DBus'," - "member='RequestName'," - "arg0='%s'", - priv->swarm_name); - - /* Listen for all signals on the Dee interface concerning this swarm */ - priv->dbus_signals_id = - g_dbus_connection_signal_subscribe(priv->connection, - NULL, /* sender */ - DEE_PEER_DBUS_IFACE, /* iface */ - NULL, /* member */ - NULL, /* object path */ - priv->swarm_name, /* arg0 */ - G_DBUS_SIGNAL_FLAGS_NONE, - on_dbus_peer_signal, /* callback */ - self, /* user_data */ - NULL); /* user data free */ -} - -static void -assume_leadership (DeePeer *self) -{ - DeePeerPrivate *priv; - - g_return_if_fail (DEE_IS_PEER (self)); - - priv = self->priv; - if (priv->is_swarm_leader) - { - trace_object (self, "Leadership acquired, but we are already leaders"); - } - else - { - trace_object (self, "Got swarm leadership"); - - /* The first time we become leaders we install a broad match rule - * that triggers any time someone drops off the bus. - * Please note that we don't bother cleaning up that rule in the - * rare case we loose leadership (which only happens if someone - * forcefully grabs the swarm name) */ - if (!priv->has_been_leader) - { - install_match_rule (self, "interface='org.freedesktop.DBus'," - "member='NameOwnerChanged'," - "arg2=''"); - } - - priv->is_swarm_leader = TRUE; - priv->has_been_leader = TRUE; - - g_free (priv->swarm_leader); - priv->swarm_leader = g_strdup (priv->own_name); - - /* Emit a Ping so we can do a head count */ - emit_ping (self); - - /* Signal emission must be a "tail call" - * because we can in theory be finalized by - * one of the callbacks */ - g_object_notify (G_OBJECT (self), "swarm-leader"); - } - -} - -/* GDBus callback from the name owner installed with g_bus_own_name(). - * Called when losing leadership. - * Note that user_data is a weak pointer to self */ -static void -on_leadership_lost (GDBusConnection *connection, - const gchar *name, - gpointer user_data) -{ - DeePeer *self; - DeePeerPrivate *priv; - gpointer *weak_self; - - g_return_if_fail (user_data != NULL); - - weak_self = user_data; - if (*weak_self == NULL) - { - /* We where finalized before getting the name */ - return; - } - - g_return_if_fail (DEE_IS_PEER (*weak_self)); - - self = DEE_PEER (*weak_self); - priv = self->priv; - - if (priv->is_swarm_leader) - { - /* We signal the change of swarm leadership in on_ping_received(), - * only at that point do we know the unique name of the new leader */ - trace_object (self, "Lost swarm leadership"); - // FIXME. We ought to remove the Pong match rule, but it's not paramount - priv->is_swarm_leader = FALSE; - } - else - { - trace_object (self, "Did not become leader"); - } - - /* If this is the first time we are notified that we are not the leader - * then request a roster from the leader */ - if (priv->is_first_name_check) - { - trace_object (self, "Requesting peer roster from leader"); - g_dbus_connection_call (priv->connection, - priv->swarm_name, - priv->swarm_path, - DEE_PEER_DBUS_IFACE, - "List", - g_variant_new ("()"), - NULL, /* reply type */ - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, /* cancellable */ - on_list_received, /* callback */ - self); /* user_data */ - priv->is_first_name_check = FALSE; - } -} - -/* GDBus callback from the name owner installed with g_bus_own_name(). - * Called when we become leaders. - * Note that user_data is a weak pointer to self */ -static void -on_leadership_acquired (GDBusConnection *connection, - const gchar *name, - gpointer user_data) -{ - gpointer *weak_self; - - g_return_if_fail (user_data != NULL); - - weak_self = user_data; - if (*weak_self == NULL) - { - /* We where finalized before connecting to the bus */ - return; - } - - g_return_if_fail (DEE_IS_PEER (*weak_self)); - - assume_leadership (DEE_PEER (*weak_self)); -} - -/* Callback from the GDBus name watcher installed with g_bus_watch_name() */ -static void -on_leadership_changed (GDBusConnection *connection, - const gchar *name, - const gchar *name_owner, - gpointer user_data) -{ - DeePeer *self; - DeePeerPrivate *priv; - - g_return_if_fail (DEE_IS_PEER (user_data)); - - self = DEE_PEER (user_data); - priv = self->priv; - - /* Don't bother if we already know this leader */ - if (g_strcmp0 (priv->swarm_leader, name_owner) == 0) - return; - - /* At this point we assume we have a new leader */ - if (g_strcmp0 (priv->own_name, name_owner) == 0) - assume_leadership (self); - else - { - g_free (priv->swarm_leader); - priv->swarm_leader = g_strdup (name_owner); - priv->is_swarm_leader = FALSE; - g_object_notify (G_OBJECT (self), "swarm-leader"); - } -} - -/* Callback from gdbus_message_filter() for custom match rules - * Indicates that @peer_address joined the swarm. - * This method is thread safe */ -static void -on_join_received (DeePeer *self, - const gchar *peer_address) -{ - DeePeerPrivate *priv; - - g_return_if_fail (DEE_IS_PEER (self)); - g_return_if_fail (peer_address != NULL); - - trace_object (self, "Found peer %s", peer_address); - priv = self->priv; - - /* If the peer is already known it must have tried to acquire the swarm name - * twice... Just ignore it */ - g_mutex_lock (priv->lock); - if (g_hash_table_lookup_extended (priv->peers, peer_address, NULL, NULL)) - { - g_mutex_unlock (priv->lock); - return; - } - - g_hash_table_insert (priv->peers, g_strdup (peer_address), NULL); - g_mutex_unlock (priv->lock); - - emit_peer_found (self, peer_address); -} - -/* Callback from _gdbus_message_filter() for custom match rules - * Indicates that @peer_address left the swarm */ -static void -on_bye_received (DeePeer *self, - const gchar *peer_address) -{ - DeePeerPrivate *priv; - gboolean removed; - - g_return_if_fail (DEE_IS_PEER (self)); - g_return_if_fail (peer_address != NULL); - - trace_object (self, "Bye %s", peer_address); - priv = self->priv; - - g_mutex_lock (priv->lock); - removed = g_hash_table_remove (self->priv->peers, peer_address); - g_mutex_unlock (priv->lock); - - if (removed) - { - trace_object (self, "Leader said Bye to %s", peer_address); - g_signal_emit (self, _peer_signals[PEER_LOST], 0, peer_address); - } - else - { - trace_object (self, "Unknown peer '%s' dropped out of the swarm", - peer_address); - } - -} - -/* Broadcast a Bye signal to to notify the swarm that someone left. - * Only call this method as swarm leader - that's the contract - * of the Swarm spec. - * This method is thread safe */ -static void -emit_bye (DeePeer *self, - const gchar *peer_address) -{ - DeePeerPrivate *priv; - - g_return_if_fail (DEE_IS_PEER (self)); - g_return_if_fail (self->priv->is_swarm_leader); - g_return_if_fail (self->priv->connection != NULL); - g_return_if_fail (peer_address != NULL); - - trace_object (self, "Emit Bye(%s)", peer_address); - - g_signal_emit (self, _peer_signals[PEER_LOST], 0, peer_address); - - priv = self->priv; - g_dbus_connection_emit_signal (priv->connection, - NULL, /* destination */ - priv->swarm_path, /* object path */ - DEE_PEER_DBUS_IFACE, /* interface */ - "Bye", /* signal name */ - g_variant_new ("(ss)", - priv->swarm_name, peer_address), - NULL); /* error */ -} - -/* Timeout started when we receive a Ping. When this timeout triggers - * we do a diff of priv->head_count and priv->peers and emit peer-lost - * as appropriate. We don't need to emit peer-found because that is already - * done in when receiving the Pongs from the peers */ -static gboolean -on_head_count_complete (DeePeer *self) -{ - DeePeerPrivate *priv; - GHashTable *new_peers; - gpointer hkey, hval; - GHashTableIter hiter; - GSList *iter; - - g_return_val_if_fail (DEE_IS_PEER (self), FALSE); - - priv = self->priv; - - /* First we build a new_peers hash set with the names of the - * head counted peers. Then we diff the old and the new peers - * sets and emit peer-lost appropriately */ - new_peers = g_hash_table_new_full (g_str_hash, - g_str_equal, - (GDestroyNotify) g_free, - NULL); - - /* Build new_peers hash set */ - iter = priv->head_count; - for (iter = priv->head_count; iter; iter = iter->next) - { - g_hash_table_insert (new_peers, g_strdup (iter->data), NULL); - } - - /* Emit peer-lost and Bye on peers that didn't emit Pong in due time */ - g_hash_table_iter_init (&hiter, priv->peers); - while (g_hash_table_iter_next (&hiter, &hkey, &hval)) - { - if (!g_hash_table_lookup_extended (new_peers, hkey, NULL, NULL)) - { - if (priv->is_swarm_leader) - emit_bye (self, hkey); - else - g_signal_emit (self, _peer_signals[PEER_LOST], 0, hkey); - - } - } - - /* Swap old and new peers hash sets */ - g_hash_table_destroy (priv->peers); - priv->peers = new_peers; - - /* Unregister the head count timeout source. And reset head counting mode */ - priv->head_count_source = 0; - g_slist_foreach (priv->head_count, (GFunc) g_free, NULL); - g_slist_free (priv->head_count); - priv->head_count = NULL; - - return FALSE; -} - -/* Indicates that @leader_address send a Ping to the swarm to - * initiate a head count */ -static void -on_ping_received (DeePeer *self, - const gchar *leader_address) -{ - DeePeerPrivate *priv; - - g_return_if_fail (DEE_IS_PEER (self)); - g_return_if_fail (leader_address != NULL); - - priv = self->priv; - - trace_object (self, "Got Ping from: %s", leader_address); - - /* When we receive a Ping (and note that the swarm leader will receive its - * own Ping as well) we enter a "head count mode" where we will consider - * all peers that haven't given us a Pong within a certain timeout for lost. - * - * We indicate that we are in head counting mode by setting - * priv->head_count != NULL - */ - if (priv->head_count) - { - g_slist_foreach (priv->head_count, (GFunc) g_free, NULL); - g_slist_free (priv->head_count); - } - - priv->head_count = g_slist_prepend (NULL, g_strdup (priv->own_name)); - priv->head_count_source = g_timeout_add (500, - (GSourceFunc) on_head_count_complete, - self); - - /* The DeePeer protocol says we must respond with a Pong to any Ping */ - emit_pong(self); -} - -/* Indicates that @peer_address has emitted a Pong */ -static void -on_pong_received (DeePeer *self, - const gchar *peer_address) -{ - DeePeerPrivate *priv; - - g_return_if_fail (DEE_IS_PEER (self)); - g_return_if_fail (peer_address != NULL); - - priv = self->priv; - trace_object (self, "Got pong %s", peer_address); - - if (!g_hash_table_lookup_extended (priv->peers, peer_address, NULL, NULL)) - { - g_mutex_lock (priv->lock); - g_hash_table_insert (priv->peers, g_strdup (peer_address), NULL); - g_mutex_unlock (priv->lock); - - emit_peer_found (self, peer_address); - } - - /* If we are in head counting mode register this Ping */ - if (priv->head_count) - priv->head_count = g_slist_prepend (priv->head_count, - g_strdup (peer_address)); -} - -static void -on_dbus_peer_signal (GDBusConnection *connection, - const gchar *sender_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *signal_name, - GVariant *parameters, - gpointer user_data) -{ - DeePeer *self; - gchar *peer_address = NULL; - - g_return_if_fail (DEE_IS_PEER (user_data)); - - self = DEE_PEER (user_data); - - if (g_strcmp0 ("Bye", signal_name) == 0) - { - g_variant_get (parameters, "(ss)", NULL, &peer_address); - on_bye_received (self, peer_address); - } - else if (g_strcmp0 ("Ping", signal_name) == 0) - on_ping_received (self, sender_name); - else if (g_strcmp0 ("Pong", signal_name) == 0) - on_pong_received (self, sender_name); - else - g_critical ("Unexpected signal from peer %s: %s.%s", - sender_name, interface_name, signal_name); -} - -/* Broadcast a Ping signal to do a head-count on the swarm. - * Only call this method as swarm leader - that's the contract - * of the Swarm spec. - * This method is thread safe */ -static void -emit_ping (DeePeer *self) -{ - DeePeerPrivate *priv; - - g_return_if_fail (DEE_IS_PEER (self)); - g_return_if_fail (self->priv->is_swarm_leader); - g_return_if_fail (self->priv->connection != NULL); - - trace_object (self, "Emit ping"); - - priv = self->priv; - g_dbus_connection_emit_signal (priv->connection, - NULL, /* destination */ - priv->swarm_path, /* object path */ - DEE_PEER_DBUS_IFACE, /* interface */ - "Ping", /* signal name */ - g_variant_new ("(s)", priv->swarm_name), - NULL); /* error */ -} - -/* Broadcast a Pong signal as a response to a Ping. - * This method is thread safe */ -static void -emit_pong (DeePeer *self) -{ - DeePeerPrivate *priv; - - g_return_if_fail (DEE_IS_PEER (self)); - g_return_if_fail (self->priv->connection != NULL); - - trace_object (self, "Emit pong"); - - priv = self->priv; - g_dbus_connection_emit_signal (priv->connection, - NULL, /* destination */ - priv->swarm_path, /* object path */ - DEE_PEER_DBUS_IFACE, /* interface */ - "Pong", /* signal name */ - g_variant_new ("(s)", priv->swarm_name), - NULL); /* error */ -} - -/* Return floating variant of type '(as)' with unique DBus names of all peers. - * This method is thread safe */ -static GVariant* -build_peer_list (DeePeer *self) -{ - DeePeerPrivate *priv; - GHashTableIter iter; - GVariantBuilder b; - gpointer key, val; - - g_return_val_if_fail (DEE_IS_PEER (self), FALSE); - - priv = self->priv; - - g_variant_builder_init (&b, G_VARIANT_TYPE ("(as)")); - g_variant_builder_open (&b, G_VARIANT_TYPE ("as")); - - g_mutex_lock (priv->lock); - g_hash_table_iter_init (&iter, priv->peers); - while (g_hash_table_iter_next (&iter, &key, &val)) - { - g_variant_builder_add (&b, "s", key); - } - g_mutex_unlock (priv->lock); - - g_variant_builder_close (&b); - return g_variant_builder_end (&b); -} - -/* This method is thread safe */ -static gboolean -check_method (GDBusMessage *msg, - const gchar *iface, - const gchar *member, - const gchar *path) -{ - return msg != NULL && - G_DBUS_MESSAGE_TYPE_METHOD_CALL == g_dbus_message_get_message_type (msg) && - (iface == NULL || g_strcmp0 (g_dbus_message_get_interface (msg), iface) == 0) && - (member == NULL || g_strcmp0 (g_dbus_message_get_member (msg), member) == 0) && - (path == NULL || g_strcmp0 (g_dbus_message_get_path (msg), path) == 0); -} - -/* This method is thread safe */ -static gboolean -check_signal (GDBusMessage *msg, - const gchar *iface, - const gchar *member, - const gchar *path) -{ - return msg != NULL && - G_DBUS_MESSAGE_TYPE_SIGNAL == g_dbus_message_get_message_type (msg) && - (iface == NULL || g_strcmp0 (g_dbus_message_get_interface (msg), iface) == 0) && - (member == NULL || g_strcmp0 (g_dbus_message_get_member (msg), member) == 0) && - (path == NULL || g_strcmp0 (g_dbus_message_get_path (msg), path) == 0); -} - -/* Used to transfer data to the mainloop. - * Use only for good, not evil, and only from gdbus_message_filter() */ -static gboolean -transfer_to_mainloop (gpointer *args) -{ - GFunc cb = (GFunc) args[0]; - - cb (args[1], args[2]); - g_object_unref (args[1]); - g_free (args[2]); - g_free (args); - - return FALSE; -} - -/* Callback applied to all incoming DBus messages. We use this to grab - * messages for our match rules and dispatch to the right on_*_received - * function. - * WARNING: This callback is run in the GDBus message handling thread - - * and NOT in the mainloop! */ -static GDBusMessage* -gdbus_message_filter (GDBusConnection *connection, - GDBusMessage *msg, - gboolean incoming, - gpointer user_data) -{ - DeePeer *self; - DeePeerPrivate *priv; - GVariant *body; - GDBusMessageType msg_type; - gchar *swarm_name = NULL; - gchar *peer_address = NULL; - const gchar *sender_address; - gpointer *data; - - g_return_val_if_fail (DEE_IS_PEER (user_data), msg); - - self = DEE_PEER (user_data); - priv = self->priv; - body = g_dbus_message_get_body (msg); - sender_address = g_dbus_message_get_sender (msg); - msg_type = g_dbus_message_get_message_type (msg); - - /* We have no business with outgoing messages */ - if (!incoming) - return msg; - - /* We're only interested in method calls and signals */ - if (msg_type != G_DBUS_MESSAGE_TYPE_METHOD_CALL && - msg_type != G_DBUS_MESSAGE_TYPE_SIGNAL) - return msg; - - /*trace ("FILTER: %p", user_data); - trace ("Msg filter: From: %s, Iface: %s, Member: %s", - dbus_message_get_sender (msg), - dbus_message_get_interface (msg), - dbus_message_get_member (msg));*/ - - /* Important note: Apps consuming this lib will likely install custom match - * rules which will trigger this filter. Hence we must do very - * strict matching before we dispatch our methods */ - - if (check_method (msg, "org.freedesktop.DBus", "RequestName", NULL) && - g_strcmp0 (sender_address, g_dbus_connection_get_unique_name (connection)) != 0 && - body != NULL) - { - g_variant_get (body, "(su)", &swarm_name, NULL); - if (g_strcmp0 (swarm_name, priv->swarm_name) == 0) - { - /* Call on_join_received() in the main loop */ - data = g_new (gpointer, 2); - data[0] = on_join_received; - data[1] = g_object_ref (self); - data[2] = g_strdup (sender_address); - g_idle_add ((GSourceFunc) transfer_to_mainloop, data); - } - } - else if (check_signal (msg, "org.freedesktop.DBus", "NameOwnerChanged", NULL) && body != NULL) - { - gchar *old_address, *new_address; - gboolean should_emit_bye; - - g_variant_get (body, "(sss)", &peer_address, &old_address, &new_address); - - /* Check if a known peer dropped off the bus and emit the Bye signal - * if we are the swarm leaders */ - g_mutex_lock (priv->lock); - should_emit_bye = priv->is_swarm_leader && - g_strcmp0 (peer_address, old_address) == 0 && - g_strcmp0 (new_address, "") == 0 && - g_strcmp0 (peer_address, g_dbus_connection_get_unique_name (connection)) != 0 && - g_hash_table_lookup_extended (priv->peers, - peer_address, - NULL, - NULL); - g_mutex_unlock (priv->lock); - - if (should_emit_bye) - { - /* Call emit_bye() in the main loop */ - data = g_new (gpointer, 2); - data[0] = emit_bye; - data[1] = g_object_ref (self); - data[2] = peer_address; // own - g_idle_add ((GSourceFunc) transfer_to_mainloop, data); - peer_address = NULL; - } - g_free (old_address); - g_free (new_address); - } - else if (check_method (msg, DEE_PEER_DBUS_IFACE, "List", priv->swarm_path)) - { - /* We don't want to go through the whole GDBus interface/introspection - * setup just to export the List method. We just handle this particular - * method inline */ - GDBusMessage *reply; - reply = g_dbus_message_new_method_reply (msg); - g_dbus_message_set_body (reply, build_peer_list (self)); - g_dbus_connection_send_message (connection, - reply, - G_DBUS_SEND_MESSAGE_FLAGS_NONE, - NULL, /* out serial */ - NULL); /* error */ - g_object_unref (reply); - - /* Convince GDBus that we handled this message by returning NULL */ - return NULL; - } - - g_free (swarm_name); - g_free (peer_address); - - return msg; -} diff -Nru dee-0.5.22/dee/dee-peer.h dee-1.0.0/dee/dee-peer.h --- dee-0.5.22/dee/dee-peer.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-peer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,109 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Neil Jagdish Patel - */ - -#if !defined (_DEE_H_INSIDE) && !defined (DEE_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef _HAVE_DEE_PEER_H -#define _HAVE_DEE_PEER_H - -#include -#include - -G_BEGIN_DECLS - -#define DEE_TYPE_PEER (dee_peer_get_type ()) - -#define DEE_PEER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - DEE_TYPE_PEER, DeePeer)) - -#define DEE_PEER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \ - DEE_TYPE_PEER, DeePeerClass)) - -#define DEE_IS_PEER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - DEE_TYPE_PEER)) - -#define DEE_IS_PEER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - DEE_TYPE_PEER)) - -#define DEE_PEER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - DEE_TYPE_PEER, DeePeerClass)) - -typedef struct _DeePeer DeePeer; -typedef struct _DeePeerClass DeePeerClass; -typedef struct _DeePeerPrivate DeePeerPrivate; - -#define DEE_PEER_DBUS_IFACE "com.canonical.Dee.Peer" - -/** - * DeePeer: - * - * All fields in the DeePeer structure are private and should never be - * accessed directly - */ -struct _DeePeer -{ - /*< private >*/ - GObject parent; - - DeePeerPrivate *priv; -}; - -struct _DeePeerClass -{ - /*< private >*/ - GObjectClass parent_class; - - /*< public >*/ - - /*< signals >*/ - void (*connected) (DeePeer *peer, const gchar *peer_name); - void (*peer_found) (DeePeer *peer, const gchar *name); - void (*peer_lost) (DeePeer *peer, const gchar *name); - - /*< vtable >*/ - - /*< private >*/ - void (*_dee_peer_1) (void); - void (*_dee_peer_2) (void); - void (*_dee_peer_3) (void); - void (*_dee_peer_4) (void); -}; - -/** - * dee_peer_get_type: - * - * The GType of #DeePeer - * - * Return value: the #GType of #DeePeer - **/ -GType dee_peer_get_type (void) G_GNUC_CONST; - -DeePeer* dee_peer_new (const gchar* swarm_name); - -const gboolean dee_peer_is_swarm_leader (DeePeer *self); - -const gchar* dee_peer_get_swarm_leader (DeePeer *self); - -const gchar * dee_peer_get_swarm_name (DeePeer *self); - -G_END_DECLS - -#endif /* _HAVE_DEE_PEER_H */ diff -Nru dee-0.5.22/dee/dee-proxy-model.c dee-1.0.0/dee/dee-proxy-model.c --- dee-0.5.22/dee/dee-proxy-model.c 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-proxy-model.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,811 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by: - * Mikkel Kamstrup Erlandsen - */ - -/** - * SECTION:dee-proxy-model - * @short_description: A model that wraps another underlying #DeeModel - * @include: dee.h - * - * #DeeProxyModel wraps another #DeeModel instance and use it as a back end - * by proxuing all method calls down to the back end. - * - */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include - -#include "dee-model.h" -#include "dee-proxy-model.h" -#include "dee-serializable-model.h" -#include "dee-marshal.h" -#include "trace-log.h" - -static void dee_proxy_model_model_iface_init (DeeModelIface *iface); - -G_DEFINE_TYPE_WITH_CODE (DeeProxyModel, - dee_proxy_model, - DEE_TYPE_SERIALIZABLE_MODEL, - G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL, - dee_proxy_model_model_iface_init)); - -#define DEE_PROXY_MODEL_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_PROXY_MODEL, DeeProxyModelPrivate)) - -enum -{ - PROP_0, - PROP_BACK_END, - PROP_PROXY_SIGNALS, -}; - -/** - * DeeProxyModelPrivate: - * - * Ignore this structure. - */ -struct _DeeProxyModelPrivate -{ - /* The backend model holding the actual data */ - DeeModel *back_end; - - /* Whether to use the seqnums of the backend model (if it's versioned), - * or to use our own seqnums */ - gboolean inherit_seqnums; - - /* Whether or not to automatically forward signals from the back end */ - gboolean proxy_signals; - - /* Signals handlers for relaying signals from the back end */ - gulong row_added_handler; - gulong row_removed_handler; - gulong row_changed_handler; -}; - -#define DEE_PROXY_MODEL_BACK_END(model) (DEE_PROXY_MODEL(model)->priv->back_end) -#define SUPER_CLASS DEE_SERIALIZABLE_MODEL_CLASS (dee_proxy_model_parent_class) - -/* - * DeeModel forward declarations - */ -static void dee_proxy_model_set_schema_full (DeeModel *self, - const gchar* const *schema, - guint num_columns); - -static const gchar* const* dee_proxy_model_get_schema (DeeModel *self, - guint *num_columns); - -static const gchar* dee_proxy_model_get_column_schema (DeeModel *self, - guint column); - -static guint dee_proxy_model_get_n_columns (DeeModel *self); - -static guint dee_proxy_model_get_n_rows (DeeModel *self); - -static void dee_proxy_model_clear (DeeModel *self); - -static DeeModelIter* dee_proxy_model_append_row (DeeModel *self, - GVariant **row_members); - -static DeeModelIter* dee_proxy_model_prepend_row (DeeModel *self, - GVariant **row_members); - -static DeeModelIter* dee_proxy_model_insert_row (DeeModel *self, - guint pos, - GVariant **row_members); - -static DeeModelIter* dee_proxy_model_insert_row_before (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members); - -static void dee_proxy_model_remove (DeeModel *self, - DeeModelIter *iter); - -static void dee_proxy_model_set_value (DeeModel *self, - DeeModelIter *iter, - guint column, - GVariant *value); - -static void dee_proxy_model_set_row (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members); - -static GVariant* dee_proxy_model_get_value (DeeModel *self, - DeeModelIter *iter, - guint column); - -static DeeModelIter* dee_proxy_model_get_first_iter (DeeModel *self); - -static DeeModelIter* dee_proxy_model_get_last_iter (DeeModel *self); - -static DeeModelIter* dee_proxy_model_get_iter_at_row (DeeModel *self, - guint row); - -static gboolean dee_proxy_model_get_bool (DeeModel *self, - DeeModelIter *iter, - guint column); - -static guchar dee_proxy_model_get_uchar (DeeModel *self, - DeeModelIter *iter, - guint column); - -static gint32 dee_proxy_model_get_int32 (DeeModel *self, - DeeModelIter *iter, - guint column); - -static guint32 dee_proxy_model_get_uint32 (DeeModel *self, - DeeModelIter *iter, - guint column); - -static gint64 dee_proxy_model_get_int64 (DeeModel *self, - DeeModelIter *iter, - guint column); - -static guint64 dee_proxy_model_get_uint64 (DeeModel *self, - DeeModelIter *iter, - guint column); - -static gdouble dee_proxy_model_get_double (DeeModel *self, - DeeModelIter *iter, - guint column); - -static const gchar* dee_proxy_model_get_string (DeeModel *self, - DeeModelIter *iter, - guint column); - -static DeeModelIter* dee_proxy_model_next (DeeModel *self, - DeeModelIter *iter); - -static DeeModelIter* dee_proxy_model_prev (DeeModel *self, - DeeModelIter *iter); - -static gboolean dee_proxy_model_is_first (DeeModel *self, - DeeModelIter *iter); - -static gboolean dee_proxy_model_is_last (DeeModel *self, - DeeModelIter *iter); - -static guint dee_proxy_model_get_position (DeeModel *self, - DeeModelIter *iter); - -static DeeModelTag* dee_proxy_model_register_tag (DeeModel *self, - GDestroyNotify tag_destroy); - -static gpointer dee_proxy_model_get_tag (DeeModel *self, - DeeModelIter *iter, - DeeModelTag *tag); - -static void dee_proxy_model_set_tag (DeeModel *self, - DeeModelIter *iter, - DeeModelTag *tag, - gpointer value); - -/* - * Callbacks for relaying signals from the back end model - */ -static void on_back_end_row_added (DeeProxyModel *self, - DeeModelIter *iter); - -static void on_back_end_row_removed (DeeProxyModel *self, - DeeModelIter *iter); - -static void on_back_end_row_changed (DeeProxyModel *self, - DeeModelIter *iter); - -/* - * Overrides for DeeSerializableModel - */ - -static guint64 dee_proxy_model_get_seqnum (DeeModel *self); - -static void dee_proxy_model_set_seqnum (DeeModel *self, - guint64 seqnum); - -static guint64 dee_proxy_model_inc_seqnum (DeeModel *self); - -/* GObject Init */ -static void -dee_proxy_model_finalize (GObject *object) -{ - DeeProxyModelPrivate *priv = DEE_PROXY_MODEL (object)->priv; - - if (priv->back_end) - { - if (priv->row_added_handler != 0) - g_signal_handler_disconnect (priv->back_end, priv->row_added_handler); - if (priv->row_removed_handler != 0) - g_signal_handler_disconnect (priv->back_end, priv->row_removed_handler); - if (priv->row_changed_handler != 0) - g_signal_handler_disconnect (priv->back_end, priv->row_changed_handler); - - g_object_unref (priv->back_end); - } - - G_OBJECT_CLASS (dee_proxy_model_parent_class)->finalize (object); -} - -/* GObject Post-Init. Properties has been set */ -static void -dee_proxy_model_constructed (GObject *object) -{ - DeeProxyModelPrivate *priv = DEE_PROXY_MODEL (object)->priv; - - if (priv->back_end == NULL) - { - g_critical ("You must set the 'back-end' property of " - "the DeeProxyModel upon creation."); - return; - } - - /* Connect to signals on the back-end model so we can relay them */ - if (priv->proxy_signals) - { - priv->row_added_handler = - g_signal_connect_swapped (priv->back_end, "row-added", - G_CALLBACK (on_back_end_row_added), object); - priv->row_removed_handler = - g_signal_connect_swapped (priv->back_end, "row-removed", - G_CALLBACK (on_back_end_row_removed), object); - priv->row_changed_handler = - g_signal_connect_swapped (priv->back_end, "row-changed", - G_CALLBACK (on_back_end_row_changed), object); - } - - /* GObjectClass has NULL 'constructed' member, but we add this check for - * future robustness if we ever move to another base class */ - if (G_OBJECT_CLASS (dee_proxy_model_parent_class)->constructed != NULL) - G_OBJECT_CLASS (dee_proxy_model_parent_class)->constructed (object); -} - -static void -dee_proxy_model_set_property (GObject *object, - guint id, - const GValue *value, - GParamSpec *pspec) -{ - DeeProxyModelPrivate *priv = DEE_PROXY_MODEL (object)->priv; - - switch (id) - { - case PROP_BACK_END: - /* Steal ref to the back end model */ - priv->back_end = g_value_get_object (value); - break; - case PROP_PROXY_SIGNALS: - priv->proxy_signals = g_value_get_boolean (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, id, pspec); - break; - } -} - -static void -dee_proxy_model_get_property (GObject *object, - guint id, - GValue *value, - GParamSpec *pspec) -{ - switch (id) - { - case PROP_BACK_END: - g_value_set_object (value, DEE_PROXY_MODEL (object)->priv->back_end); - break; - case PROP_PROXY_SIGNALS: - g_value_set_boolean (value, DEE_PROXY_MODEL (object)->priv->proxy_signals); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, id, pspec); - break; - } -} - -static void -dee_proxy_model_class_init (DeeProxyModelClass *klass) -{ - GObjectClass *obj_class = G_OBJECT_CLASS (klass); - DeeSerializableModelClass *dvm_class = DEE_SERIALIZABLE_MODEL_CLASS (klass); - GParamSpec *pspec; - - obj_class->finalize = dee_proxy_model_finalize; - obj_class->constructed = dee_proxy_model_constructed; - obj_class->set_property = dee_proxy_model_set_property; - obj_class->get_property = dee_proxy_model_get_property; - - dvm_class->get_seqnum = dee_proxy_model_get_seqnum; - dvm_class->set_seqnum = dee_proxy_model_set_seqnum; - dvm_class->inc_seqnum = dee_proxy_model_inc_seqnum; - - /** - * DeeProxyModel:back-end: - * - * The backend model used by this proxy model. The ownership of the ref to - * the back end model is transfered to the proxy model. - **/ - pspec = g_param_spec_object ("back-end", "Back end", - "Back end model", - DEE_TYPE_MODEL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY - | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (obj_class, PROP_BACK_END, pspec); - - /** - * DeeProxyModel:proxy-signals: - * - * Boolean property defining whether or not to automatically forward signals - * from the back end model. This is especially useful for sub classes wishing - * to do their own more advanced signal forwarding. - **/ - pspec = g_param_spec_boolean ("proxy-signals", "Proxy signals", - "Whether or not to automatically forward signals from the back end", - TRUE, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY - | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (obj_class, PROP_PROXY_SIGNALS, pspec); - - /* Add private data */ - g_type_class_add_private (obj_class, sizeof (DeeProxyModelPrivate)); -} - -static void -dee_proxy_model_model_iface_init (DeeModelIface *iface) -{ - iface->set_schema_full = dee_proxy_model_set_schema_full; - iface->get_schema = dee_proxy_model_get_schema; - iface->get_column_schema = dee_proxy_model_get_column_schema; - iface->get_n_columns = dee_proxy_model_get_n_columns; - iface->get_n_rows = dee_proxy_model_get_n_rows; - iface->clear = dee_proxy_model_clear; - iface->prepend_row = dee_proxy_model_prepend_row; - iface->append_row = dee_proxy_model_append_row; - iface->insert_row = dee_proxy_model_insert_row; - iface->insert_row_before = dee_proxy_model_insert_row_before; - iface->remove = dee_proxy_model_remove; - iface->set_value = dee_proxy_model_set_value; - iface->set_row = dee_proxy_model_set_row; - iface->get_value = dee_proxy_model_get_value; - iface->get_first_iter = dee_proxy_model_get_first_iter; - iface->get_last_iter = dee_proxy_model_get_last_iter; - iface->get_iter_at_row = dee_proxy_model_get_iter_at_row; - iface->get_bool = dee_proxy_model_get_bool; - iface->get_uchar = dee_proxy_model_get_uchar; - iface->get_int32 = dee_proxy_model_get_int32; - iface->get_uint32 = dee_proxy_model_get_uint32; - iface->get_int64 = dee_proxy_model_get_int64; - iface->get_uint64 = dee_proxy_model_get_uint64; - iface->get_double = dee_proxy_model_get_double; - iface->get_string = dee_proxy_model_get_string; - iface->next = dee_proxy_model_next; - iface->prev = dee_proxy_model_prev; - iface->is_first = dee_proxy_model_is_first; - iface->is_last = dee_proxy_model_is_last; - iface->get_position = dee_proxy_model_get_position; - iface->register_tag = dee_proxy_model_register_tag; - iface->get_tag = dee_proxy_model_get_tag; - iface->set_tag = dee_proxy_model_set_tag; -} - -static void -dee_proxy_model_init (DeeProxyModel *model) -{ - DeeProxyModelPrivate *priv; - - priv = model->priv = DEE_PROXY_MODEL_GET_PRIVATE (model); - priv->back_end = NULL; - priv->inherit_seqnums = FALSE; - - priv->row_added_handler = 0; - priv->row_removed_handler = 0; - priv->row_changed_handler = 0; -} - -/* - * DeeModel Interface Implementation - */ -static void -dee_proxy_model_set_schema_full (DeeModel *self, - const gchar* const *schema, - guint num_columns) -{ - g_return_if_fail (DEE_IS_PROXY_MODEL (self)); - - dee_model_set_schema_full (DEE_PROXY_MODEL_BACK_END (self), - schema, num_columns); -} - -static const gchar* const* -dee_proxy_model_get_schema (DeeModel *self, - guint *num_columns) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), 0); - - return dee_model_get_schema (DEE_PROXY_MODEL_BACK_END (self), num_columns); -} - -static const gchar* -dee_proxy_model_get_column_schema (DeeModel *self, - guint column) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), NULL); - - return dee_model_get_column_schema (DEE_PROXY_MODEL_BACK_END (self), column); -} - -static guint -dee_proxy_model_get_n_columns (DeeModel *self) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), 0); - - return dee_model_get_n_columns (DEE_PROXY_MODEL_BACK_END (self)); -} - -static guint -dee_proxy_model_get_n_rows (DeeModel *self) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), 0); - - return dee_model_get_n_rows (DEE_PROXY_MODEL_BACK_END (self)); -} - -static void -dee_proxy_model_clear (DeeModel *self) -{ - g_return_if_fail (DEE_IS_PROXY_MODEL (self)); - - dee_model_clear (DEE_PROXY_MODEL_BACK_END (self)); -} - -static DeeModelIter* -dee_proxy_model_prepend_row (DeeModel *self, - GVariant **row_members) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), NULL); - - return dee_model_prepend_row (DEE_PROXY_MODEL_BACK_END (self), row_members); -} - -static DeeModelIter* -dee_proxy_model_append_row (DeeModel *self, - GVariant **row_members) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), NULL); - - return dee_model_append_row (DEE_PROXY_MODEL_BACK_END (self), row_members); -} - -static DeeModelIter* -dee_proxy_model_insert_row (DeeModel *self, - guint pos, - GVariant **row_members) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), NULL); - - return dee_model_insert_row (DEE_PROXY_MODEL_BACK_END (self), - pos, row_members); -} - -static DeeModelIter* -dee_proxy_model_insert_row_before (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), NULL); - - return dee_model_insert_row_before (DEE_PROXY_MODEL_BACK_END (self), - iter, row_members); -} - -static void -dee_proxy_model_remove (DeeModel *self, - DeeModelIter *iter) -{ - g_return_if_fail (DEE_IS_PROXY_MODEL (self)); - - dee_model_remove (DEE_PROXY_MODEL_BACK_END (self), iter); -} - -static void -dee_proxy_model_set_row (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members) -{ - g_return_if_fail (DEE_IS_PROXY_MODEL (self)); - - dee_model_set_row (DEE_PROXY_MODEL_BACK_END (self), iter, row_members); -} - -static void -dee_proxy_model_set_value (DeeModel *self, - DeeModelIter *iter, - guint column, - GVariant *value) -{ - g_return_if_fail (DEE_IS_PROXY_MODEL (self)); - - dee_model_set_value (DEE_PROXY_MODEL_BACK_END (self), iter, column, value); -} - -static GVariant* -dee_proxy_model_get_value (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), NULL); - - return dee_model_get_value (DEE_PROXY_MODEL_BACK_END (self), iter, column); -} - -static gboolean -dee_proxy_model_get_bool (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), FALSE); - - return dee_model_get_bool (DEE_PROXY_MODEL_BACK_END (self), iter, column); -} - -static guchar -dee_proxy_model_get_uchar (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), 0); - - return dee_model_get_uchar (DEE_PROXY_MODEL_BACK_END (self), iter, column); -} - -static gint32 -dee_proxy_model_get_int32 (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), 0); - - return dee_model_get_int32 (DEE_PROXY_MODEL_BACK_END (self), iter, column); -} - -static guint32 -dee_proxy_model_get_uint32 (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), 0); - - return dee_model_get_uint32 (DEE_PROXY_MODEL_BACK_END (self), iter, column); -} - - -static gint64 -dee_proxy_model_get_int64 (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), 0); - - return dee_model_get_int64 (DEE_PROXY_MODEL_BACK_END (self), iter, column); -} - - -static guint64 -dee_proxy_model_get_uint64 (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), 0); - - return dee_model_get_uint64 (DEE_PROXY_MODEL_BACK_END (self), iter, column); -} - -static gdouble -dee_proxy_model_get_double (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), 0); - - return dee_model_get_double (DEE_PROXY_MODEL_BACK_END (self), iter, column); -} - -static const gchar* -dee_proxy_model_get_string (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), NULL); - - return dee_model_get_string (DEE_PROXY_MODEL_BACK_END (self), iter, column); -} - -static DeeModelIter* -dee_proxy_model_get_first_iter (DeeModel *self) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), NULL); - - return dee_model_get_first_iter (DEE_PROXY_MODEL_BACK_END (self)); -} - -static DeeModelIter* -dee_proxy_model_get_last_iter (DeeModel *self) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), NULL); - - return dee_model_get_last_iter (DEE_PROXY_MODEL_BACK_END (self)); -} - -static DeeModelIter* -dee_proxy_model_get_iter_at_row (DeeModel *self, guint row) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), NULL); - - return dee_model_get_iter_at_row (DEE_PROXY_MODEL_BACK_END (self), row); -} - -static DeeModelIter* -dee_proxy_model_next (DeeModel *self, - DeeModelIter *iter) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), NULL); - - return dee_model_next (DEE_PROXY_MODEL_BACK_END (self), iter); -} - -static DeeModelIter* -dee_proxy_model_prev (DeeModel *self, - DeeModelIter *iter) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), NULL); - - return dee_model_prev (DEE_PROXY_MODEL_BACK_END (self), iter); -} - -static gboolean -dee_proxy_model_is_first (DeeModel *self, - DeeModelIter *iter) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), FALSE); - - return dee_model_is_first (DEE_PROXY_MODEL_BACK_END (self), iter); -} - -static gboolean -dee_proxy_model_is_last (DeeModel *self, - DeeModelIter *iter) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), FALSE); - - return dee_model_is_last (DEE_PROXY_MODEL_BACK_END (self), iter); -} - -static guint -dee_proxy_model_get_position (DeeModel *self, - DeeModelIter *iter) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), 0); - - return dee_model_get_position (DEE_PROXY_MODEL_BACK_END (self), iter); -} - -static DeeModelTag* -dee_proxy_model_register_tag (DeeModel *self, - GDestroyNotify tag_destroy) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), NULL); - - return dee_model_register_tag (DEE_PROXY_MODEL_BACK_END (self), tag_destroy); -} - -static gpointer -dee_proxy_model_get_tag (DeeModel *self, - DeeModelIter *iter, - DeeModelTag *tag) -{ - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), NULL); - - return dee_model_get_tag (DEE_PROXY_MODEL_BACK_END (self), iter, tag); -} - -static void -dee_proxy_model_set_tag (DeeModel *self, - DeeModelIter *iter, - DeeModelTag *tag, - gpointer value) -{ - g_return_if_fail (DEE_IS_PROXY_MODEL (self)); - - return dee_model_set_tag (DEE_PROXY_MODEL_BACK_END (self), iter, tag, value); -} - -/* - * Relay signals from back end - */ - -static void -on_back_end_row_added (DeeProxyModel *self, - DeeModelIter *iter) -{ - g_signal_emit_by_name (self, "row-added", iter); -} - -static void -on_back_end_row_removed (DeeProxyModel *self, - DeeModelIter *iter) -{ - g_signal_emit_by_name (self, "row-removed", iter); -} - -static void -on_back_end_row_changed (DeeProxyModel *self, - DeeModelIter *iter) -{ - g_signal_emit_by_name (self, "row-changed", iter); -} - -/* - * Overrides for DeeSerializableModel - */ -static guint64 -dee_proxy_model_get_seqnum (DeeModel *self) -{ - DeeProxyModelPrivate *priv; - - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), 0); - - priv = DEE_PROXY_MODEL (self)->priv; - - if (priv->inherit_seqnums) - return dee_serializable_model_get_seqnum (priv->back_end); - else - return SUPER_CLASS->get_seqnum (priv->back_end); -} - -static void -dee_proxy_model_set_seqnum (DeeModel *self, - guint64 seqnum) -{ - DeeProxyModelPrivate *priv; - - g_return_if_fail (DEE_IS_PROXY_MODEL (self)); - - priv = DEE_PROXY_MODEL (self)->priv; - - if (priv->inherit_seqnums) - dee_serializable_model_set_seqnum (priv->back_end, seqnum); - else - return SUPER_CLASS->set_seqnum (priv->back_end, seqnum); -} - -static guint64 -dee_proxy_model_inc_seqnum (DeeModel *self) -{ - DeeProxyModelPrivate *priv; - - g_return_val_if_fail (DEE_IS_PROXY_MODEL (self), 0); - - priv = DEE_PROXY_MODEL (self)->priv; - - if (priv->inherit_seqnums) - return dee_serializable_model_inc_seqnum (priv->back_end); - else - return SUPER_CLASS->inc_seqnum (priv->back_end); -} diff -Nru dee-0.5.22/dee/dee-proxy-model.h dee-1.0.0/dee/dee-proxy-model.h --- dee-0.5.22/dee/dee-proxy-model.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-proxy-model.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,93 +0,0 @@ -/* - * Copyright (C) 2009 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -#if !defined (_DEE_H_INSIDE) && !defined (DEE_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef _HAVE_DEE_PROXY_MODEL_H -#define _HAVE_DEE_PROXY_MODEL_H - -#include -#include - -#include -#include - -G_BEGIN_DECLS - -#define DEE_TYPE_PROXY_MODEL (dee_proxy_model_get_type ()) - -#define DEE_PROXY_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - DEE_TYPE_PROXY_MODEL, DeeProxyModel)) - -#define DEE_PROXY_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \ - DEE_TYPE_PROXY_MODEL, DeeProxyModelClass)) - -#define DEE_IS_PROXY_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - DEE_TYPE_PROXY_MODEL)) - -#define DEE_IS_PROXY_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - DEE_TYPE_PROXY_MODEL)) - -#define DEE_PROXY_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - DBUS_TYPE_SEQUENCE_MODEL, DeeProxyModelClass)) - -typedef struct _DeeProxyModel DeeProxyModel; -typedef struct _DeeProxyModelClass DeeProxyModelClass; -typedef struct _DeeProxyModelPrivate DeeProxyModelPrivate; - -/** - * DeeProxyModel: - * - * All fields in the DeeProxyModel structure are private and should never be - * accessed directly - */ -struct _DeeProxyModel -{ - /*< private >*/ - DeeSerializableModel parent; - - DeeProxyModelPrivate *priv; -}; - -struct _DeeProxyModelClass -{ - /*< private >*/ - DeeSerializableModelClass parent_class; - - /*< private >*/ - void (*_dee_proxy_model_1) (void); - void (*_dee_proxy_model_2) (void); - void (*_dee_proxy_model_3) (void); - void (*_dee_proxy_model_4) (void); -}; - -/** - * dee_proxy_model_get_type: - * - * The GType of #DeeProxyModel - * - * Return value: the #GType of #DeeProxyModel - **/ -GType dee_proxy_model_get_type (void) G_GNUC_CONST; - -G_END_DECLS - -#endif /* _HAVE_DEE_PROXY_MODEL_H */ diff -Nru dee-0.5.22/dee/dee-resource-manager.c dee-1.0.0/dee/dee-resource-manager.c --- dee-0.5.22/dee/dee-resource-manager.c 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-resource-manager.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,147 +0,0 @@ -/* - * Copyright (C) 2009 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by: - * Mikkel Kamstrup Erlandsen - */ - -/** - * SECTION:dee-resource-manager - * @short_description: Store and load #DeeSerializables by name - * @include: dee.h - * - * The #DeeResourceManager API provides a simple API for storing and loading - * DeeSerializables from some persistent storage. The resources - * are stored in a flat structure identified by names that should be chosen - * similarly to DBus names. That is reverse domain names ala - * net.launchpad.Example.MyData. - */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "dee-serializable.h" -#include "dee-resource-manager.h" -#include "dee-file-resource-manager.h" -#include "trace-log.h" - -typedef DeeResourceManagerIface DeeResourceManagerInterface; -G_DEFINE_INTERFACE (DeeResourceManager, dee_resource_manager, G_TYPE_OBJECT) - -static DeeResourceManager *_default_resource_manager = NULL; - -static void -dee_resource_manager_default_init (DeeResourceManagerInterface *klass) -{ - -} - -/** - * dee_resource_manager_store: - * @self: The resource manager to invoke - * @resource: (transfer none):A #DeeSerializable to store under @resource_name - * @resource_name: The name to store the resource under. Will overwrite any - * existing resource with the same name - * @error: A return location for a #GError pointer. %NULL to ignore errors - * - * Store a resource under a given name. The resource manager must guarantee - * that the stored data survives system reboots and that you can recreate a - * copy of @resource by calling dee_resource_manager_load() using the - * same @resource_name. - * - * Important note: This call may do blocking IO. The resource manager must - * guarantee that this call is reasonably fast, like writing the externalized - * resource to a file, but not blocking IO over a network socket. - * - * Return value: %TRUE on success and %FALSE otherwise. In case of a runtime - * error the @error pointer will point to a #GError in the - * #DeeResourceError domain. - */ -gboolean -dee_resource_manager_store (DeeResourceManager *self, - DeeSerializable *resource, - const gchar *resource_name, - GError **error) -{ - DeeResourceManagerIface *iface; - - g_return_val_if_fail (DEE_IS_RESOURCE_MANAGER (self), FALSE); - g_return_val_if_fail (DEE_IS_SERIALIZABLE(resource), FALSE); - g_return_val_if_fail (resource_name != NULL, FALSE); - g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - - iface = DEE_RESOURCE_MANAGER_GET_IFACE (self); - - return (* iface->store) (self, resource, resource_name, error); -} - -/** - * dee_resource_manager_load: - * @self: The resource manager to invoke - * @resource_name: The name of the resource to retrieve - * @error: A return location for a #GError pointer. %NULL to ignore errors - * - * Load a resource from persistent storage. The loaded resource will be of the - * same GType as when it was stored (provided that the same serialization and - * parse functions are registered). - * - * In case of an error the error will be in the #GFileError domain. Specifically - * if there is no resource with the name @resource_name the error code will - * be #G_FILE_ERROR_NOENT. - * - * Important note: This call may do blocking IO. The resource manager must - * guarantee that this call is reasonably fast, like writing the externalized - * resource to a file, but not blocking IO over a network socket. - * - * Return value: (transfer full): A newly allocated #GObject in case of success - * and %NULL otherwise. In case of a runtime error the @error - * pointer will be set. - */ -GObject* -dee_resource_manager_load (DeeResourceManager *self, - const gchar *resource_name, - GError **error) -{ - DeeResourceManagerIface *iface; - - g_return_val_if_fail (DEE_IS_RESOURCE_MANAGER (self), NULL); - g_return_val_if_fail (resource_name != NULL, NULL); - g_return_val_if_fail (error == NULL || *error == NULL, NULL); - - iface = DEE_RESOURCE_MANAGER_GET_IFACE (self); - - return (* iface->load) (self, resource_name, error); -} - -/** - * dee_resource_manager_get_default: - * - * Get a pointer to the platform default #DeeResourceManager. - * - * Return value: (transfer none): The default resource manager for the platform. - * Do not unreference. If you need to keep the instance around - * you must manually reference it. - */ -DeeResourceManager* -dee_resource_manager_get_default (void) -{ - if (_default_resource_manager == NULL) - { - _default_resource_manager = dee_file_resource_manager_new (NULL); - } - - return _default_resource_manager; -} diff -Nru dee-0.5.22/dee/dee-resource-manager.h dee-1.0.0/dee/dee-resource-manager.h --- dee-0.5.22/dee/dee-resource-manager.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-resource-manager.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -/* - * Copyright (C) 2009 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -#if !defined (_DEE_H_INSIDE) && !defined (DEE_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef _DEE_RESOURCE_MANAGER_H_ -#define _DEE_RESOURCE_MANAGER_H_ - -#include -#include -#include - -G_BEGIN_DECLS - -#define DEE_TYPE_RESOURCE_MANAGER (dee_resource_manager_get_type ()) - -#define DEE_RESOURCE_MANAGER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), DEE_TYPE_RESOURCE_MANAGER, DeeResourceManager)) - -#define DEE_IS_RESOURCE_MANAGER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DEE_TYPE_RESOURCE_MANAGER)) - -#define DEE_RESOURCE_MANAGER_GET_IFACE(obj) \ - (G_TYPE_INSTANCE_GET_INTERFACE(obj, dee_resource_manager_get_type (), DeeResourceManagerIface)) - -typedef struct _DeeResourceManagerIface DeeResourceManagerIface; -typedef struct _DeeResourceManager DeeResourceManager; - -struct _DeeResourceManagerIface -{ - GTypeInterface g_iface; - - /*< public >*/ - gboolean (*store) (DeeResourceManager *self, - DeeSerializable *resource, - const gchar *resource_name, - GError **error); - - GObject* (*load) (DeeResourceManager *self, - const gchar *resource_name, - GError **error); - - /*< private >*/ - void (*_dee_resource_manager_1) (void); - void (*_dee_resource_manager_2) (void); - void (*_dee_resource_manager_3) (void); - void (*_dee_resource_manager_4) (void); - void (*_dee_resource_manager_5) (void); - void (*_dee_resource_manager_6) (void); - void (*_dee_resource_manager_7) (void); - void (*_dee_resource_manager_8) (void); -}; - -GType dee_resource_manager_get_type (void) G_GNUC_CONST; - -gboolean dee_resource_manager_store (DeeResourceManager *self, - DeeSerializable *resource, - const gchar *resource_name, - GError **error); - -GObject* dee_resource_manager_load (DeeResourceManager *self, - const gchar *resource_name, - GError **error); - -DeeResourceManager* dee_resource_manager_get_default (void); - -G_END_DECLS - -#endif /* _HAVE_DEE_RESOURCE_MANAGER_H */ diff -Nru dee-0.5.22/dee/dee-result-set.c dee-1.0.0/dee/dee-result-set.c --- dee-0.5.22/dee/dee-result-set.c 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-result-set.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,207 +0,0 @@ -/* - * Copyright (C) 2009 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by: - * Mikkel Kamstrup Erlandsen - */ - -/** - * SECTION:dee-result-set - * @short_description: Cursor-like interface for results sets - * @include: dee.h - * - * Interface for results returned by dee_index_lookup(). - * - * This interface utilizes a cursor-like metaphor. You advance the cursor - * by calling dee_result_set_next() or adjust it manually by calling - * dee_result_set_seek(). - * - * Calling dee_result_set_next() will also return the row at the - * current cursor position. You may retrieve the current row without advancing - * the cursor by calling dee_result_set_peek(). - * - */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "dee-result-set.h" - -typedef DeeResultSetIface DeeResultSetInterface; -G_DEFINE_INTERFACE (DeeResultSet, dee_result_set, G_TYPE_OBJECT) - -enum -{ - /* Public signals */ - - DEE_RESULT_SET_LAST_SIGNAL -}; - -static void -dee_result_set_default_init (DeeResultSetInterface *klass) -{ - -} - -/** - * dee_result_set_get_n_rows: - * @self: The #DeeResultSet to get the size of - * - * Get the number of #DeeModelIters held in a #DeeResultSet. - * - * Returns: The number of rows held in the result set - */ -guint -dee_result_set_get_n_rows (DeeResultSet *self) -{ - DeeResultSetIface *iface; - - g_return_val_if_fail (DEE_IS_RESULT_SET (self), 0); - - iface = DEE_RESULT_SET_GET_IFACE (self); - - return (* iface->get_n_rows) (self); -} - -/** - * dee_result_set_next: - * @self: The #DeeResultSet to get a row from - * - * Get the current row from the result set and advance the cursor. - * To ensure that calls to this method will succeed you can call - * dee_result_set_has_next(). - * - * To retrieve the current row without advancing the cursor call - * dee_result_set_peek() in stead of this method. - * - * Returns: (transfer none):The #DeeModelIter at the current cursor position - */ -DeeModelIter* -dee_result_set_next (DeeResultSet *self) -{ - DeeResultSetIface *iface; - - g_return_val_if_fail (DEE_IS_RESULT_SET (self), NULL); - - iface = DEE_RESULT_SET_GET_IFACE (self); - - return (* iface->next) (self); -} - -/** - * dee_result_set_has_next: - * @self: The #DeeResultSet to check - * - * Check if a call to dee_result_set_next() will succeed. - * - * Returns: %TRUE if and only if more rows can be retrieved by calling - * dee_result_set_next() - */ -gboolean -dee_result_set_has_next (DeeResultSet *self) -{ - DeeResultSetIface *iface; - - g_return_val_if_fail (DEE_IS_RESULT_SET (self), FALSE); - - iface = DEE_RESULT_SET_GET_IFACE (self); - - return (* iface->has_next) (self); -} - -/** - * dee_result_set_peek: - * @self: The #DeeResultSet to get a row from - * - * Get the row at the current cursor position. - * - * To retrieve the current row and advance the cursor position call - * dee_result_set_next() in stead of this method. - * - * Returns: (transfer none):The #DeeModelIter at the current cursor position - */ -DeeModelIter* -dee_result_set_peek (DeeResultSet *self) -{ - DeeResultSetIface *iface; - - g_return_val_if_fail (DEE_IS_RESULT_SET (self), NULL); - - iface = DEE_RESULT_SET_GET_IFACE (self); - - return (* iface->peek) (self); -} - -/** - * dee_result_set_seek: - * @self: The #DeeResultSet to seek in - * @pos: The position to seek to - * - * Set the cursor position. Following calls to dee_result_set_peek() - * or dee_result_set_next() will read the row at position @pos. - */ -void -dee_result_set_seek (DeeResultSet *self, - guint pos) -{ - DeeResultSetIface *iface; - - g_return_if_fail (DEE_IS_RESULT_SET (self)); - - iface = DEE_RESULT_SET_GET_IFACE (self); - - (* iface->seek) (self, pos); -} - -/** - * dee_result_set_tell: - * @self: The #DeeResultSet to check the cursor position for - * - * Get the current position of the cursor. - * - * Returns: The current position of the cursor - */ -guint -dee_result_set_tell (DeeResultSet *self) -{ - DeeResultSetIface *iface; - - g_return_val_if_fail (DEE_IS_RESULT_SET (self), 0); - - iface = DEE_RESULT_SET_GET_IFACE (self); - - return (* iface->tell) (self); -} - -/** - * dee_result_set_get_model: - * @self: The #DeeResultSet to get the mode for - * - * Get the model associated with a result set - * - * Returns: (transfer none): The model that the rows point into - */ -DeeModel* -dee_result_set_get_model (DeeResultSet *self) -{ - DeeResultSetIface *iface; - - g_return_val_if_fail (DEE_IS_RESULT_SET (self), NULL); - - iface = DEE_RESULT_SET_GET_IFACE (self); - - return (* iface->get_model) (self); -} diff -Nru dee-0.5.22/dee/dee-result-set.h dee-1.0.0/dee/dee-result-set.h --- dee-0.5.22/dee/dee-result-set.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-result-set.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2009 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -#if !defined (_DEE_H_INSIDE) && !defined (DEE_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef _DEE_RESULT_SET_H_ -#define _DEE_RESULT_SET_H_ - -#include -#include -#include - -G_BEGIN_DECLS - -#define DEE_TYPE_RESULT_SET (dee_result_set_get_type ()) - -#define DEE_RESULT_SET(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), DEE_TYPE_RESULT_SET, DeeResultSet)) - -#define DEE_IS_RESULT_SET(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DEE_TYPE_RESULT_SET)) - -#define DEE_RESULT_SET_GET_IFACE(obj) \ - (G_TYPE_INSTANCE_GET_INTERFACE(obj, dee_result_set_get_type (), DeeResultSetIface)) - -typedef struct _DeeResultSetIface DeeResultSetIface; -typedef struct _DeeResultSet DeeResultSet; - - -struct _DeeResultSetIface -{ - GTypeInterface g_iface; - - /*< public >*/ - guint (*get_n_rows) (DeeResultSet *self); - - DeeModelIter* (*next) (DeeResultSet *self); - - gboolean (*has_next) (DeeResultSet *self); - - DeeModelIter* (*peek) (DeeResultSet *self); - - void (*seek) (DeeResultSet *self, - guint pos); - - guint (*tell) (DeeResultSet *self); - - DeeModel* (*get_model) (DeeResultSet *self); - - /*< private >*/ - void (*_dee_result_set_1) (void); - void (*_dee_result_set_2) (void); - void (*_dee_result_set_3) (void); - void (*_dee_result_set_4) (void); - void (*_dee_result_set_5) (void); -}; - -GType dee_result_set_get_type (void) G_GNUC_CONST; - -guint dee_result_set_get_n_rows (DeeResultSet *self); - -DeeModelIter* dee_result_set_next (DeeResultSet *self); - -gboolean dee_result_set_has_next (DeeResultSet *self); - -DeeModelIter* dee_result_set_peek (DeeResultSet *self); - -void dee_result_set_seek (DeeResultSet *self, - guint pos); - -guint dee_result_set_tell (DeeResultSet *self); - -DeeModel* dee_result_set_get_model (DeeResultSet *self); - -#define _vala_dee_result_set_next_value(rs) (dee_result_set_has_next(rs) ? dee_result_set_next(rs) : NULL) -#define _vala_dee_result_set_iterator(rs) ((DeeResultSet*)g_object_ref(rs)) - -G_END_DECLS - -#endif /* _HAVE_DEE_RESULT_SET_H */ diff -Nru dee-0.5.22/dee/dee-sequence-model.c dee-1.0.0/dee/dee-sequence-model.c --- dee-0.5.22/dee/dee-sequence-model.c 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-sequence-model.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,870 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by: - * Mikkel Kamstrup Erlandsen - */ - -/** - * SECTION:dee-sequence-model - * @short_description: A #DeeModel implementation backed by a #GSequence - * @include: dee.h - * - * #DeeSequenceModel is an implementation of the #DeeModel interface - * backed by a #GSequence. It extends #DeeSerializableModel so that you may use - * it as back end model for a #DeeShareedModel. - * - * The implementation is backed by a #GSequence giving a good tradeoff between - * random access time versus random- insertion and deletion times. - * - */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include - -#include "dee-model.h" -#include "dee-serializable-model.h" -#include "dee-sequence-model.h" -#include "dee-marshal.h" -#include "trace-log.h" - -static void dee_sequence_model_model_iface_init (DeeModelIface *iface); - -G_DEFINE_TYPE_WITH_CODE (DeeSequenceModel, - dee_sequence_model, - DEE_TYPE_SERIALIZABLE_MODEL, - G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL, - dee_sequence_model_model_iface_init)); - -#define DEE_SEQUENCE_MODEL_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModelPrivate)) - -/** - * DeeSequenceModelPrivate: - * - * Ignore this structure. - */ -struct _DeeSequenceModelPrivate -{ - /* Row data is GVariants stored in GPtrArrays */ - GSequence *sequence; - - /* The tag registry. The data members of the list simply contain the - * GDestroyNotify for the tag. The tag handle is the offset into the - * list + 1. We need the +1 to discern the first tag from a NULL pointer. - * We can use offsets as we expect only very few tags per model */ - GSList *tags; - - /* Flag marking if we are in a transaction */ - gboolean setting_many; -}; - -/* - * DeeModel forward declarations - */ -static guint dee_sequence_model_get_n_rows (DeeModel *self); - -static DeeModelIter* dee_sequence_model_append_row (DeeModel *self, - GVariant **row_members); - -static DeeModelIter* dee_sequence_model_prepend_row (DeeModel *self, - GVariant **row_members); - -static DeeModelIter* dee_sequence_model_insert_row_before (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members); - -static void dee_sequence_model_remove (DeeModel *self, - DeeModelIter *iter); - -static void dee_sequence_model_set_row (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members); - -static void dee_sequence_model_set_value (DeeModel *self, - DeeModelIter *iter, - guint column, - GVariant *value); - -static void dee_sequence_model_set_value_silently (DeeModel *self, - DeeModelIter *iter, - guint column, - GVariant *value); - - -static GVariant* dee_sequence_model_get_value (DeeModel *self, - DeeModelIter *iter, - guint column); - -static DeeModelIter* dee_sequence_model_get_first_iter (DeeModel *self); - -static DeeModelIter* dee_sequence_model_get_last_iter (DeeModel *self); - -static DeeModelIter* dee_sequence_model_get_iter_at_row (DeeModel *self, - guint row); - -static DeeModelIter* dee_sequence_model_next (DeeModel *self, - DeeModelIter *iter); - -static DeeModelIter* dee_sequence_model_prev (DeeModel *self, - DeeModelIter *iter); - -static gboolean dee_sequence_model_is_first (DeeModel *self, - DeeModelIter *iter); - -static gboolean dee_sequence_model_is_last (DeeModel *self, - DeeModelIter *iter); - -static guint dee_sequence_model_get_position (DeeModel *self, - DeeModelIter *iter); - -static DeeModelTag* dee_sequence_model_register_tag (DeeModel *self, - GDestroyNotify tag_destroy); - -static gpointer dee_sequence_model_get_tag (DeeModel *self, - DeeModelIter *iter, - DeeModelTag *tag); - -static void dee_sequence_model_set_tag (DeeModel *self, - DeeModelIter *iter, - DeeModelTag *tag, - gpointer value); - -/* - * Private forwards - */ -static GPtrArray* dee_sequence_model_create_empty_row (DeeModel *self); - -static void dee_sequence_model_free_row (DeeSequenceModel *self, - GSequenceIter *iter); - -static void dee_sequence_model_find_tag (DeeSequenceModel *self, - DeeModelIter *iter, - DeeModelTag *tag, - GSList **out_row_tag, - GSList **out_tag); - -/* GObject Init */ -static void -dee_sequence_model_finalize (GObject *object) -{ - DeeSequenceModel *self = DEE_SEQUENCE_MODEL (object); - DeeSequenceModelPrivate *priv = self->priv; - GSequenceIter *iter, *end; - - /* Free row data */ - end = g_sequence_get_end_iter (priv->sequence); - iter = g_sequence_get_begin_iter (priv->sequence); - while (iter != end) - { - dee_sequence_model_free_row (self, iter); - iter = g_sequence_iter_next (iter); - } - - /* Free our GSequence */ - g_sequence_free (priv->sequence); - priv->sequence = NULL; - - /* Free the tag registry. The list members need no freeing, - * they are just function pointers */ - g_slist_free (priv->tags); - priv->tags = NULL; - - G_OBJECT_CLASS (dee_sequence_model_parent_class)->finalize (object); -} - -static void -dee_sequence_model_set_property (GObject *object, - guint id, - const GValue *value, - GParamSpec *pspec) -{ - switch (id) - { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, id, pspec); - break; - } -} - -static void -dee_sequence_model_get_property (GObject *object, - guint id, - GValue *value, - GParamSpec *pspec) -{ - switch (id) - { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, id, pspec); - break; - } -} - -static void -dee_sequence_model_class_init (DeeSequenceModelClass *klass) -{ - GObjectClass *obj_class = G_OBJECT_CLASS (klass); - - obj_class->finalize = dee_sequence_model_finalize; - obj_class->set_property = dee_sequence_model_set_property; - obj_class->get_property = dee_sequence_model_get_property; - - /* Add private data */ - g_type_class_add_private (obj_class, sizeof (DeeSequenceModelPrivate)); -} - -static void -dee_sequence_model_model_iface_init (DeeModelIface *iface) -{ - iface->get_n_rows = dee_sequence_model_get_n_rows; - iface->prepend_row = dee_sequence_model_prepend_row; - iface->append_row = dee_sequence_model_append_row; - iface->insert_row_before = dee_sequence_model_insert_row_before; - iface->remove = dee_sequence_model_remove; - iface->set_row = dee_sequence_model_set_row; - iface->set_value = dee_sequence_model_set_value; - iface->get_value = dee_sequence_model_get_value; - iface->get_first_iter = dee_sequence_model_get_first_iter; - iface->get_last_iter = dee_sequence_model_get_last_iter; - iface->get_iter_at_row = dee_sequence_model_get_iter_at_row; - iface->next = dee_sequence_model_next; - iface->prev = dee_sequence_model_prev; - iface->is_first = dee_sequence_model_is_first; - iface->is_last = dee_sequence_model_is_last; - iface->get_position = dee_sequence_model_get_position; - iface->register_tag = dee_sequence_model_register_tag; - iface->get_tag = dee_sequence_model_get_tag; - iface->set_tag = dee_sequence_model_set_tag; -} - -static void -dee_sequence_model_init (DeeSequenceModel *model) -{ - DeeSequenceModelPrivate *priv; - - priv = model->priv = DEE_SEQUENCE_MODEL_GET_PRIVATE (model); - priv->sequence = g_sequence_new (NULL); - priv->tags = NULL; - priv->setting_many = FALSE; -} - -/* Private Methods */ - -/* - * DeeModel Interface Implementation - */ - -static guint -dee_sequence_model_get_n_rows (DeeModel *self) -{ - DeeSequenceModelPrivate *priv; - - g_return_val_if_fail (DEE_IS_SEQUENCE_MODEL (self), 0); - priv = ((DeeSequenceModel *) self)->priv; - - return g_sequence_get_length (priv->sequence); -} - -static DeeModelIter* -dee_sequence_model_prepend_row (DeeModel *self, - GVariant **row_members) -{ - DeeSequenceModel *_self = (DeeSequenceModel *) self; - DeeSequenceModelPrivate *priv; - DeeModelIter *iter; - GPtrArray *row; - - g_return_val_if_fail (DEE_IS_SEQUENCE_MODEL (_self), NULL); - g_return_val_if_fail (row_members != NULL, NULL); - - priv = _self->priv; - row = dee_sequence_model_create_empty_row (self); - iter = (DeeModelIter*) g_sequence_prepend (priv->sequence, row); - - priv->setting_many = TRUE; - dee_model_set_row (self, iter, row_members); - priv->setting_many = FALSE; - - dee_serializable_model_inc_seqnum (self); - g_signal_emit_by_name (self, "row-added", iter); - - return iter; -} - -static DeeModelIter* -dee_sequence_model_append_row (DeeModel *self, - GVariant **row_members) -{ - DeeSequenceModel *_self = (DeeSequenceModel *) self; - DeeSequenceModelPrivate *priv; - DeeModelIter *iter; - GPtrArray *row; - - g_return_val_if_fail (DEE_IS_SEQUENCE_MODEL (_self), NULL); - g_return_val_if_fail (row_members != NULL, NULL); - - priv = _self->priv; - row = dee_sequence_model_create_empty_row (self); - iter = (DeeModelIter*) g_sequence_append (priv->sequence, row); - - priv->setting_many = TRUE; - dee_model_set_row (self, iter, row_members); - priv->setting_many = FALSE; - - dee_serializable_model_inc_seqnum (self); - g_signal_emit_by_name (self, "row-added", iter); - - return iter; -} - -static DeeModelIter* -dee_sequence_model_insert_row_before (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members) -{ - DeeSequenceModelPrivate *priv; - GPtrArray *row; - - g_return_val_if_fail (DEE_IS_SEQUENCE_MODEL (self), NULL); - g_return_val_if_fail (iter != NULL, NULL); - g_return_val_if_fail (row_members != NULL, NULL); - - priv = DEE_SEQUENCE_MODEL (self)->priv; - row = dee_sequence_model_create_empty_row (self); - iter = (DeeModelIter*) g_sequence_insert_before ((GSequenceIter *) iter, - row); - - priv->setting_many = TRUE; - dee_model_set_row (self, iter, row_members); - priv->setting_many = FALSE; - - dee_serializable_model_inc_seqnum (self); - g_signal_emit_by_name (self, "row-added", iter); - - return iter; -} - -static void -dee_sequence_model_remove (DeeModel *self, - DeeModelIter *iter_) -{ - DeeSequenceModel *_self = (DeeSequenceModel *)self; - GSequenceIter *iter = (GSequenceIter *)iter_; - - g_return_if_fail (DEE_IS_SEQUENCE_MODEL (_self)); - g_return_if_fail (iter != NULL); - - if (iter_ == dee_model_get_last_iter (self)) - return; - - if (iter) - { - /* Emit the removed signal while the iter is still valid, - * but after we increased the seqnum */ - dee_serializable_model_inc_seqnum (self); - g_signal_emit_by_name (self, "row-removed", iter_); - dee_sequence_model_free_row (_self, iter); - g_sequence_remove (iter); - } - else - { - g_warning ("Unable to remove row '%p': does not exists", iter_); - } -} - -static void -dee_sequence_model_set_value (DeeModel *self, - DeeModelIter *iter, - guint column, - GVariant *value) -{ - DeeSequenceModel *_self = (DeeSequenceModel *)self; - DeeSequenceModelPrivate *priv; - - g_return_if_fail (DEE_IS_SEQUENCE_MODEL (_self)); - g_return_if_fail (iter != NULL); - g_return_if_fail (value != NULL); - - priv = _self->priv; - - dee_sequence_model_set_value_silently (self, iter, column, value); - - if (priv->setting_many == FALSE) - { - dee_serializable_model_inc_seqnum (self); - g_signal_emit_by_name (self, "row-changed", iter); - } -} - -static void -dee_sequence_model_set_row (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members) -{ - DeeSequenceModel *_self = (DeeSequenceModel *)self; - DeeSequenceModelPrivate *priv; - guint i, n_cols; - - g_return_if_fail (DEE_IS_SEQUENCE_MODEL (_self)); - g_return_if_fail (iter != NULL); - g_return_if_fail (row_members != NULL); - - priv = _self->priv; - n_cols = dee_model_get_n_columns (self); - - for (i = 0; i < n_cols; i++) - { - dee_sequence_model_set_value_silently (self, iter, i, row_members[i]); - } - - if (priv->setting_many == FALSE) - { - dee_serializable_model_inc_seqnum (self); - g_signal_emit_by_name (self, "row-changed", iter); - } -} - -static void -dee_sequence_model_set_value_silently (DeeModel *self, - DeeModelIter *iter, - guint column, - GVariant *value) -{ - DeeSequenceModel *_self = (DeeSequenceModel *)self; - GPtrArray *row; - - g_return_if_fail (DEE_IS_SEQUENCE_MODEL (_self)); - g_return_if_fail (iter != NULL); - g_return_if_fail (column < dee_model_get_n_columns (self)); - g_return_if_fail (g_variant_type_equal (g_variant_get_type (value), G_VARIANT_TYPE (dee_model_get_column_schema (self, column)))); - g_return_if_fail (value != NULL); - - row = g_sequence_get ((GSequenceIter *) iter); - - if (G_UNLIKELY (row == NULL)) - { - g_critical ("Unable to set value. NULL row data in DeeSequenceModel@%p " - "at position %u. The row has probably been removed", - self, dee_model_get_position (self, iter)); - return; - } - - if (g_ptr_array_index (row, column) != NULL) - g_variant_unref (g_ptr_array_index (row, column)); - - g_ptr_array_index (row, column) = g_variant_ref_sink (value); -} - -static GVariant* -dee_sequence_model_get_value (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - DeeSequenceModel *_self = (DeeSequenceModel *)self; - GPtrArray *row; - GVariant *col; - - g_return_val_if_fail (DEE_IS_SEQUENCE_MODEL (_self), NULL); - g_return_val_if_fail (iter != NULL, NULL); - g_return_val_if_fail (column < dee_model_get_n_columns (self), NULL); - - row = g_sequence_get ((GSequenceIter *) iter); - if (G_UNLIKELY (row == NULL)) - { - g_critical ("Unable to get value. NULL row data in DeeSequenceModel@%p " - "at position %u. The row has probably been removed", - self, dee_model_get_position (self, iter)); - return NULL; - } - - /* The -1 in the check below is because we hold the row tags in the last - * position of the array. We shouldn't take that into account for this - * check */ - if (G_UNLIKELY (column >= row->len - 1)) - { - g_critical ("Internal error: Column offset %u looks good on " - "DeeSequenceModel@%p, but is out of bounds on internal " - "data structures", column, self); - return NULL; - } - - col = g_ptr_array_index (row, column); - if (G_UNLIKELY (col == NULL)) - { - g_critical ("Internal error: Column %i in DeeSequenceModel@%p" - " holds a NULL value in row %u", - column, self, dee_model_get_position (self, iter)); - return NULL; - } - - return g_variant_ref (col); -} - -static DeeModelIter* -dee_sequence_model_get_first_iter (DeeModel *self) -{ - DeeSequenceModel *_self = (DeeSequenceModel *)self; - - g_return_val_if_fail (DEE_IS_SEQUENCE_MODEL (_self), NULL); - - return (DeeModelIter *) g_sequence_get_begin_iter (_self->priv->sequence); -} - -static DeeModelIter* -dee_sequence_model_get_last_iter (DeeModel *self) -{ - DeeSequenceModel *_self = (DeeSequenceModel *)self; - - g_return_val_if_fail (DEE_IS_SEQUENCE_MODEL (_self), NULL); - - return (DeeModelIter *) g_sequence_get_end_iter (_self->priv->sequence); -} - -static DeeModelIter* -dee_sequence_model_get_iter_at_row (DeeModel *self, guint row) -{ - DeeSequenceModel *_self = (DeeSequenceModel *)self; - - g_return_val_if_fail (DEE_IS_SEQUENCE_MODEL (self), NULL); - - return (DeeModelIter *) g_sequence_get_iter_at_pos (_self->priv->sequence, - row); -} - -static DeeModelIter* -dee_sequence_model_next (DeeModel *self, - DeeModelIter *iter) -{ - g_return_val_if_fail (DEE_IS_SEQUENCE_MODEL (self), NULL); - g_return_val_if_fail (iter, NULL); - g_return_val_if_fail (!dee_model_is_last (self, iter), NULL); - - return (DeeModelIter *) g_sequence_iter_next ((GSequenceIter *)iter); -} - -static DeeModelIter* -dee_sequence_model_prev (DeeModel *self, - DeeModelIter *iter) -{ - g_return_val_if_fail (DEE_IS_SEQUENCE_MODEL (self), NULL); - g_return_val_if_fail (iter, NULL); - g_return_val_if_fail (!dee_model_is_first (self, iter), NULL); - - return (DeeModelIter *) g_sequence_iter_prev ((GSequenceIter *)iter); -} - -static gboolean -dee_sequence_model_is_first (DeeModel *self, - DeeModelIter *iter) -{ - g_return_val_if_fail (DEE_IS_SEQUENCE_MODEL (self), FALSE); - g_return_val_if_fail (iter, FALSE); - - return g_sequence_iter_is_begin ((GSequenceIter *)iter); -} - -static gboolean -dee_sequence_model_is_last (DeeModel *self, - DeeModelIter *iter) -{ - g_return_val_if_fail (DEE_IS_SEQUENCE_MODEL (self), FALSE); - g_return_val_if_fail (iter, FALSE); - - return g_sequence_iter_is_end ((GSequenceIter *)iter); -} - -static guint -dee_sequence_model_get_position (DeeModel *self, - DeeModelIter *iter) -{ - g_return_val_if_fail (DEE_IS_SEQUENCE_MODEL (self), FALSE); - g_return_val_if_fail (iter, FALSE); - - return g_sequence_iter_get_position ((GSequenceIter *)iter); -} - -static DeeModelTag* -dee_sequence_model_register_tag (DeeModel *self, - GDestroyNotify tag_destroy) -{ - DeeSequenceModelPrivate *priv; - GSequenceIter *iter, *end; - GPtrArray *row; - guint tag_handle, n_cols; - - g_return_val_if_fail (DEE_IS_SEQUENCE_MODEL (self), NULL); - - priv = DEE_SEQUENCE_MODEL (self)->priv; - - /* Register the tag. Multiple iterations of the tags list is not - * a big deal here because we only expect very few tags per model */ - priv->tags = g_slist_append (priv->tags, tag_destroy); - tag_handle = g_slist_length (priv->tags); - - /* Update all existing rows to have this tag */ - n_cols = dee_model_get_n_columns (self); - end = g_sequence_get_end_iter (priv->sequence); - iter = g_sequence_get_begin_iter (priv->sequence); - while (iter != end) - { - row = g_sequence_get (iter); - g_ptr_array_index (row, n_cols) = - g_slist_append (g_ptr_array_index (row, n_cols), NULL); - iter = g_sequence_iter_next (iter); - } - - return (DeeModelTag *) GUINT_TO_POINTER (tag_handle); -} - -static gpointer -dee_sequence_model_get_tag (DeeModel *self, - DeeModelIter *iter, - DeeModelTag *tag) -{ - DeeSequenceModel *_self; - GSList *row_tag_l, *tag_l; - - g_return_val_if_fail (DEE_IS_SEQUENCE_MODEL (self), NULL); - g_return_val_if_fail (iter != NULL, NULL); - g_return_val_if_fail (tag != NULL, NULL); - - _self = DEE_SEQUENCE_MODEL (self); - dee_sequence_model_find_tag (_self, iter, tag, &row_tag_l, &tag_l); - - if (row_tag_l == NULL || tag_l == NULL) - { - g_critical ("Failed to get tag %u on %s@%p", - GPOINTER_TO_UINT (tag), G_OBJECT_TYPE_NAME (self), self); - return NULL; - } - - return row_tag_l->data; -} - -void -dee_sequence_model_set_tag (DeeModel *self, - DeeModelIter *iter, - DeeModelTag *tag, - gpointer value) -{ - DeeSequenceModel *_self; - GSList *row_tag_l, *tag_l; - GDestroyNotify destroy; - gpointer old_value; - - g_return_if_fail (DEE_IS_SEQUENCE_MODEL (self)); - g_return_if_fail (iter != NULL); - g_return_if_fail (tag != NULL); - - _self = DEE_SEQUENCE_MODEL (self); - dee_sequence_model_find_tag (_self, iter, tag, &row_tag_l, &tag_l); - - if (row_tag_l == NULL || tag_l == NULL) - { - g_critical ("Failed to set tag %u on %s@%p", - GPOINTER_TO_UINT (tag), G_OBJECT_TYPE_NAME (self), self); - return; - } - - destroy = (GDestroyNotify) tag_l->data; - old_value = row_tag_l->data; - - if (destroy && old_value) - { - destroy (old_value); - } - - row_tag_l->data = value; -} - -/* - * Private methods - */ - /* Create a GPtrArray with the right amount of elements, all set to NULL */ -static GPtrArray* -dee_sequence_model_create_empty_row (DeeModel *self) -{ - DeeSequenceModelPrivate *priv; - GPtrArray *row; - gint i; - guint n_columns; - GSList *tag_iter; - - /* The row tags are stored as a GSList on the n_columns+1 index of the row */ - priv = ((DeeSequenceModel *)self)->priv; - n_columns = dee_model_get_n_columns (self); - row = g_ptr_array_sized_new (n_columns + 1); - - /* Clear the row and set the tags list to NULL which is an empty GSList */ - for (i = 0; i <= n_columns; i++) - g_ptr_array_add (row, NULL); - - /* Populate the row tag list to have the same length as our tag registry */ - for (tag_iter = priv->tags; tag_iter; tag_iter = tag_iter->next) - { - g_ptr_array_index (row, n_columns) = - g_slist_prepend (g_ptr_array_index (row, n_columns), NULL); - } - - return row; -} - -static void -dee_sequence_model_free_row (DeeSequenceModel *self, - GSequenceIter *iter) -{ - DeeSequenceModelPrivate *priv; - GPtrArray *row; - guint n_cols, i; - GSList *tag_iter, *row_tag_iter, *dum; - GDestroyNotify destroy; - - priv = self->priv; - row = g_sequence_get (iter); - n_cols = dee_model_get_n_columns (DEE_MODEL (self)); - - /* Free the row data */ - for (i = 0; i < n_cols; i++) - g_variant_unref (g_ptr_array_index (row, i)); - - /* Free any row tags */ - row_tag_iter = g_ptr_array_index (row, n_cols); - tag_iter = priv->tags; - while (row_tag_iter && tag_iter) - { - destroy = (GDestroyNotify) tag_iter->data; - if (destroy != NULL && row_tag_iter->data != NULL) - destroy (row_tag_iter->data); - - /* Free the GSList element for the row tag while we're here anyway */ - dum = row_tag_iter->next; - g_slist_free_1 (row_tag_iter); - row_tag_iter = dum; - - tag_iter = tag_iter->next; - } - - if (row_tag_iter != NULL) - { - g_critical ("Internal error: Row tags leaked. " - "More row tags for this row than there are registered tags."); - } - else if (tag_iter != NULL) - { - g_critical ("Internal error: Row tags leaked. " - "More tags registered than there are tags for this row."); - } - - /* Free the row itself */ - g_ptr_array_unref (row); - - /* Set the row data to NULL to help debugging for consumers accessing - * removed rows*/ - g_sequence_set (iter, NULL); -} - -static void -dee_sequence_model_find_tag (DeeSequenceModel *self, - DeeModelIter *iter, - DeeModelTag *tag, - GSList **out_row_tag, - GSList **out_tag) -{ - DeeSequenceModelPrivate *priv; - GPtrArray *row; - guint tag_offset, i, n_cols; - GSList *row_tag_iter, *tag_iter; - - priv = self->priv; - row = g_sequence_get ((GSequenceIter *) iter); - n_cols = dee_model_get_n_columns (DEE_MODEL (self)); - tag_offset = GPOINTER_TO_UINT (tag); - - if (G_UNLIKELY (priv->sequence == NULL)) - { - g_critical ("Access to freed DeeSequenceModel detected " - "when looking up tag on DeeSequenceModel@%p", self); - goto not_found; - } - - if (G_UNLIKELY (priv->tags == NULL)) - { - g_critical ("Unable to look up tag. No tags registered on " - "DeeSequenceModel@%p", self); - goto not_found; - } - - if (G_UNLIKELY (row == NULL)) - { - g_critical ("Unable to look up tag. No row data. " - "The row has probably been removed "); - goto not_found; - } - - /* Find tag at right offset */ - row_tag_iter = g_ptr_array_index (row, n_cols); - tag_iter = priv->tags; - i = 1; // remember 1-based offset for tag handles - while (row_tag_iter && tag_iter && i < tag_offset) - { - row_tag_iter = row_tag_iter->next; - tag_iter = tag_iter->next; - i++; - } - - if (i != tag_offset) - { - g_critical ("Unable to find tag %u for %s@%p", - tag_offset, G_OBJECT_TYPE_NAME (self), self); - goto not_found; - } - - *out_row_tag = row_tag_iter; - *out_tag = tag_iter; - return; - - not_found: - *out_row_tag = NULL; - *out_tag = NULL; -} - -/* - * Constructors - */ - -/** - * dee_sequence_model_new: - * - * Create a new #DeeSequenceModel. Before using it you must normally set a - * schema on it by calling dee_model_set_schema(). - * - * Return value: (transfer full): A newly created #DeeSequenceModel. Free with - * g_object_unref(). - * - */ -DeeModel* -dee_sequence_model_new () -{ - DeeModel *self; - - self = DEE_MODEL (g_object_new (DEE_TYPE_SEQUENCE_MODEL, NULL)); - return self; -} diff -Nru dee-0.5.22/dee/dee-sequence-model.h dee-1.0.0/dee/dee-sequence-model.h --- dee-0.5.22/dee/dee-sequence-model.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-sequence-model.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,102 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -#if !defined (_DEE_H_INSIDE) && !defined (DEE_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef _HAVE_DEE_SEQUENCE_MODEL_H -#define _HAVE_DEE_SEQUENCE_MODEL_H - -#include -#include - -#include -#include - -G_BEGIN_DECLS - -#define DEE_TYPE_SEQUENCE_MODEL (dee_sequence_model_get_type ()) - -#define DEE_SEQUENCE_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - DEE_TYPE_SEQUENCE_MODEL, DeeSequenceModel)) - -#define DEE_SEQUENCE_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \ - DBUS_TYPE_SEQUENCE_MODEL, DeeSequenceModelClass)) - -#define DEE_IS_SEQUENCE_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - DEE_TYPE_SEQUENCE_MODEL)) - -#define DEE_IS_SEQUENCE_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - DEE_TYPE_SEQUENCE_MODEL)) - -#define DEE_SEQUENCE_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - DBUS_TYPE_SEQUENCE_MODEL, DeeSequenceModelClass)) - -typedef struct _DeeSequenceModel DeeSequenceModel; -typedef struct _DeeSequenceModelClass DeeSequenceModelClass; -typedef struct _DeeSequenceModelPrivate DeeSequenceModelPrivate; - -/** - * DeeSequenceModel: - * - * All fields in the DeeSequenceModel structure are private and should never be - * accessed directly - */ -struct _DeeSequenceModel -{ - /*< private >*/ - DeeSerializableModel parent; - - DeeSequenceModelPrivate *priv; -}; - -/** - * DBUS_INTERFACE_SEQUENCE_MODEL - * - * String constant defining the name of the DBus Model interface. - */ -#define DEE_SEQUENCE_MODEL_DBUS_IFACE "com.canonical.Dee.Model" - -struct _DeeSequenceModelClass -{ - /*< private >*/ - DeeSerializableModelClass parent_class; - - /*< private >*/ - void (*_dee_sequence_model_1) (void); - void (*_dee_sequence_model_2) (void); - void (*_dee_sequence_model_3) (void); - void (*_dee_sequence_model_4) (void); -}; - -/** - * dee_sequence_model_get_type: - * - * The GType of #DeeSequenceModel - * - * Return value: the #GType of #DeeSequenceModel - **/ -GType dee_sequence_model_get_type (void); - -DeeModel* dee_sequence_model_new (); - -G_END_DECLS - -#endif /* _HAVE_DEE_SEQUENCE_MODEL_H */ diff -Nru dee-0.5.22/dee/dee-serializable.c dee-1.0.0/dee/dee-serializable.c --- dee-0.5.22/dee/dee-serializable.c 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-serializable.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,399 +0,0 @@ -/* - * Copyright (C) 2009 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by: - * Mikkel Kamstrup Erlandsen - */ - -/** - * SECTION:dee-serializable - * @short_description: Interface for classes that can serialize to and from #GVariants - * @include: dee.h - * - * Interface for classes that can serialize to and from #GVariants. - * - * There are two serialization concepts supported by this API: - * serialization and externalization. - * A serialized instance is created with dee_serializable_serialize() and can - * be read back with dee_serializable_parse() provided you know the correct - * #GType for the serialized data. The #GVariant representation of your - * serialized data is guaranteed to be exactly as you implement yourself in the - * @serialize vfunc of the #DeeSerializableIface. - * - * With externalized instances you don't have to know the correct GType to - * recreate the instance. The #GType is encoded in the data itself. When you're - * using dee_serializable_externalize() your data will be wrapped in a container - * format with the required object metadata to read it back. For this reason - * dee_serializable_parse_external() doesn't require you to pass in the #GType - * you want to deserialize. - * - * - * On Subclasses of DeeSerializable Types - * - * As a rule of thumb you need to re-implement the #DeeSerializable interface - * and install parse functions with dee_serializable_register_parser() every - * time you create a new class derived from a #DeeSerializable superclass. - * - * - * In case a subclass does not provide it's own serialization interface - * Dee will recurse upwards in the type hierarchy and use the serialization and - * parser implementations of the first superclass with the required behaviour. - * This means that the parsed instance will not be an - * instance of the subclass but only of the serializable superclass. - * Caveat emptor. - * - * - */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "dee-serializable.h" -#include "dee-serializable-model.h" -#include "dee-sequence-model.h" -#include "dee-shared-model.h" -#include "trace-log.h" - -#define DEE_SERIALIZABLE_FORMAT_VERSION 1 - -typedef struct { - GType type; - GVariantType *vtype; - DeeSerializableParseFunc parse; -} Parser; - -GHashTable *parsers_by_gtype = NULL; - -typedef DeeSerializableIface DeeSerializableInterface; -G_DEFINE_INTERFACE (DeeSerializable, dee_serializable, G_TYPE_OBJECT) - -static void -dee_serializable_default_init (DeeSerializableInterface *klass) -{ - -} - -static void -init_parsers () -{ - parsers_by_gtype = g_hash_table_new (g_str_hash, g_str_equal); - - /* Call type initializers for built in DeeSerializables */ - dee_serializable_model_get_type (); - dee_sequence_model_get_type (); - dee_shared_model_get_type (); -} - -/** - * dee_serializable_register_parser: - * @type: The #GType of the object class to register a parser for - * @vtype: Variants to be converted must have this signature - * @parse_func: A function to convert #GVariant data into an instance of the - * given @type. - * - * Register a parser that can convert #GVariant data into an instance of - * a given #GType. Note that you can register more than one parser for the - * same #GType provided that you give them different variant type signatures. - * - * If there is already a parser registered for the given @type and @vtype - * it will be silently replaced. - * - * The recommended behaviour is that #GObject classes register their parsers in - * their respective class init functions. - */ -void -dee_serializable_register_parser (GType type, - const GVariantType *vtype, - DeeSerializableParseFunc parse_func) -{ - GSList *parsers, *iter; - Parser *parser; - const gchar *gtype_name; - - g_return_if_fail (G_TYPE_IS_OBJECT (type)); - g_return_if_fail (vtype != NULL); - g_return_if_fail (parse_func != NULL); - - if (G_UNLIKELY (parsers_by_gtype == NULL)) - { - init_parsers (); - } - - gtype_name = g_type_name (type); - parsers = g_hash_table_lookup (parsers_by_gtype, gtype_name); - - trace ("Registering DeeSerializable parser for type %s with signature %s", - gtype_name, g_variant_type_peek_string (vtype)); - - /* Update existing parser if we have one */ - for (iter = parsers; iter != NULL; iter++) - { - parser = (Parser *) iter->data; - if (g_variant_type_equal (parser->vtype, vtype)) - { - /* Parser for this type-vtype combo already registered. - * Override the current parser as documented and return */ - parser->parse = parse_func; - return; - } - } - - /* Invariant: Beyond this point we don't have the parser registered */ - parser = g_new0 (Parser, 1); - parser->type = type; - parser->vtype = g_variant_type_copy (vtype); - parser->parse = parse_func; - - parsers = g_slist_prepend (parsers, parser); - g_hash_table_insert (parsers_by_gtype, g_strdup (gtype_name), parsers); - - return; -} - -static GObject* -_parse_type (GVariant *data, - GType type) -{ - GObject *object = NULL; - GSList *parsers, *iter; - Parser *parser; - const GVariantType *vtype; - const gchar *gtype_name = NULL; - - g_return_val_if_fail (data != NULL, NULL); - - vtype = g_variant_get_type (data); - gtype_name = g_type_name (type); - - trace ("Looking up parser for DeeSerializable of type %s with signature %s", - gtype_name, g_variant_type_peek_string (vtype)); - - /* Find the right parser and apply it */ - parsers = g_hash_table_lookup (parsers_by_gtype, gtype_name); - for (iter = parsers; iter != NULL; iter++) - { - parser = (Parser *) iter->data; - if (g_variant_type_equal (parser->vtype, vtype)) - { - object = parser->parse (data); - if (G_UNLIKELY (object == NULL)) - { - g_critical ("Parser for GType %s signature %s returned NULL. This is not allowed by the contract for DeeSerializableParseFunc.", - gtype_name, g_variant_type_peek_string (vtype)); - } - else if (G_UNLIKELY (!g_type_is_a (G_OBJECT_TYPE (object), parser->type))) - { - g_critical ("Parser for GType %s signature %s returned instance of type %s which is not a subtype of %s", - gtype_name, g_variant_type_peek_string (vtype), G_OBJECT_TYPE_NAME (object), gtype_name); - g_object_unref (object); - object = NULL; - } - - break; - } - } - - if (object == NULL) - trace ("No parser registered for GType %s with signature %s", - gtype_name, g_variant_type_peek_string (vtype)); - - return object; -} - -/** - * dee_serializable_parse_external: - * @data: The #GVariant data to parse - * - * Reconstruct a #DeeSerializable from #GVariant data. For this function - * to work you need to register a parser with - * dee_serializable_register_parser(). Any native Dee class will do so - * automatically. - * - * This method only works on data created with dee_serializable_externalize() - * and not with data from dee_serializable_serialize(). - * - * Since a #DeeSerializableParseFunc is not allowed to fail - by contract - - * it can be guaranteed that this function only returns %NULL in case there - * is no known parser for the #GType or #GVariant signature of @data. - * - * Return value: (transfer full): A newly constructed #GObject build from @data - * or %NULL in case no parser has been registered for the given - * #GType or variant signature. Free with g_object_unref(). - */ -GObject* -dee_serializable_parse_external (GVariant *data) -{ - GObject *object = NULL; - guint32 *version; - GVariant *headers, *payload, *payloadv; - gchar *gtype_name = NULL; - GType gtype_id; - - g_return_val_if_fail (data != NULL, NULL); - g_return_val_if_fail (g_variant_type_equal (g_variant_get_type (data), G_VARIANT_TYPE ("(ua{sv}v)")), NULL); - - if (G_UNLIKELY (parsers_by_gtype == NULL)) - { - init_parsers (); - } - - g_variant_ref_sink (data); - - /* Unpack the serialized data */ - g_variant_get_child (data, 0, "u", &version); - headers = g_variant_get_child_value (data, 1); - payloadv = g_variant_get_child_value (data, 2); - payload = g_variant_get_variant (payloadv); - - if (!g_variant_lookup (headers, "GType", "s", >ype_name)) - { - g_critical ("Unable to parse DeeSerializable data: 'GType' header not present in serialized data"); - goto out; - } - - gtype_id = g_type_from_name (gtype_name); - if (gtype_id == 0) - { - g_critical ("No known GType for type name %s. Perhaps it is not " - "registered with serialization subsystem yet?", gtype_name); - goto out; - } - - object = dee_serializable_parse (payload, gtype_id); - - out: - g_variant_unref (data); - g_variant_unref (headers); - g_variant_unref (payloadv); - g_variant_unref (payload); - g_free (gtype_name); - - return object; -} - -/** - * dee_serializable_parse: - * @data: The #GVariant data to parse. If this is a floating reference it will - * be consumed - * @type: The #GType of the class to instantiate from @data - * - * Reconstruct a #DeeSerializable from #GVariant data. For this function - * to work you need to register a parser with - * dee_serializable_register_parser(). Any native Dee class will do so - * automatically. - * - * This method only works on data created with dee_serializable_serialize() - * and not with data from dee_serializable_externalize(). - * - * Since a #DeeSerializableParseFunc is not allowed to fail - by contract - - * it can be guaranteed that this function only returns %NULL in case there - * is no known parser for @type and #GVariant signature of @data. - * - * Return value: (transfer full): A newly constructed #GObject build from @data - * or %NULL in case no parser has been registered for the given - * #GType or variant signature. Free with g_object_unref(). - */ -GObject* -dee_serializable_parse (GVariant *data, - GType type) -{ - GObject *object = NULL; - - g_return_val_if_fail (data != NULL, NULL); - g_return_val_if_fail (g_type_is_a (type, DEE_TYPE_SERIALIZABLE), NULL); - - if (G_UNLIKELY (parsers_by_gtype == NULL)) - { - init_parsers (); - } - - g_variant_ref_sink (data); - - while (g_type_is_a (type, DEE_TYPE_SERIALIZABLE)) - { - object = _parse_type (data, type); - - if (object != NULL) - break; - - type = g_type_parent (type); - } - - g_variant_unref (data); - - return object; -} - -/** - * dee_serializable_externalize: - * @self: The instance to externalize - * - * Build an externalized form of @self which can be used together with - * dee_serializable_parse_external() to rebuild a copy of @self. - * - * It is important to note that the variant returned from this method does - * not have the same type signature as returned from a call to - * dee_serializable_serialize(). Externalization will wrap the serialized data - * in a container format with versioning information and headers with type - * information. - * - * Return value: A floating reference to a #GVariant with the externalized data. - */ -GVariant* -dee_serializable_externalize (DeeSerializable *self) -{ - GVariant *payload; - GVariantBuilder b; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE (self), NULL); - - payload = dee_serializable_serialize (self); - g_variant_builder_init (&b, G_VARIANT_TYPE ("(ua{sv}v)")); - g_variant_builder_add (&b, "u", DEE_SERIALIZABLE_FORMAT_VERSION); - - g_variant_builder_open (&b, G_VARIANT_TYPE ("a{sv}")); - g_variant_builder_add (&b, "{sv}", "GType", g_variant_new_string (G_OBJECT_TYPE_NAME (self))); - g_variant_builder_close (&b); - - g_variant_builder_add_value (&b, g_variant_new_variant (payload)); - - return g_variant_builder_end (&b); -} - -/** - * dee_serializable_serialize: - * @self: The instance to serialize - * - * Build a clean serialized representation of @self. The signature of the - * returned variant is entirely determined by the underlying implementation. - * You can recreate a serialized instance by calling dee_serializable_parse() - * provided that you know the correct #GType for the serialized instance. - * - * Return value: A floating reference to a #GVariant with the serialized data. - * The variants type signature is entirely dependent of the - * underlying implementation. - */ -GVariant* -dee_serializable_serialize (DeeSerializable *self) -{ - DeeSerializableIface *iface; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE (self), NULL); - - iface = DEE_SERIALIZABLE_GET_IFACE (self); - - return (* iface->serialize) (self); -} diff -Nru dee-0.5.22/dee/dee-serializable.h dee-1.0.0/dee/dee-serializable.h --- dee-0.5.22/dee/dee-serializable.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-serializable.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,93 +0,0 @@ -/* - * Copyright (C) 2009 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -#if !defined (_DEE_H_INSIDE) && !defined (DEE_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef _DEE_SERIALIZABLE_H_ -#define _DEE_SERIALIZABLE_H_ - -#include -#include -#include - -G_BEGIN_DECLS - -#define DEE_TYPE_SERIALIZABLE (dee_serializable_get_type ()) - -#define DEE_SERIALIZABLE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), DEE_TYPE_SERIALIZABLE, DeeSerializable)) - -#define DEE_IS_SERIALIZABLE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DEE_TYPE_SERIALIZABLE)) - -#define DEE_SERIALIZABLE_GET_IFACE(obj) \ - (G_TYPE_INSTANCE_GET_INTERFACE(obj, dee_serializable_get_type (), DeeSerializableIface)) - -typedef struct _DeeSerializableIface DeeSerializableIface; -typedef struct _DeeSerializable DeeSerializable; - -/** - * DeeSerializableParseFunc: - * @data: A #GVariant with type signature as passed to - * dee_serializable_register_parser() when the parser was registered. - * The variant is not referenced. - * - * Return value: A newly constructed #GObject of the #GType used when - * registering the parser. Note that since the environment - * guarantees that the input data is valid according to the - * registration information this function can not fail. - * Thus %NULL is not a valid return value. - */ -typedef GObject* (*DeeSerializableParseFunc) (GVariant *data); - -struct _DeeSerializableIface -{ - GTypeInterface g_iface; - - /*< public >*/ - GVariant* (*serialize) (DeeSerializable *self); - - /*< private >*/ - void (*_dee_serializable_1) (void); - void (*_dee_serializable_2) (void); - void (*_dee_serializable_3) (void); - void (*_dee_serializable_4) (void); - void (*_dee_serializable_5) (void); -}; - -GType dee_serializable_get_type (void) G_GNUC_CONST; - -void dee_serializable_register_parser (GType type, - const GVariantType *vtype, - DeeSerializableParseFunc parse_func); - -GObject* dee_serializable_parse (GVariant *data, - GType type); - -GObject* dee_serializable_parse_external (GVariant *data); - -GVariant* dee_serializable_externalize (DeeSerializable *self); - -GVariant* dee_serializable_serialize (DeeSerializable *self); - -G_END_DECLS - -#endif /* _HAVE_DEE_SERIALIZABLE_H */ diff -Nru dee-0.5.22/dee/dee-serializable-model.c dee-1.0.0/dee/dee-serializable-model.c --- dee-0.5.22/dee/dee-serializable-model.c 2011-09-23 14:13:55.000000000 +0000 +++ dee-1.0.0/dee/dee-serializable-model.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1039 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by: - * Mikkel Kamstrup Erlandsen - */ - -/** - * SECTION:dee-versioned-model - * @short_description: Abstract base class for easing implementations of - * #DeeModels providing a unique version number - * for each row - * @include: dee.h - * - * #DeeSerializableModel is an abstract base class to ease implementation of - * #DeeModels providing rows versioned by a - * sequence number. - * - */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include - -#include "dee-model.h" -#include "dee-serializable-model.h" -#include "dee-serializable.h" -#include "dee-marshal.h" -#include "trace-log.h" - -static void dee_serializable_model_model_iface_init (DeeModelIface *iface); -static void dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface); -static GObject* dee_serializable_model_parse_serialized (GVariant *data); -G_DEFINE_ABSTRACT_TYPE_WITH_CODE (DeeSerializableModel, - dee_serializable_model, - G_TYPE_OBJECT, - G_IMPLEMENT_INTERFACE (DEE_TYPE_MODEL, - dee_serializable_model_model_iface_init) - G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE, - dee_serializable_model_serializable_iface_init)); - -#define DEE_SERIALIZABLE_MODEL_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelPrivate)) - -/** - * DeeSerializableModelPrivate: - * - * Ignore this structure. - */ -struct _DeeSerializableModelPrivate -{ - /* Seqnum tracking */ - guint64 seqnum; - - /* Column type info */ - guint n_columns; - gchar **column_schemas; // NULL terminated - -}; - -/* - * Public overridable DeeSerializableModel methods - */ -static guint64 dee_serializable_model_get_seqnum_real (DeeModel *self); - -static void dee_serializable_model_set_seqnum_real (DeeModel *self, - guint64 seqnum); - -static guint64 dee_serializable_model_inc_seqnum_real (DeeModel *self); - -/* - * DeeModel forward declarations - */ -static const gchar* const* dee_serializable_model_get_schema (DeeModel *self, - guint *num_columns); - -static const gchar* dee_serializable_model_get_column_schema (DeeModel *self, - guint column); - -static void dee_serializable_model_set_schema_full (DeeModel *self, - const gchar* const *column_schemas, - guint num_columns); - -static guint dee_serializable_model_get_n_columns (DeeModel *self); - -static guint dee_serializable_model_get_n_rows (DeeModel *self); - -static void dee_serializable_model_clear (DeeModel *self); - -static DeeModelIter* dee_serializable_model_append_row (DeeModel *self, - GVariant **row_members); - -static DeeModelIter* dee_serializable_model_prepend_row (DeeModel *self, - GVariant **row_members); - -static DeeModelIter* dee_serializable_model_insert_row (DeeModel *self, - guint pos, - GVariant **row_members); - -static DeeModelIter* dee_serializable_model_insert_row_before (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members); - -static void dee_serializable_model_remove (DeeModel *self, - DeeModelIter *iter); - -static void dee_serializable_model_set_value (DeeModel *self, - DeeModelIter *iter, - guint column, - GVariant *value); - -static void dee_serializable_model_set_row (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members); - -static GVariant* dee_serializable_model_get_value (DeeModel *self, - DeeModelIter *iter, - guint column); - -static DeeModelIter* dee_serializable_model_get_first_iter (DeeModel *self); - -static DeeModelIter* dee_serializable_model_get_last_iter (DeeModel *self); - -static DeeModelIter* dee_serializable_model_get_iter_at_row (DeeModel *self, - guint row); - -static gboolean dee_serializable_model_get_bool (DeeModel *self, - DeeModelIter *iter, - guint column); - -static guchar dee_serializable_model_get_uchar (DeeModel *self, - DeeModelIter *iter, - guint column); - -static gint32 dee_serializable_model_get_int32 (DeeModel *self, - DeeModelIter *iter, - guint column); - -static guint32 dee_serializable_model_get_uint32 (DeeModel *self, - DeeModelIter *iter, - guint column); - -static gint64 dee_serializable_model_get_int64 (DeeModel *self, - DeeModelIter *iter, - guint column); - -static guint64 dee_serializable_model_get_uint64 (DeeModel *self, - DeeModelIter *iter, - guint column); - -static gdouble dee_serializable_model_get_double (DeeModel *self, - DeeModelIter *iter, - guint column); - -static const gchar* dee_serializable_model_get_string (DeeModel *self, - DeeModelIter *iter, - guint column); - -static DeeModelIter* dee_serializable_model_next (DeeModel *self, - DeeModelIter *iter); - -static DeeModelIter* dee_serializable_model_prev (DeeModel *self, - DeeModelIter *iter); - -static gboolean dee_serializable_model_is_first (DeeModel *self, - DeeModelIter *iter); - -static gboolean dee_serializable_model_is_last (DeeModel *self, - DeeModelIter *iter); - -/* GObject Init */ -static void -dee_serializable_model_finalize (GObject *object) -{ - DeeSerializableModelPrivate *priv = DEE_SERIALIZABLE_MODEL (object)->priv; - - priv->n_columns = 0; - priv->seqnum = 0; - - if (priv->column_schemas != NULL) - { - g_strfreev (priv->column_schemas); - priv->column_schemas = NULL; - } - - G_OBJECT_CLASS (dee_serializable_model_parent_class)->finalize (object); -} - -static void -dee_serializable_model_set_property (GObject *object, - guint id, - const GValue *value, - GParamSpec *pspec) -{ - switch (id) - { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, id, pspec); - break; - } -} - -static void -dee_serializable_model_get_property (GObject *object, - guint id, - GValue *value, - GParamSpec *pspec) -{ - switch (id) - { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, id, pspec); - break; - } -} - -static void -dee_serializable_model_class_init (DeeSerializableModelClass *klass) -{ - GObjectClass *obj_class = G_OBJECT_CLASS (klass); - - obj_class->finalize = dee_serializable_model_finalize; - obj_class->set_property = dee_serializable_model_set_property; - obj_class->get_property = dee_serializable_model_get_property; - - klass->get_seqnum = dee_serializable_model_get_seqnum_real; - klass->set_seqnum = dee_serializable_model_set_seqnum_real; - klass->inc_seqnum = dee_serializable_model_inc_seqnum_real; - - /* Add private data */ - g_type_class_add_private (obj_class, sizeof (DeeSerializableModelPrivate)); -} - -static void -dee_serializable_model_init (DeeSerializableModel *model) -{ - DeeSerializableModelPrivate *priv; - - priv = model->priv = DEE_SERIALIZABLE_MODEL_GET_PRIVATE (model); - - priv->seqnum = 0; - - priv->n_columns = 0; - priv->column_schemas = NULL; - - -} - -static guint64 -dee_serializable_model_get_seqnum_real (DeeModel *self) -{ - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), 0); - - return DEE_SERIALIZABLE_MODEL (self)->priv->seqnum; -} - -guint64 -dee_serializable_model_get_seqnum (DeeModel *self) -{ - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), 0); - - return DEE_SERIALIZABLE_MODEL_GET_CLASS (self)->get_seqnum (self); -} - -static void -dee_serializable_model_set_seqnum_real (DeeModel *self, - guint64 seqnum) -{ - g_return_if_fail (DEE_IS_SERIALIZABLE_MODEL (self)); - - DEE_SERIALIZABLE_MODEL (self)->priv->seqnum = seqnum; -} - -void -dee_serializable_model_set_seqnum (DeeModel *self, - guint64 seqnum) -{ - g_return_if_fail (DEE_IS_SERIALIZABLE_MODEL (self)); - - DEE_SERIALIZABLE_MODEL_GET_CLASS (self)->set_seqnum (self, seqnum); -} - -static guint64 -dee_serializable_model_inc_seqnum_real (DeeModel *self) -{ - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), 0); - - return ++DEE_SERIALIZABLE_MODEL (self)->priv->seqnum; -} - -guint64 -dee_serializable_model_inc_seqnum (DeeModel *self) -{ - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), 0); - - return DEE_SERIALIZABLE_MODEL_GET_CLASS (self)->inc_seqnum (self); -} - -/* - * DeeModel API - */ - -static void -dee_serializable_model_set_schema_full (DeeModel *self, - const gchar* const *column_schemas, - guint num_columns) -{ - DeeSerializableModelPrivate *priv; - gchar **column_schemas_copy; - guint i; - - g_return_if_fail (DEE_IS_SERIALIZABLE_MODEL (self)); - g_return_if_fail (column_schemas != NULL); - - priv = DEE_SERIALIZABLE_MODEL (self)->priv; - - if (priv->column_schemas != NULL) - { - g_critical ("The DeeModel %p already has a schema", self); - return; - } - - /* Allocate space to store the column schemas. We NULL terminate it - * in order to play well with g_strfreev() */ - column_schemas_copy = g_new0 (gchar*, num_columns + 1); - - /* Validate the type strings and copy the schema for our selves */ - for (i = 0; i < num_columns; i++) - { - if (!g_variant_type_string_is_valid (column_schemas[i])) - { - g_critical ("When setting schema for DeeModel %p: '%s' is not a " - "valid type string", self, column_schemas[i]); - return; - } - column_schemas_copy[i] = g_strdup (column_schemas[i]); - } - - /* Register the validated types as our column types */ - priv->column_schemas = column_schemas_copy; // steal - priv->n_columns = num_columns; - -#ifdef ENABLE_TRACE_LOG - gchar* schema = g_strjoinv (", ", priv->column_schemas); - trace_object (self, "Set schema: (%s)", schema); - g_free (schema); -#endif -} - -static const gchar* const* -dee_serializable_model_get_schema (DeeModel *self, - guint *n_columns) -{ - DeeSerializableModelPrivate *priv; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), NULL); - - priv = DEE_SERIALIZABLE_MODEL (self)->priv; - - if (n_columns != NULL) - *n_columns = priv->n_columns; - - return (const gchar**) priv->column_schemas; -} - -static const gchar* -dee_serializable_model_get_column_schema (DeeModel *self, - guint column) -{ - DeeSerializableModelPrivate *priv; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), NULL); - - priv = DEE_SERIALIZABLE_MODEL (self)->priv; - g_return_val_if_fail (column < priv->n_columns, NULL); - - return priv->column_schemas[column]; -} - -static guint -dee_serializable_model_get_n_columns (DeeModel *self) -{ - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), 0); - - return DEE_SERIALIZABLE_MODEL (self)->priv->n_columns; -} - -static guint -dee_serializable_model_get_n_rows (DeeModel *self) -{ - DeeModelIter *iter; - guint count; - - count = 0; - iter = dee_model_get_first_iter (self); - while (!dee_model_is_last (self, iter)) - { - iter = dee_model_next (self, iter); - count++; - } - - return count; -} - -static void -dee_serializable_model_clear (DeeModel *self) -{ - DeeModelIter *iter; - - g_return_if_fail (DEE_IS_SERIALIZABLE_MODEL (self)); - - iter = dee_model_get_first_iter (self); - - while (!dee_model_is_last (self, iter)) - { - dee_model_remove (self, iter); - - iter = dee_model_get_first_iter (self); - } -} - -static DeeModelIter* -dee_serializable_model_prepend_row (DeeModel *self, - GVariant **row_members) -{ - g_critical ("%s not implemented", G_STRFUNC); - return NULL; -} - -static DeeModelIter* -dee_serializable_model_append_row (DeeModel *self, - GVariant **row_members) -{ - g_critical ("%s not implemented", G_STRFUNC); - return NULL; -} - -static DeeModelIter* -dee_serializable_model_insert_row (DeeModel *self, - guint pos, - GVariant **row_members) -{ - DeeModelIter *iter; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), 0); - - if (pos > 0) - { - iter = dee_model_get_iter_at_row (self, pos); - return dee_model_insert_row_before (self, iter, row_members); - } - else if (pos == 0) - return dee_model_prepend_row (self, row_members); - else - return dee_model_append_row (self, row_members); -} - -static DeeModelIter* -dee_serializable_model_insert_row_before (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members) -{ - g_critical ("%s not implemented", G_STRFUNC); - return NULL; -} - -static void -dee_serializable_model_remove (DeeModel *self, - DeeModelIter *iter_) -{ - g_critical ("%s not implemented", G_STRFUNC); -} - -static void -dee_serializable_model_set_value (DeeModel *self, - DeeModelIter *iter, - guint column, - GVariant *value) -{ - g_critical ("%s not implemented", G_STRFUNC); -} - -static void -dee_serializable_model_set_row (DeeModel *self, - DeeModelIter *iter, - GVariant **row_members) -{ - g_critical ("%s not implemented", G_STRFUNC); -} - -static GVariant* -dee_serializable_model_get_value (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - g_critical ("%s not implemented", G_STRFUNC); - - return NULL; -} - -static gboolean -dee_serializable_model_get_bool (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - GVariant *value; - gboolean b; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), FALSE); - - value = dee_model_get_value (self, iter, column); - - if (G_UNLIKELY (value == NULL)) - { - g_critical ("Failed to retrieve bool from row %u column %u in %s@%p", - dee_model_get_position (self, iter), column, - G_OBJECT_TYPE_NAME (self), self); - return FALSE; - } - - b = g_variant_get_boolean (value); - g_variant_unref (value); - - return b; -} - -static guchar -dee_serializable_model_get_uchar (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - GVariant *value; - guchar u; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), '\0'); - - value = dee_model_get_value (self, iter, column); - - if (G_UNLIKELY (value == NULL)) - { - g_critical ("Failed to retrieve uchar from row %u column %u in %s@%p", - dee_model_get_position (self, iter), column, - G_OBJECT_TYPE_NAME (self), self); - return '\0'; - } - - u = g_variant_get_byte(value); - g_variant_unref (value); - - return u; -} - -static gint32 -dee_serializable_model_get_int32 (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - GVariant *value; - gint32 i; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), 0); - - value = dee_model_get_value (self, iter, column); - - if (G_UNLIKELY (value == NULL)) - { - g_critical ("Failed to retrieve int64 from row %u column %u in %s@%p", - dee_model_get_position (self, iter), column, - G_OBJECT_TYPE_NAME (self), self); - return 0; - } - - i = g_variant_get_int32 (value); - g_variant_unref (value); - - return i; -} - -static guint32 -dee_serializable_model_get_uint32 (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - GVariant *value; - guint32 u; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), 0); - - value = dee_model_get_value (self, iter, column); - - if (G_UNLIKELY (value == NULL)) - { - g_critical ("Failed to retrieve uint32 from row %u column %u in %s@%p", - dee_model_get_position (self, iter), column, - G_OBJECT_TYPE_NAME (self), self); - return 0; - } - - u = g_variant_get_uint32 (value); - g_variant_unref (value); - - return u; -} - - -static gint64 -dee_serializable_model_get_int64 (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - GVariant *value; - gint64 i; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), - G_GINT64_CONSTANT (0)); - - value = dee_model_get_value (self, iter, column); - - if (G_UNLIKELY (value == NULL)) - { - g_critical ("Failed to retrieve int64 from row %u column %u in %s@%p", - dee_model_get_position (self, iter), column, - G_OBJECT_TYPE_NAME (self), self); - return G_GINT64_CONSTANT (0); - } - - i = g_variant_get_int64 (value); - g_variant_unref (value); - - return i; -} - - -static guint64 -dee_serializable_model_get_uint64 (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - GVariant *value; - guint64 u; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), - G_GUINT64_CONSTANT (0)); - - value = dee_model_get_value (self, iter, column); - - if (G_UNLIKELY (value == NULL)) - { - g_critical ("Failed to retrieve uint64 from row %u column %u in %s@%p", - dee_model_get_position (self, iter), column, - G_OBJECT_TYPE_NAME (self), self); - return G_GUINT64_CONSTANT (0); - } - - u = g_variant_get_uint64 (value); - g_variant_unref (value); - - return u; -} - -static gdouble -dee_serializable_model_get_double (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - GVariant *value; - gdouble d; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), 0); - - value = dee_model_get_value (self, iter, column); - - if (G_UNLIKELY (value == NULL)) - { - g_critical ("Failed to retrieve double from row %u column %u in %s@%p", - dee_model_get_position (self, iter), column, - G_OBJECT_TYPE_NAME (self), self); - return 0; - } - - d = g_variant_get_double (value); - g_variant_unref (value); - - return d; -} - -static const gchar* -dee_serializable_model_get_string (DeeModel *self, - DeeModelIter *iter, - guint column) -{ - GVariant *value; - const gchar *s; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), NULL); - - value = dee_model_get_value (self, iter, column); - - if (G_UNLIKELY (value == NULL)) - { - g_critical ("Failed to retrieve string from row %u column %u in %s@%p", - dee_model_get_position (self, iter), column, - G_OBJECT_TYPE_NAME (self), self); - return NULL; - } - - s = g_variant_get_string (value, NULL); - g_variant_unref (value); - - return s; -} - -static DeeModelIter* -dee_serializable_model_get_first_iter (DeeModel *self) -{ - g_critical ("%s not implemented", G_STRFUNC); - return NULL; -} - -static DeeModelIter* -dee_serializable_model_get_last_iter (DeeModel *self) -{ - DeeModelIter *iter; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), NULL); - - iter = dee_model_get_first_iter (self); - while (!dee_model_is_last (self, iter)) - iter = dee_model_next (self, iter); - - return iter; -} - -static DeeModelIter* -dee_serializable_model_get_iter_at_row (DeeModel *self, - guint row) -{ - DeeModelIter *iter; - guint pos; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), NULL); - - pos = 0; - iter = dee_model_get_first_iter (self); - while (!dee_model_is_last (self, iter) && pos < row) - iter = dee_model_next (self, iter); - pos++; - - if (dee_model_is_last (self, iter)) - { - g_critical ("Index %u is out of bounds in model of size %u", - row, pos); - } - - return iter; -} - -static DeeModelIter* -dee_serializable_model_next (DeeModel *self, - DeeModelIter *iter) -{ - g_critical ("%s not implemented", G_STRFUNC); - return NULL; -} - -static DeeModelIter* -dee_serializable_model_prev (DeeModel *self, - DeeModelIter *iter) -{ - g_critical ("%s not implemented", G_STRFUNC); - return NULL; -} - -static gboolean -dee_serializable_model_is_first (DeeModel *self, - DeeModelIter *iter) -{ - DeeModelIter *first; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), FALSE); - - first = dee_model_get_first_iter (self); - return first == iter; -} - -static gboolean -dee_serializable_model_is_last (DeeModel *self, - DeeModelIter *iter) -{ - DeeModelIter *last; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), FALSE); - - last = dee_model_get_last_iter (self); - return last == iter; -} - -static guint -dee_serializable_model_get_position (DeeModel *self, - DeeModelIter *iter) -{ - DeeModelIter *_iter; - guint pos; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), 0); - - pos = 0; - _iter = dee_model_get_first_iter (self); - while (!dee_model_is_last (self, iter) && iter != _iter) - _iter = dee_model_next (self, _iter); - pos++; - - if (iter == _iter) - return pos; - else - { - g_critical ("Can not find position of unknown iter %p", iter); - return -1; - } -} - -static DeeModelTag* -dee_serializable_model_register_tag (DeeModel *self, - GDestroyNotify tag_destroy) -{ - g_critical ("%s not implemented", G_STRFUNC); - return NULL; -} - -static gpointer -dee_serializable_model_get_tag (DeeModel *self, - DeeModelIter *iter, - DeeModelTag *tag) -{ - g_critical ("%s not implemented", G_STRFUNC); - return NULL; -} - -static void -dee_serializable_model_set_tag (DeeModel *self, - DeeModelIter *iter, - DeeModelTag *tag, - gpointer value) -{ - g_critical ("%s not implemented", G_STRFUNC); -} - -/* Build a '(sasaavauay(tt))' suitable for sending in a Clone response */ -static GVariant* -dee_serializable_model_serialize (DeeSerializable *self) -{ - DeeModel *_self; - GVariantBuilder aav, clone; - GVariant *val, *tt, *schema; - DeeModelIter *iter; - guint i, j, n_columns; - guint64 last_seqnum; - - g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), FALSE); - - trace_object (self, "Building clone"); - - _self = DEE_MODEL (self); - n_columns = dee_model_get_n_columns (_self); - - g_variant_builder_init (&aav, G_VARIANT_TYPE ("aav")); - - /* Clone the rows */ - i = 0; - iter = dee_model_get_first_iter (_self); - while (!dee_model_is_last (_self, iter)) - { - g_variant_builder_open (&aav, G_VARIANT_TYPE ("av")); - for (j = 0; j < n_columns; j++) - { - val = dee_model_get_value (_self, iter, j); - g_variant_builder_add_value (&aav, g_variant_new_variant (val)); - g_variant_unref (val); - } - g_variant_builder_close (&aav); - - iter = dee_model_next (_self, iter); - i++; - } - - /* Collect the schema */ - schema = g_variant_new_strv (dee_model_get_schema(_self, NULL), -1); - - /* Collect the seqnum */ - last_seqnum = dee_serializable_model_get_seqnum (_self); - tt = g_variant_new ("(tt)", last_seqnum - i, last_seqnum); - - /* Build the final clone */ - g_variant_builder_init (&clone, G_VARIANT_TYPE ("(asaav(tt))")); - g_variant_builder_add_value (&clone, schema); - g_variant_builder_add_value (&clone, g_variant_builder_end (&aav)); - g_variant_builder_add_value (&clone, tt); - - trace_object (self, "Serialized with %i rows", dee_model_get_n_rows (_self)); - - return g_variant_builder_end (&clone); -} - -static GObject* -dee_serializable_model_parse_serialized (GVariant *data) -{ - DeeModel *model; - GVariant *schemav, *seqnumsv, *col; - GVariantIter *row_iter, *col_iter; - GVariant **row; - const gchar **schemas; - gsize n_cols, i, j; - guint64 seqnum_start, seqnum_end; - static GType default_model_type = G_TYPE_INVALID; - - if (default_model_type == G_TYPE_INVALID) - { - default_model_type = g_type_from_name ("DeeSequenceModel"); - if (default_model_type == 0) - { - g_critical ("Unable to look up default DeeModel type, DeeSequenceModel, for deserialization"); - return NULL; - } - } - - g_variant_get (data, "(@asaav@(tt))", &schemav, &row_iter, &seqnumsv); - schemas = g_variant_get_strv (schemav, &n_cols); - g_variant_get (seqnumsv, "(tt)", &seqnum_start, &seqnum_end); - - model = DEE_MODEL (g_object_new (default_model_type, NULL)); - dee_model_set_schema_full (model, schemas, n_cols); - dee_serializable_model_set_seqnum (model, seqnum_start); - - /* Note: The 'row' variable is stack allocated. No need to free it */ - row = g_alloca (n_cols * sizeof (GVariant *)); - - i = 0; - while (g_variant_iter_next (row_iter, "av", &col_iter)) - { - if (g_variant_iter_n_children (col_iter) != n_cols) - { - g_warning ("Row %"G_GSIZE_FORMAT" of serialized DeeSerializableModel " - "data has illegal length %"G_GSIZE_FORMAT". Expected %" - G_GSIZE_FORMAT, i, g_variant_iter_n_children (col_iter), - n_cols); - /* Just skip this row - parsers for DeeSerializable should - * generally never return NULL */ - continue; - } - - j = 0; - while (g_variant_iter_loop (col_iter, "v", &col)) - { - row[j] = g_variant_ref (col); - j++; - } - - dee_model_append_row (model, row); - - for (j = 0; j < n_cols; j++) - { - g_variant_unref (row[j]); - } - - i++; - g_variant_iter_free (col_iter); - } - g_variant_iter_free (row_iter); - - g_variant_unref (schemav); - g_variant_unref (seqnumsv); - g_free (schemas); - - return (GObject *) model; -} - -static void -dee_serializable_model_model_iface_init (DeeModelIface *iface) -{ - iface->set_schema_full = dee_serializable_model_set_schema_full; - iface->get_schema = dee_serializable_model_get_schema; - iface->get_column_schema = dee_serializable_model_get_column_schema; - iface->get_n_columns = dee_serializable_model_get_n_columns; - iface->get_n_rows = dee_serializable_model_get_n_rows; - iface->append_row = dee_serializable_model_append_row; - iface->prepend_row = dee_serializable_model_prepend_row; - iface->insert_row = dee_serializable_model_insert_row; - iface->insert_row_before = dee_serializable_model_insert_row_before; - iface->remove = dee_serializable_model_remove; - iface->clear = dee_serializable_model_clear; - iface->set_value = dee_serializable_model_set_value; - iface->set_row = dee_serializable_model_set_row; - iface->get_value = dee_serializable_model_get_value; - iface->get_first_iter = dee_serializable_model_get_first_iter; - iface->get_last_iter = dee_serializable_model_get_last_iter; - iface->get_iter_at_row = dee_serializable_model_get_iter_at_row; - iface->get_bool = dee_serializable_model_get_bool; - iface->get_uchar = dee_serializable_model_get_uchar; - iface->get_int32 = dee_serializable_model_get_int32; - iface->get_uint32 = dee_serializable_model_get_uint32; - iface->get_int64 = dee_serializable_model_get_int64; - iface->get_uint64 = dee_serializable_model_get_uint64; - iface->get_double = dee_serializable_model_get_double; - iface->get_string = dee_serializable_model_get_string; - iface->next = dee_serializable_model_next; - iface->prev = dee_serializable_model_prev; - iface->is_first = dee_serializable_model_is_first; - iface->is_last = dee_serializable_model_is_last; - iface->get_position = dee_serializable_model_get_position; - iface->register_tag = dee_serializable_model_register_tag; - iface->get_tag = dee_serializable_model_get_tag; - iface->set_tag = dee_serializable_model_set_tag; -} - -static void -dee_serializable_model_serializable_iface_init (DeeSerializableIface *iface) -{ - iface->serialize = dee_serializable_model_serialize; - - dee_serializable_register_parser (DEE_TYPE_SERIALIZABLE_MODEL, - G_VARIANT_TYPE ("(asaav(tt))"), - dee_serializable_model_parse_serialized); -} diff -Nru dee-0.5.22/dee/dee-serializable-model.h dee-1.0.0/dee/dee-serializable-model.h --- dee-0.5.22/dee/dee-serializable-model.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-serializable-model.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,105 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -#if !defined (_DEE_H_INSIDE) && !defined (DEE_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef _HAVE_DEE_SERIALIZABLE_MODEL_H -#define _HAVE_DEE_SERIALIZABLE_MODEL_H - -#include -#include - -#include - -G_BEGIN_DECLS - -#define DEE_TYPE_SERIALIZABLE_MODEL (dee_serializable_model_get_type ()) - -#define DEE_SERIALIZABLE_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModel)) - -#define DEE_SERIALIZABLE_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \ - DEE_TYPE_SERIALIZABLE_MODEL, DeeSerializableModelClass)) - -#define DEE_IS_SERIALIZABLE_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - DEE_TYPE_SERIALIZABLE_MODEL)) - -#define DEE_IS_SERIALIZABLE_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - DEE_TYPE_SERIALIZABLE_MODEL)) - -#define DEE_SERIALIZABLE_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - DBUS_TYPE_ABSTRACT_MODEL, DeeSerializableModelClass)) - -typedef struct _DeeSerializableModel DeeSerializableModel; -typedef struct _DeeSerializableModelClass DeeSerializableModelClass; -typedef struct _DeeSerializableModelPrivate DeeSerializableModelPrivate; - -/** - * DeeSerializableModel: - * - * All fields in the DeeSerializableModel structure are private and should never be - * accessed directly - */ -struct _DeeSerializableModel -{ - /*< private >*/ - GObject parent; - - DeeSerializableModelPrivate *priv; -}; - -struct _DeeSerializableModelClass -{ - /*< private >*/ - GObjectClass parent_class; - - /*< vatable >*/ - guint64 (* get_seqnum) (DeeModel *self); - void (* set_seqnum) (DeeModel *self, - guint64 seqnum); - guint64 (* inc_seqnum) (DeeModel *self); - - /*< private >*/ - void (*_dee_serializable_model_1) (void); - void (*_dee_serializable_model_2) (void); - void (*_dee_serializable_model_3) (void); - void (*_dee_serializable_model_4) (void); -}; - -/** - * dee_serializable_model_get_type: - * - * The GType of #DeeSerializableModel - * - * Return value: the #GType of #DeeSerializableModel - **/ -GType dee_serializable_model_get_type (void); - -guint64 dee_serializable_model_get_seqnum (DeeModel *self); - -void dee_serializable_model_set_seqnum (DeeModel *self, - guint64 seqnum); - -guint64 dee_serializable_model_inc_seqnum (DeeModel *self); - -G_END_DECLS - -#endif /* _HAVE_DEE_SERIALIZABLE_MODEL_H */ diff -Nru dee-0.5.22/dee/dee-shared-model.c dee-1.0.0/dee/dee-shared-model.c --- dee-0.5.22/dee/dee-shared-model.c 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-shared-model.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1568 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by: - * Mikkel Kamstrup Erlandsen - * Neil Jagdish Patel - */ - -/** - * SECTION:dee-shared-model - * @short_description: A #DeeModel that can synchronize with other - * #DeeSharedModel objects across D-Bus. - * @include: dee.h - * - * #DeeSharedModel is created with a name (usually namespaced and unique to - * your program(s)) which is used to locate other #DeeSharedModels created - * with the same name through D-Bus, and will keep synchronized with them. - * - * This allows to you build MVC programs with a sane model API, but have the - * controller (or multiple views) in a separate process. - * - * Before you modify the contents of the shared model it is important that - * you wait for the model to synchronize with its peers. The normal way to do - * this is to wait for the "notify::synchronized" signal. - * - */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include - -#include "dee-peer.h" -#include "dee-model.h" -#include "dee-proxy-model.h" -#include "dee-sequence-model.h" -#include "dee-shared-model.h" -#include "dee-serializable-model.h" -#include "dee-serializable.h" -#include "dee-marshal.h" -#include "trace-log.h" -#include "com.canonical.Dee.Model-xml.h" - -static void dee_shared_model_serializable_iface_init (DeeSerializableIface *iface); -G_DEFINE_TYPE_WITH_CODE (DeeSharedModel, - dee_shared_model, - DEE_TYPE_PROXY_MODEL, - G_IMPLEMENT_INTERFACE (DEE_TYPE_SERIALIZABLE, - dee_shared_model_serializable_iface_init)); - -#define DEE_SHARED_MODEL_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_SHARED_MODEL, DeeSharedModelPrivate)) - -#define DBUS_TYPE_G_VALUE_ARRAY_ARRAY (dbus_g_type_get_collection ("GPtrArray", dbus_g_type_get_collection("GPtrArray", G_TYPE_VALUE))) - -/** - * DeeSharedModelPrivate: - * - * Ignore this structure. - **/ -struct _DeeSharedModelPrivate -{ - DeePeer *swarm; - GDBusConnection *connection; - gchar *model_path; - - /* Buffer of DeeSharedModelRevisions that we keep in order to batch - * our DBus signals. The invariant is that all buffered revisions - * are of the same type */ - GSList *revision_queue; - guint revision_queue_timeout_id; - guint dbus_signal_handler; - guint model_registration_id; - gulong swarm_leader_handler; - - gboolean synchronized; - gboolean found_first_peer; - gboolean suppress_remote_signals; -}; - -typedef struct -{ - /* The revision type is: ROWS_ADDED, ROWS_REMOVED, or ROWS_CHANGED */ - guchar change_type; - guint32 pos; - guint64 seqnum; - GVariant **row; - DeeModel *model; -} DeeSharedModelRevision; - -/* Globals */ -static GQuark dee_shared_model_error_quark = 0; - -enum -{ - PROP_0, - PROP_PEER, - PROP_SYNCHRONIZED, -}; - -typedef enum -{ - CHANGE_TYPE_ADD = '\x00', - CHANGE_TYPE_REMOVE = '\x01', - CHANGE_TYPE_CHANGE = '\x02', -} ChangeType; - - -enum -{ - /* Public signal */ - READY, - - LAST_SIGNAL -}; - -//static guint32 _signals[LAST_SIGNAL] = { 0 }; - -/* Forwards */ -static void on_bus_connection_acquired (GObject *source_object, - GAsyncResult *res, - gpointer user_data); - -static void commit_transaction (DeeSharedModel *self, - const gchar *sender_name, - GVariant *transaction); - -static void on_clone_received (GObject *source_object, - GAsyncResult *res, - gpointer user_data); - -static void clone_leader (DeeSharedModel *self); - -static void on_dbus_signal_received (GDBusConnection *connection, - const gchar *sender_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *signal_name, - GVariant *parameters, - gpointer user_data); - -static void on_leader_changed (DeeSharedModel *self); - -static DeeSharedModelRevision* - dee_shared_model_revision_new (ChangeType type, - guint32 pos, - guint64 seqnum, - GVariant **row, - DeeModel *model); - -static void dee_shared_model_revision_free (DeeSharedModelRevision *rev); - -static guint flush_revision_queue (DeeModel *self); - -static void enqueue_revision (DeeModel *self, - ChangeType type, - guint32 pos, - guint64 seqnum, - GVariant **row); - -static void on_self_row_added (DeeModel *self, - DeeModelIter *iter); - -static void on_self_row_removed (DeeModel *self, - DeeModelIter *iter); - -static void on_self_row_changed (DeeModel *self, - DeeModelIter *iter); - -static void reset_model (DeeModel *self); - -static void invalidate_peer (DeeSharedModel *self, - const gchar *sender_name); - -static gboolean on_invalidate (DeeSharedModel *self); - - -/* Create a new revision. The revision will own @row */ -static DeeSharedModelRevision* -dee_shared_model_revision_new (ChangeType type, - guint32 pos, - guint64 seqnum, - GVariant **row, - DeeModel *model) -{ - DeeSharedModelRevision *rev; - - g_return_val_if_fail (type != CHANGE_TYPE_REMOVE ? row != NULL : TRUE, NULL); - - // FIXME: Use g_slice instead og g_new - rev = g_slice_new (DeeSharedModelRevision); - rev->change_type = (guchar) type; - rev->pos = pos; - rev->seqnum = seqnum; - rev->row = row; - rev->model = model; - - return rev; -} - -/* Free all resources owned by a revision, and the revision itself */ -static void -dee_shared_model_revision_free (DeeSharedModelRevision *rev) -{ - guint n_cols, i; - gsize row_slice_size; - - g_return_if_fail (rev != NULL); - - n_cols = dee_model_get_n_columns (rev->model); - row_slice_size = n_cols * sizeof(gpointer); - - for (i = 0; i < n_cols && rev->row != NULL; i++) - g_variant_unref (rev->row[i]); - - g_slice_free1 (row_slice_size, rev->row); - g_slice_free (DeeSharedModelRevision, rev); -} - -/* Emit all queued revisions in one signal on the bus. - * Clears the revision_queue_timeout if there is one set. - * Returns the number of flushed revisions */ -static guint -flush_revision_queue (DeeModel *self) -{ - DeeSharedModelPrivate *priv; - DeeSharedModelRevision *rev; - GError *error; - GSList *iter; - GVariant *schema; - GVariantBuilder aav, au, ay, transaction; - guint64 seqnum_begin = 0, seqnum_end = 0; - guint n_cols, i; - - g_return_val_if_fail (DEE_IS_SHARED_MODEL (self), FALSE); - priv = DEE_SHARED_MODEL (self)->priv; - - /* If we are not connected yet, this should be a no-op. - * There are two cases to consider: - * 1) We are building a model before we are even connected. - * This only makes sense if we are sure to become leaders, - * we'll assume the programmer knows this - * 2) We are resetting the model - no problem - */ - if (priv->connection == NULL) - { - trace_object (self, "Flushing revision queue, without a connection. " - "This will blow up unless you are the leader model"); - g_slist_foreach (priv->revision_queue, - (GFunc) dee_shared_model_revision_free, - NULL); - g_slist_free (priv->revision_queue); - priv->revision_queue = NULL; - } - - /* Clear the current timeout if we have one running */ - if (priv->revision_queue_timeout_id != 0) - { - g_source_remove (priv->revision_queue_timeout_id); - priv->revision_queue_timeout_id = 0; - } - - /* If we don't have anything queued up, just return. It's assumed beyond - * this point that it is non-empty */ - if (priv->revision_queue == NULL) - return 0; - - /* Since we always prepend to the queue we need to reverse it */ - priv->revision_queue = g_slist_reverse (priv->revision_queue); - - n_cols = dee_model_get_n_columns (self); - - /* We know that the revision_queue is non-empty at this point. We peek the - * first element and assume that the last seqnum before this transaction - * started was the seqnum in the first revision - 1. */ - seqnum_end = ((DeeSharedModelRevision *) priv->revision_queue->data)->seqnum - 1; - seqnum_begin = seqnum_end; - - g_variant_builder_init (&aav, G_VARIANT_TYPE ("aav")); - g_variant_builder_init (&au, G_VARIANT_TYPE ("au")); - g_variant_builder_init (&ay, G_VARIANT_TYPE ("ay")); - for (iter = priv->revision_queue; iter; iter = iter->next) - { - rev = (DeeSharedModelRevision*) iter->data; - - /* Sanity check our seqnums */ - if (rev->seqnum != seqnum_end + 1) - { - g_critical ("Internal accounting error of DeeSharedModel@%p. Seqnums " - "not sequential: " - "%"G_GUINT64_FORMAT" != %"G_GUINT64_FORMAT" + 1", - self, rev->seqnum, seqnum_end); - return 0; - } - seqnum_end = rev->seqnum; - - if ((rev->change_type == CHANGE_TYPE_REMOVE) != (rev->row == NULL)) - { - g_critical ("Internal accounting error is DeeSharedModel@%p. " - "Transaction row payload must be empty iff the change" - "type is is a removal", self); - } - - /* Build the variants for this change */ - g_variant_builder_open (&aav, G_VARIANT_TYPE ("av")); - for (i = 0; i < n_cols && rev->change_type != CHANGE_TYPE_REMOVE; i++) - { - g_variant_builder_add_value (&aav, - g_variant_new_variant (rev->row[i])); - } - g_variant_builder_close (&aav); - g_variant_builder_add (&au, "u", rev->pos); - g_variant_builder_add (&ay, "y", (guchar) rev->change_type); - - /* Free the revisions while we are traversing the linked list anyway */ - dee_shared_model_revision_free (rev); - } - - /* Collect the schema */ - schema = g_variant_new_strv (dee_model_get_schema(self, NULL), -1); - - /* Build the Commit message */ - g_variant_builder_init (&transaction, G_VARIANT_TYPE ("(sasaavauay(tt))")); - g_variant_builder_add (&transaction, "s", dee_peer_get_swarm_name (priv->swarm)); - g_variant_builder_add_value (&transaction, schema); - g_variant_builder_add_value (&transaction, g_variant_builder_end (&aav)); - g_variant_builder_add_value (&transaction, g_variant_builder_end (&au)); - g_variant_builder_add_value (&transaction, g_variant_builder_end (&ay)); - g_variant_builder_add_value (&transaction, - g_variant_new ("(tt)", seqnum_begin, seqnum_end)); - - /* Throw a Commit signal on the bus */ - error = NULL; - g_dbus_connection_emit_signal(priv->connection, - NULL, - priv->model_path, - "com.canonical.Dee.Model", - "Commit", - g_variant_builder_end (&transaction), - &error); - - if (error != NULL) - { - g_critical ("Failed to emit DBus signal " - "com.canonical.Dee.Model.Commit: %s", error->message); - g_error_free (error); - } - - trace_object (self, "Flushed %"G_GUINT64_FORMAT" revisions", - seqnum_end - seqnum_begin); - - /* Free and reset the queue. Note that we freed the individual revisions while - * we constructed the Commit message */ - g_slist_free (priv->revision_queue); - priv->revision_queue = NULL; - - return seqnum_end - seqnum_begin; // Very theoretical overflow possible here... -} - -/* Prepare a revision to be emitted as a signal on the bus. The revisions - * are queued up so that we can emit them in batches. Steals the ref on the - * row array and assumes the refs on the variants as well */ -static void -enqueue_revision (DeeModel *self, - ChangeType type, - guint32 pos, - guint64 seqnum, - GVariant **row) -{ - DeeSharedModelPrivate *priv; - DeeSharedModelRevision *rev; - - g_return_if_fail (DEE_IS_SHARED_MODEL (self)); - priv = DEE_SHARED_MODEL (self)->priv; - - rev = dee_shared_model_revision_new (type, pos, seqnum, row, self); - - priv->revision_queue = g_slist_prepend (priv->revision_queue, rev); - - /* Flush the revision queue once in idle */ - if (priv->revision_queue_timeout_id == 0) - { - priv->revision_queue_timeout_id = g_idle_add ((GSourceFunc)flush_revision_queue, - self); - } -} - -/* GObject stuff */ -static void -dee_shared_model_finalize (GObject *object) -{ - DeeSharedModelPrivate *priv = DEE_SHARED_MODEL (object)->priv; - - /* Flush any pending revisions */ - if (priv->revision_queue != NULL) - { - flush_revision_queue (DEE_MODEL(object)); - priv->revision_queue = NULL; - } - - if (priv->model_registration_id != 0 && priv->connection != NULL) - { - g_dbus_connection_unregister_object (priv->connection, - priv->model_registration_id); - priv->model_registration_id = 0; - } - if (priv->dbus_signal_handler != 0 && priv->connection != NULL) - { - g_dbus_connection_signal_unsubscribe(priv->connection, - priv->dbus_signal_handler); - priv->dbus_signal_handler = 0; - } - if (priv->swarm_leader_handler != 0) - { - g_signal_handler_disconnect (priv->swarm, priv->swarm_leader_handler); - priv->swarm_leader_handler = 0; - } - if (priv->model_path) - { - g_free (priv->model_path); - } - if (priv->connection) - { - g_object_unref (priv->connection); - priv->connection = NULL; - } - if (priv->swarm) - { - g_object_unref (priv->swarm); - priv->swarm = NULL; - } - - G_OBJECT_CLASS (dee_shared_model_parent_class)->finalize (object); -} - -static void -dee_shared_model_set_property (GObject *object, - guint id, - const GValue *value, - GParamSpec *pspec) -{ - DeeSharedModelPrivate *priv; - - priv = DEE_SHARED_MODEL (object)->priv; - - switch (id) - { - case PROP_PEER: - /* Steal ref to peer */ - if (priv->swarm != NULL) - g_object_unref (priv->swarm); - priv->swarm = g_value_get_object (value); - break; - case PROP_SYNCHRONIZED: - g_critical ("Trying to set read only property DeeSharedModel:synchronized"); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, id, pspec); - break; - } -} - -static void -dee_shared_model_get_property (GObject *object, - guint id, - GValue *value, - GParamSpec *pspec) -{ - DeeSharedModelPrivate *priv; - - priv = DEE_SHARED_MODEL (object)->priv; - - switch (id) - { - case PROP_PEER: - g_value_set_object (value, priv->swarm); - break; - case PROP_SYNCHRONIZED: - g_value_set_boolean (value, priv->synchronized); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, id, pspec); - break; - } -} - -static void -dee_shared_model_constructed (GObject *self) -{ - DeeSharedModel *_self; - DeeSharedModelPrivate *priv; - gchar *dummy; - - _self = DEE_SHARED_MODEL (self); - priv = _self->priv; - - if (priv->swarm == NULL) - { - g_critical ("You must create a DeeSharedModel with a DeePeer " - "in the 'peer' property"); - } - - /* Create a canonical object path from the well known swarm name */ - dummy = g_strdup (dee_peer_get_swarm_name (priv->swarm)); - priv->model_path = g_strconcat ("/com/canonical/dee/model/", - g_strdelimit (dummy, ".", '/'), - NULL); - g_free (dummy); - - priv->swarm_leader_handler = g_signal_connect_swapped(priv->swarm, - "notify::swarm-leader", - G_CALLBACK (on_leader_changed), - self); - - /* Connect asynchronously to the bus */ - g_bus_get (G_BUS_TYPE_SESSION, - NULL, - on_bus_connection_acquired, - g_object_ref (self)); // ref to stay alive during async call - - /* GObjectClass has NULL 'constructed' member, but we add this check for - * future robustness if we ever move to another base class */ - if (G_OBJECT_CLASS (dee_shared_model_parent_class)->constructed != NULL) - G_OBJECT_CLASS (dee_shared_model_parent_class)->constructed (self); -} - -static void -dee_shared_model_class_init (DeeSharedModelClass *klass) -{ - GParamSpec *pspec; - GObjectClass *obj_class = G_OBJECT_CLASS (klass); - - obj_class->finalize = dee_shared_model_finalize; - obj_class->set_property = dee_shared_model_set_property; - obj_class->get_property = dee_shared_model_get_property; - obj_class->constructed = dee_shared_model_constructed; - - /** - * DeeSharedModel:peer: (transfer full): - * - * The #DeePeer that this model uses to connect to the swarm - */ - pspec = g_param_spec_object ("peer", "Peer", - "The peer object that monitors the swarm", - DEE_TYPE_PEER, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); - g_object_class_install_property (obj_class, PROP_PEER, pspec); - - /** - * DeeSharedModel:synchronized: - * - * Boolean property defining whether or not the model has synchronized with - * its peers (if any) yet. - * - * You should not modify a #DeeSharedModel that is not synchronized. Before - * modifying the model in any way (except calling dee_model_set_schema()) - * you should wait for it to become synchronized. - */ - pspec = g_param_spec_boolean("synchronized", "Synchronized", - "Whether the model is synchronized with its peers", - FALSE, - G_PARAM_READABLE); - g_object_class_install_property (obj_class, PROP_SYNCHRONIZED, pspec); - - /* Add private data */ - g_type_class_add_private (obj_class, sizeof (DeeSharedModelPrivate)); -} - -static void -dee_shared_model_init (DeeSharedModel *self) -{ - DeeSharedModelPrivate *priv; - - priv = self->priv = DEE_SHARED_MODEL_GET_PRIVATE (self); - - priv->synchronized = FALSE; - priv->swarm = NULL; - priv->model_path = NULL; - - priv->revision_queue = NULL; - priv->revision_queue_timeout_id = 0; - priv->dbus_signal_handler = 0; - priv->model_registration_id = 0; - priv->swarm_leader_handler = 0; - - priv->synchronized = FALSE; - priv->found_first_peer = FALSE; - priv->suppress_remote_signals = FALSE; - - if (!dee_shared_model_error_quark) - dee_shared_model_error_quark = g_quark_from_string ("dbus-model-error"); - - priv->connection = NULL; - - /* Connect to our own signals so we can queue up revisions to be emitted - * on the bus */ - g_signal_connect (self, "row-added", G_CALLBACK (on_self_row_added), NULL); - g_signal_connect (self, "row-removed", G_CALLBACK (on_self_row_removed), NULL); - g_signal_connect (self, "row-changed", G_CALLBACK (on_self_row_changed), NULL); -} - -static void -handle_dbus_method_call (GDBusConnection *connection, - const gchar *sender, - const gchar *object_path, - const gchar *interface_name, - const gchar *method_name, - GVariant *parameters, - GDBusMethodInvocation *invocation, - gpointer user_data) -{ - GVariant *retval; - - g_return_if_fail (DEE_IS_SHARED_MODEL (user_data)); - - if (g_strcmp0 ("Clone", method_name) == 0) - { - /* We return a special error if we have no schema. It's legal for the - * leader to expect the schema from the slaves */ - if (dee_model_get_n_columns (DEE_MODEL (user_data)) == 0) - { - g_dbus_method_invocation_return_dbus_error (invocation, - "com.canonical.Dee.Model.NoSchemaError", - "No schema defined"); - } - else - { - // FIXME: It can be expensive to build the clone. Perhaps thread this? - retval = dee_serializable_serialize(DEE_SERIALIZABLE (user_data)); - g_dbus_method_invocation_return_value (invocation, retval); - } - } - else if (g_strcmp0 ("Invalidate", method_name) == 0) - { - on_invalidate (DEE_SHARED_MODEL (user_data)); - g_dbus_method_invocation_return_value (invocation, NULL); - } - else - { - g_warning ("Unknown DBus method call %s.%s from %s on DeeSharedModel", - interface_name, method_name, sender); - } -} - -static const GDBusInterfaceVTable model_interface_vtable = -{ - handle_dbus_method_call, - NULL, - NULL -}; - -static void -on_bus_connection_acquired (GObject *source_object, - GAsyncResult *res, - gpointer user_data) -{ - DeeSharedModel *self; - DeeSharedModelPrivate *priv; - GError *error; - GDBusNodeInfo *model_introspection_data; - - /* Keep the parsed introspection data of the Model interface around */ - static GDBusInterfaceInfo *model_interface_info = NULL; - - g_return_if_fail (DEE_IS_SHARED_MODEL (user_data)); - - self = DEE_SHARED_MODEL (user_data); - priv = self->priv; - - if (priv->connection) - { - g_critical ("Internal error in DeeSharedModel. " - "DBus connection acquired twice."); - - /* We don't know whether or not to g_object_unref(self) at this point - * since the internal state is messed up. We don't do the unref to try - * and avoid double freeing self */ - - return; - } - - error = NULL; - priv->connection = g_bus_get_finish (res, &error); - - if (error != NULL) - { - g_critical ("DeeSharedModel@%p failed to connect to session bus: %s", - self, error->message); - g_error_free (error); - g_object_unref (self); // held during async call - return; - } - - /* Listen for changes from the peers in the same swarm. - * We do this by matching arg0 with the swarm name */ - priv->dbus_signal_handler = g_dbus_connection_signal_subscribe ( - priv->connection, - NULL, // sender - "com.canonical.Dee.Model", // iface - NULL, // member - NULL, // object path - dee_peer_get_swarm_name (priv->swarm), // arg0 - G_DBUS_SIGNAL_FLAGS_NONE, - on_dbus_signal_received, - self, // user data - NULL); // user data destroy - - /* Load com.canonical.Dee.Model introspection XML on first run */ - if (model_interface_info == NULL) - { - model_introspection_data = g_dbus_node_info_new_for_xml ( - com_canonical_Dee_Model_xml, NULL); - model_interface_info = g_dbus_node_info_lookup_interface ( - model_introspection_data, - "com.canonical.Dee.Model"); - - g_dbus_interface_info_ref (model_interface_info); - g_dbus_node_info_unref (model_introspection_data); - } - - /* Export the model on the bus */ - priv->model_registration_id = - g_dbus_connection_register_object (priv->connection, - priv->model_path, /* object path */ - model_interface_info, - &model_interface_vtable, - self, /* user_data */ - NULL, /* user_data_free_func */ - NULL); /* GError** */ - - /* If we are swarm leaders and we have column type info we are ready by now. - * Otherwise we will be ready when we receive the model clone from the leader - */ - if (dee_peer_is_swarm_leader (priv->swarm)) - { - if (dee_model_get_n_columns (DEE_MODEL (self)) > 0) - { - priv->synchronized = TRUE; - g_object_notify (G_OBJECT (self), "synchronized"); - } - } - else if (dee_peer_get_swarm_leader (priv->swarm) != NULL) - { - /* There is a leader and it's not us. - * Start cloning the model of the leader */ - - clone_leader (self); - } - else - { - // FIXME: There's no known leader - } - - g_object_unref (self); // held self-ref during async call -} - -/* Callback for clone_leader() */ -static void -on_clone_received (GObject *source_object, - GAsyncResult *res, - gpointer user_data) -{ - DeeSharedModel *self; - DeeSharedModelPrivate *priv; - GVariant *transaction; - GError *error; - gchar *dbus_error; - - g_return_if_fail (DEE_IS_SHARED_MODEL (user_data)); - - self = DEE_SHARED_MODEL (user_data); - priv = self->priv; - - error = NULL; - transaction = g_dbus_connection_call_finish (G_DBUS_CONNECTION(source_object), - res, &error); - - if (error != NULL) - { - dbus_error = g_dbus_error_get_remote_error (error); - if (g_strcmp0 (dbus_error, "com.canonical.Dee.Model.NoSchemaError") == 0) - { - trace_object (self, "Got Clone reply from leader, but leader has no schema"); - g_free (dbus_error); - } - else - { - g_critical ("Failed to clone model from leader: %s", error->message); - g_error_free (error); - g_free (dbus_error); - return; - } - } - - /* The transaction will be NULL if we received a com.canonical.Dee.Model.NoSchemaError, - * but in that case we should still consider our selves synchronized */ - if (transaction != NULL) - { - /* We use the swarm name as sender_name here, because DBus passes us the - * unique name of the swarm leader here and we want to indicate in the debug - * messages that the transaction came from the leader */ - commit_transaction (self, - dee_shared_model_get_swarm_name (self), - transaction); - g_variant_unref (transaction); - } - - /* If we where invalidated before, we should be fine now */ - if (!priv->synchronized) - { - priv->synchronized = TRUE; - g_object_notify (G_OBJECT (self), "synchronized"); - } - - g_object_unref (self); // we grabbed a self ref during async call -} - -/* Send a Clone message to the swarm leader */ -static void -clone_leader (DeeSharedModel *self) -{ - DeeSharedModelPrivate *priv; - - g_return_if_fail (DEE_IS_SHARED_MODEL (self)); - g_return_if_fail (dee_peer_get_swarm_leader (self->priv->swarm) != NULL); - g_return_if_fail (self->priv->connection != NULL); - g_return_if_fail (self->priv->revision_queue == NULL); - g_return_if_fail (dee_model_get_n_rows (DEE_MODEL (self)) == 0); - - priv = self->priv; - - trace_object (self, "Cloning leader '%s'", - dee_shared_model_get_swarm_name (self)); - - g_dbus_connection_call(priv->connection, - dee_shared_model_get_swarm_name (self), // name - priv->model_path, // obj path - "com.canonical.Dee.Model", // iface - "Clone", // member - NULL, // args - G_VARIANT_TYPE ("(sasaavauay(tt))"), // ret type - G_DBUS_CALL_FLAGS_NONE, - -1, // timeout - NULL, // cancel - on_clone_received, // cb - g_object_ref (self)); // userdata -} - -static void -on_dbus_signal_received (GDBusConnection *connection, - const gchar *sender_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *signal_name, - GVariant *parameters, - gpointer user_data) -{ - g_return_if_fail (DEE_IS_SHARED_MODEL (user_data)); - - /* Ignore signals from our selves. We may get those because of the way - * we set up the match rules */ - if (g_strcmp0 (sender_name, - g_dbus_connection_get_unique_name (connection)) == 0) - return; - - - if (g_strcmp0 (signal_name, "Commit") == 0) - { - commit_transaction (DEE_SHARED_MODEL (user_data), - sender_name, - parameters); - } - else - g_warning ("Unexpected signal %s.%s from %s", - interface_name, signal_name, sender_name); -} - - -static void -on_leader_changed (DeeSharedModel *self) -{ - DeeSharedModelPrivate *priv; - - priv = self->priv; - - if (dee_shared_model_is_leader (self)) - { - /* The leader is the authoritative data source so if we are not - * synchronized we will now be by very definition */ - if (!priv->synchronized) - { - priv->synchronized = TRUE; - g_object_notify (G_OBJECT (self), "synchronized"); - } - } - else - { - if (!priv->synchronized) - { - clone_leader (self); - } - } -} - -static void -commit_transaction (DeeSharedModel *self, - const gchar *sender_name, - GVariant *transaction) -{ - DeeSharedModelPrivate *priv; - GVariantIter iter; - GVariant *schema, *row, **row_buf, *val, *aav, *au, *ay, *tt; - const gchar **column_schemas; - gsize column_schemas_len; - gchar *swarm_name; - guint64 seqnum_before, seqnum_after, current_seqnum; - guint64 n_rows, n_cols, model_n_rows; - guint32 pos; - guchar change_type; - gint i, j; - - g_return_if_fail (DEE_IS_SHARED_MODEL (self)); - g_return_if_fail (sender_name != NULL); - g_return_if_fail (transaction != NULL); - - g_variant_ref_sink (transaction); - - priv = self->priv; - g_variant_iter_init (&iter, transaction); - - /* The transaction should have signature '(sasaavauay(tt)'. - * Make sure it at least looks right */ - if (g_strcmp0 (g_variant_get_type_string (transaction), "(sasaavauay(tt))") != 0) - { - g_critical ("Unexpected format for Commit message '%s' from %s. " - "Expected '(sasaavauay(tt))'", - g_variant_get_type_string (transaction), sender_name); - g_variant_unref (transaction); - return; - } - - /* Assert that this is a Commit for the right swarm name */ - g_variant_iter_next (&iter, "s", &swarm_name); - if (g_strcmp0 (swarm_name, dee_peer_get_swarm_name (priv->swarm)) != 0) - { - g_critical ("Error in internal message routing. " - "Unexpected swarm name '%s' on Commit from %s." - "Expected '%s'", - swarm_name, sender_name, - dee_peer_get_swarm_name (priv->swarm)); - g_variant_unref (transaction); - return; - } - - /* If the model has no schema then use the one received in the transaction */ - schema = g_variant_iter_next_value (&iter); - n_cols = dee_model_get_n_columns (DEE_MODEL (self)); - if (n_cols == 0) - { - column_schemas = g_variant_get_strv (schema, &column_schemas_len); - if (column_schemas != NULL) - { - n_cols = column_schemas_len; - dee_model_set_schema_full (DEE_MODEL(self), column_schemas, n_cols); - g_free (column_schemas); - } - else - { - g_warning ("Received transaction before the model schema has been set" - " and none received from leader"); - g_variant_unref (transaction); - g_variant_unref (schema); - return; - } - } - g_variant_unref (schema); - - /* Parse the rest of the transaction */ - aav = g_variant_iter_next_value (&iter); - au = g_variant_iter_next_value (&iter); - ay = g_variant_iter_next_value (&iter); - tt = g_variant_iter_next_value (&iter); - - /* Validate that the seqnums are as we expect */ - g_variant_get (tt, "(tt)", &seqnum_before, &seqnum_after); - g_variant_unref (tt); - - /* If this is our first transaction we accept anything, if not the - * incoming seqnums must align with our own records */ - current_seqnum = dee_serializable_model_get_seqnum (DEE_MODEL (self)); - if (current_seqnum != 0 && - current_seqnum != seqnum_before) - { - g_warning ("Transaction from %s is in the %s. Ignoring transaction.", - sender_name, - current_seqnum < seqnum_before ? "future" : "past"); - if (dee_shared_model_is_leader (self)) - { - g_warning ("Invalidating %s", sender_name); - invalidate_peer (self, sender_name); - } - - g_variant_unref (transaction); - g_variant_unref (aav); - g_variant_unref (au); - g_variant_unref (ay); - return; - } - - /* Check that the lengths of all the arrays match up */ - n_rows = g_variant_n_children (aav); - if (n_rows != g_variant_n_children (au)) - { - g_warning ("Commit from %s has illegal position vector", - sender_name); - // FIXME cleanup - } - if (n_rows != g_variant_n_children (ay)) - { - g_warning ("Commit from %s has illegal change type vector", - sender_name); - // FIXME cleanup - } - if (n_rows != (seqnum_after - seqnum_before)) - { - g_warning ("Commit from %s has illegal seqnum count.", - sender_name); - } - - /* Allocate an array on the stack as a temporary row data buffer */ - row_buf = g_alloca (n_cols * sizeof (gpointer)); - - trace_object (self, "Applying transaction of %i rows", n_rows); - - /* Phew. Finally. We're ready to merge the changes */ - priv->suppress_remote_signals = TRUE; - for (i = 0; i < n_rows; i++) /* Begin outer loop */ - { - model_n_rows = dee_model_get_n_rows (DEE_MODEL (self)); - - g_variant_get_child (au, i, "u", &pos); - g_variant_get_child (ay, i, "y", &change_type); - - /* Before parsing the row data we check if it's a remove, - * because in that case we might as well not parse the - * row data at all */ - if (change_type == CHANGE_TYPE_REMOVE) - { - dee_model_remove (DEE_MODEL (self), - dee_model_get_iter_at_row (DEE_MODEL (self), pos)); - model_n_rows--; - continue; - } - - /* It's an Add or Change so parse the row data */ - row = g_variant_get_child_value (aav, i); - - /* Add and Change rows must have the correct number of columns */ - if (g_variant_n_children (row) != n_cols) - { - g_critical ("Commit from %s contains rows of illegal length. " - "The model may have been left in a dirty state", - sender_name); - // FIXME: cleanup - return; - } - - /* Read the row cells into our stack allocated row buffer. - * Note that g_variant_get_child_value() returns a strong ref, - * not a floating one */ - for (j = 0; j < n_cols; j++) - { - val = g_variant_get_child_value (row, j); // val is now a 'v' - row_buf[j] = g_variant_get_child_value (val, 0); // unbox the 'v' - g_variant_unref (val); - } - - if (change_type == CHANGE_TYPE_ADD) - { - if (pos == 0) - dee_model_prepend_row (DEE_MODEL (self), row_buf); - else if (pos >= model_n_rows) - dee_model_append_row (DEE_MODEL (self), row_buf); - else if (pos < model_n_rows) - dee_model_insert_row (DEE_MODEL (self), pos, row_buf); - - } - else if (change_type == CHANGE_TYPE_CHANGE) - { - dee_model_set_row (DEE_MODEL (self), - dee_model_get_iter_at_row (DEE_MODEL (self), pos), - row_buf); - } - else - { - g_critical ("Unknown change type %i from %s. The model may have " - "been left in a dirty state", change_type, sender_name); - // FIXME: continue looping or bail out? - } - - /* Free the variants in the row_buf. */ - for (j = 0; j < n_cols; j++) - g_variant_unref (row_buf[j]); - - g_variant_unref (row); - } /* End outer loop */ - priv->suppress_remote_signals = FALSE; - - g_variant_unref (transaction); - g_variant_unref (aav); - g_variant_unref (au); - g_variant_unref (ay); - - dee_serializable_model_set_seqnum (DEE_MODEL (self), seqnum_after); -} - -static void -on_self_row_added (DeeModel *self, DeeModelIter *iter) -{ - DeeSharedModelPrivate *priv; - gsize row_slice_size; - guint32 pos; - GVariant **row; - - priv = DEE_SHARED_MODEL (self)->priv; - - if (!priv->suppress_remote_signals) - { - row_slice_size = dee_model_get_n_columns(self) * sizeof (gpointer); - row = g_slice_alloc (row_slice_size); - - pos = dee_model_get_position (self, iter); - enqueue_revision (self, - CHANGE_TYPE_ADD, - pos, - dee_serializable_model_get_seqnum (self), - dee_model_get_row (self, iter, row)); - } -} - -static void -on_self_row_removed (DeeModel *self, DeeModelIter *iter) -{ - DeeSharedModelPrivate *priv; - guint32 pos; - - priv = DEE_SHARED_MODEL (self)->priv; - - if (!priv->suppress_remote_signals) - { - pos = dee_model_get_position (self, iter); - enqueue_revision (self, - CHANGE_TYPE_REMOVE, - pos, - dee_serializable_model_get_seqnum (self), - NULL); - } -} - -static void -on_self_row_changed (DeeModel *self, DeeModelIter *iter) -{ - DeeSharedModelPrivate *priv; - guint32 pos; - gsize row_slice_size; - GVariant **row; - - priv = DEE_SHARED_MODEL (self)->priv; - - if (!priv->suppress_remote_signals) - { - row_slice_size = dee_model_get_n_columns(self) * sizeof (gpointer); - row = g_slice_alloc (row_slice_size); - - pos = dee_model_get_position (self, iter); - enqueue_revision (self, - CHANGE_TYPE_CHANGE, - pos, - dee_serializable_model_get_seqnum (self), - dee_model_get_row (self, iter, row)); - } -} - -/* Clears all data in the model and resets it to start from scratch */ -static void -reset_model (DeeModel *self) -{ - g_return_if_fail (DEE_IS_SHARED_MODEL (self)); - - /* Make sure we don't have any buffered signals awaiting emission */ - flush_revision_queue (self); - - /* Emit 'removed' on all rows and free old row data */ - dee_model_clear (self); - - dee_serializable_model_set_seqnum (self, 0); -} - -/* Call DBus method com.canonical.Dee.Model.Invalidate() on @sender_name */ -static void -invalidate_peer (DeeSharedModel *self, - const gchar *sender_name) -{ - DeeSharedModelPrivate *priv; - - g_return_if_fail (DEE_IS_SHARED_MODEL (self)); - g_return_if_fail (sender_name != NULL); - - if (!dee_shared_model_is_leader (self)) - { - g_critical ("Internal error in DeeSharedModel. " - "Non-leader model tried to invalidate a peer"); - return; - } - - priv = self->priv; - - g_dbus_connection_call (priv->connection, - sender_name, - priv->model_path, - "com.canonical.Dee.Model", - "Invalidate", - NULL, /* params */ - NULL, /* reply type */ - G_DBUS_CALL_FLAGS_NONE, - -1, /* timeout */ - NULL, /* cancel */ - NULL, /* cb */ - NULL); /* user data */ -} - -/* Public Methods */ - -/** - * dee_shared_model_new: - * @name: A well known name to publish this model under. Models sharing this name - * will synchronize with each other - * - * Create a new empty shared model without any column schema associated. - * The column schema will be set in one of two ways: firstly you may set it - * manually with dee_model_set_schema() or secondly it will be set once - * the first rows are exchanged with a peer model. - * - * A #DeeSharedModel with a schema manually set has to be created before - * creating more #DeeSharedModel with the same @name. - * - * A shared model created with this constructor will store row data in a - * suitably picked memory backed model. - * - * Return value: (transfer full): a new #DeeSharedModel - */ -DeeModel* -dee_shared_model_new (const gchar *name) -{ - DeeModel *self; - - g_return_val_if_fail (name != NULL, NULL); - - self = dee_shared_model_new_with_back_end(name, - dee_sequence_model_new ()); - - return self; -} - -/** - * dee_shared_model_new_with_back_end: - * @name: (transfer none): A well known name to publish this model under. - * Models sharing this name will synchronize with each other - * @back_end: (transfer full): The #DeeModel that will actually store - * the model data. Ownership of the ref to @back_end is transfered to - * the shared model. - * - * Create a new shared model storing all data in @back_end. - * - * In order to start synchronizing the new model with peer models you must call - * dee_shared_model_connect() on it. - * - * Return value: (transfer full): a new #DeeSharedModel - */ -DeeModel* -dee_shared_model_new_with_back_end (const gchar *name, DeeModel *back_end) -{ - DeeModel *self; - DeePeer *swarm; - - g_return_val_if_fail (name != NULL, NULL); - - swarm = g_object_new (DEE_TYPE_PEER, - "swarm-name", name, - NULL); - - self = g_object_new (DEE_TYPE_SHARED_MODEL, - "back-end", back_end, - "peer", swarm, - NULL); - - return self; -} - -/** - * dee_shared_model_get_swarm_name: - * @self: The model to get the name for - * - * Convenience function for accessing the #DeePeer:swarm-name property of the - * #DeePeer defined in the #DeeSharedModel:peer property. - * - * Returns: The name of the swarm this model synchrnonizes with - */ -const gchar* -dee_shared_model_get_swarm_name (DeeSharedModel *self) -{ - DeeSharedModelPrivate *priv; - - g_return_val_if_fail (DEE_IS_SHARED_MODEL (self), NULL); - - priv = self->priv; - return dee_peer_get_swarm_name (priv->swarm); -} - -/** - * dee_shared_model_get_peer: - * @self: The model to get the #DeePeer for - * - * Convenience function for accessing the #DeeSharedModel:peer property - * - * Returns: (transfer none): The #DeePeer used to interact with the peer models - */ -DeePeer* -dee_shared_model_get_peer (DeeSharedModel *self) -{ - DeeSharedModelPrivate *priv; - - g_return_val_if_fail (DEE_IS_SHARED_MODEL (self), NULL); - - priv = self->priv; - return priv->swarm; -} - -/** - * dee_shared_model_is_leader: - * @self: The model to inspect - * - * Check if the model is the swarm leader. This is a convenience function for - * accessing the #DeeSharedModel:peer property and checking if it's the swarm - * leader. - * - * Returns: The value of dee_peer_is_swarm_leader() for the #DeePeer used by - * this shared model - */ -gboolean -dee_shared_model_is_leader (DeeSharedModel *self) -{ - DeeSharedModelPrivate *priv; - - g_return_val_if_fail (DEE_IS_SHARED_MODEL (self), FALSE); - - priv = self->priv; - return dee_peer_is_swarm_leader (priv->swarm); -} - -/** - * dee_shared_model_is_synchronized: - * @self: The model to inspect - * - * Check if the model is synchronized with its peers. Before modifying a - * shared model in any way (except dee_model_set_schema()) you should wait for - * it to become synchronized. This is normally done by waiting for the - * "notify::synchronized" signal. - * - * This method is purely a convenience function for accessing the - * #DeeSharedModel:synchronized property. - * - * Returns: The value of the :synchronized property - */ -gboolean -dee_shared_model_is_synchronized (DeeSharedModel *self) -{ - DeeSharedModelPrivate *priv; - - g_return_val_if_fail (DEE_IS_SHARED_MODEL (self), FALSE); - - priv = self->priv; - return priv->synchronized; -} - -/** - * dee_shared_model_flush_revision_queue: - * @self: The shared model to flush the revision queue on - * - * Expert: All changes to @self that has not yet been propagated to the peer - * models are send. This will block the mainloop until all the underlying - * transport streams has been flushed. - * - * Normally #DeeSharedModel collects changes to @self into batches and sends - * them automatically to all peers. You can use this call to provide fine - * grained control of exactly when changes to @self are synchronized to its - * peers. This may for example be useful to improve the interactivity of your - * application if you have a model-process which intermix small and light - * changes with big and expensive changes. Using this call you can make sure - * the model-process dispatches small changes more aggresively to the - * view-process, while holding on to the expensive changes a bit longer. - * - * Important: This method may flush - * your internal queue of DBus messages forcing them to be send before this call - * returns. - * - * Return value: The number of revisions flushed. - */ -guint -dee_shared_model_flush_revision_queue (DeeSharedModel *self) -{ - DeeSharedModelPrivate *priv; - GError *error; - guint n_revisions; - - g_return_val_if_fail (DEE_IS_SHARED_MODEL (self), 0); - - priv = self->priv; - n_revisions = flush_revision_queue (DEE_MODEL (self)); - - error = NULL; - g_dbus_connection_flush_sync (priv->connection, NULL, &error); - if (error) - { - g_critical ("Error when flushing %u revisions of %s@%p: %s", - n_revisions, G_OBJECT_TYPE_NAME (self), self, error->message); - g_error_free (error); - return 0; - } - - return n_revisions; -} - -/* - * Dbus Methods - */ - - -/* Build a '(sasaavauay(tt))' suitable for sending in a Clone response */ -static GVariant* -dee_shared_model_serialize (DeeSerializable *self) -{ - DeeModel *_self; - GVariantBuilder aav, au, ay, clone; - GVariant *val, *tt, *schema; - DeeModelIter *iter; - guint i, j, n_columns; - guint64 last_seqnum; - - g_return_val_if_fail (DEE_IS_SHARED_MODEL (self), FALSE); - - trace_object (self, "Serializing %u rows", - dee_model_get_n_rows (DEE_MODEL (self))); - - _self = DEE_MODEL (self); - n_columns = dee_model_get_n_columns (DEE_MODEL (self)); - - g_variant_builder_init (&aav, G_VARIANT_TYPE ("aav")); - g_variant_builder_init (&au, G_VARIANT_TYPE ("au")); - g_variant_builder_init (&ay, G_VARIANT_TYPE ("ay")); - - /* Clone the rows */ - i = 0; - iter = dee_model_get_first_iter (_self); - while (!dee_model_is_last (_self, iter)) - { - g_variant_builder_open (&aav, G_VARIANT_TYPE ("av")); - for (j = 0; j < n_columns; j++) - { - val = dee_model_get_value (_self, iter, j); - g_variant_builder_add_value (&aav, g_variant_new_variant (val)); - g_variant_unref (val); - } - g_variant_builder_close (&aav); - - g_variant_builder_add (&au, "u", i); - g_variant_builder_add (&ay, "y", (guchar) CHANGE_TYPE_ADD); - - iter = dee_model_next (_self, iter); - i++; - } - - /* Collect the schema */ - schema = g_variant_new_strv (dee_model_get_schema(_self, NULL), -1); - - /* Collect the seqnums */ - last_seqnum = dee_serializable_model_get_seqnum (_self); - tt = g_variant_new ("(tt)", last_seqnum - i, last_seqnum); - - /* Build the final clone */ - g_variant_builder_init (&clone, G_VARIANT_TYPE ("(sasaavauay(tt))")); - g_variant_builder_add (&clone, "s", dee_shared_model_get_swarm_name (DEE_SHARED_MODEL (self))); - g_variant_builder_add_value (&clone, schema); - g_variant_builder_add_value (&clone, g_variant_builder_end (&aav)); - g_variant_builder_add_value (&clone, g_variant_builder_end (&au)); - g_variant_builder_add_value (&clone, g_variant_builder_end (&ay)); - g_variant_builder_add_value (&clone, tt); - - return g_variant_builder_end (&clone); -} - -/* Handle an incoming Invalidate() message */ -static gboolean -on_invalidate (DeeSharedModel *self) -{ - DeeSharedModelPrivate *priv; - - g_return_val_if_fail (DEE_IS_SHARED_MODEL (self), FALSE); - - priv = self->priv; - - if (dee_peer_is_swarm_leader (priv->swarm)) - { - g_warning ("Refusing to invalidate swarm leader"); - return FALSE; - } - - trace_object (self, "Model invalidated"); - - priv->synchronized = FALSE; - priv->suppress_remote_signals = TRUE; - reset_model (DEE_MODEL (self)); - clone_leader (self); - priv->suppress_remote_signals = FALSE; - - return TRUE; -} - -static GObject* -dee_shared_model_parse_serialized (GVariant *data) -{ - DeeSharedModel *self; - gchar *swarm_name; - - g_variant_get_child (data, 0, "s", &swarm_name); - - self = DEE_SHARED_MODEL (dee_shared_model_new (swarm_name)); - commit_transaction (self, swarm_name, data); - - g_free (swarm_name); - - return (GObject *) self; -} - -static void -dee_shared_model_serializable_iface_init (DeeSerializableIface *iface) -{ - iface->serialize = dee_shared_model_serialize; - - dee_serializable_register_parser (DEE_TYPE_SHARED_MODEL, - G_VARIANT_TYPE ("(sasaavauay(tt))"), - dee_shared_model_parse_serialized); -} diff -Nru dee-0.5.22/dee/dee-shared-model.h dee-1.0.0/dee/dee-shared-model.h --- dee-0.5.22/dee/dee-shared-model.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-shared-model.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -#if !defined (_DEE_H_INSIDE) && !defined (DEE_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef _HAVE_DEE_SHARED_MODEL_H -#define _HAVE_DEE_SHARED_MODEL_H - -#include -#include - -#include -#include -#include - -G_BEGIN_DECLS - -#define DEE_TYPE_SHARED_MODEL (dee_shared_model_get_type ()) - -#define DEE_SHARED_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - DEE_TYPE_SHARED_MODEL, DeeSharedModel)) - -#define DEE_SHARED_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \ - DEE_TYPE_SHARED_MODEL, DeeSharedModelClass)) - -#define DEE_IS_SHARED_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - DEE_TYPE_SHARED_MODEL)) - -#define DEE_IS_SHARED_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - DEE_TYPE_SHARED_MODEL)) - -#define DEE_SHARED_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - DBUS_TYPE_SHARED_MODEL, DeeSharedModelClass)) - -typedef struct _DeeSharedModel DeeSharedModel; -typedef struct _DeeSharedModelClass DeeSharedModelClass; -typedef struct _DeeSharedModelPrivate DeeSharedModelPrivate; - -/** - * DeeSharedModel: - * - * All fields in the DeeSharedModel structure are private and should never be - * accessed directly - */ -struct _DeeSharedModel -{ - /*< private >*/ - DeeProxyModel parent; - - DeeSharedModelPrivate *priv; -}; - -/** - * DBUS_INTERFACE_SHARED_MODEL - * - * String constant defining the name of the DBus Model interface. - */ -#define DEE_SHARED_MODEL_DBUS_IFACE "com.canonical.Dee.Model" - -struct _DeeSharedModelClass -{ - /*< private >*/ - DeeProxyModelClass parent_class; - - /*< private >*/ - void (*_dee_shared_model_1) (void); - void (*_dee_shared_model_2) (void); - void (*_dee_shared_model_3) (void); - void (*_dee_shared_model_4) (void); -}; - -typedef enum -{ - DEE_SHARED_MODEL_ERROR_LEADER_INVALIDATED -} DeeSharedModelError; - - -/** - * dee_shared_model_get_type: - * - * The GType of #DeeSharedModel - * - * Return value: the #GType of #DeeSharedModel - **/ -GType dee_shared_model_get_type (void); - -DeeModel* dee_shared_model_new (const gchar *name); - -DeeModel* dee_shared_model_new_with_back_end (const gchar *name, - DeeModel *back_end); - -const gchar* dee_shared_model_get_swarm_name (DeeSharedModel *self); - -DeePeer* dee_shared_model_get_peer (DeeSharedModel *self); - -gboolean dee_shared_model_is_leader (DeeSharedModel *self); - -gboolean dee_shared_model_is_synchronized (DeeSharedModel *self); - -guint dee_shared_model_flush_revision_queue (DeeSharedModel *self); - -G_END_DECLS - -#endif /* _HAVE_DEE_SHARED_MODEL_H */ diff -Nru dee-0.5.22/dee/dee-term-list.c dee-1.0.0/dee/dee-term-list.c --- dee-0.5.22/dee/dee-term-list.c 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-term-list.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,305 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by: - * Mikkel Kamstrup Erlandsen - */ - -/** - * SECTION:dee-term-list - * @short_description: A simple collection type representing a list of indexed terms for a row in a #DeeIndex - * @include: dee.h - * - * #DeeTermList is a simple list type containing the indexed terms of a row - * in a #DeeModel as recorded in a #DeeIndex. The terms are extracted from the - * model by using a #DeeAnalyzer. - * - * The default implementation of #DeeTermList stores all terms in a string pool - * and reuses terms from that string pool for the entire lifetime of the - * term list. That is, even if you call dee_term_list_clear() on it. This - * behaviour will save a lot of reallocations and g_strdup()s provided - * there is reuse in the terms over time. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "dee-term-list.h" -#include "trace-log.h" - -G_DEFINE_TYPE (DeeTermList, dee_term_list, G_TYPE_OBJECT); - -#define DEE_TERM_LIST_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE(obj, DEE_TYPE_TERM_LIST, DeeTermListPrivate)) - -/* - * FORWARDS - */ -static const gchar* dee_term_list_get_term_real (DeeTermList *self, - guint n); - -static void dee_term_list_add_term_real (DeeTermList *self, - const gchar *term); - -static guint dee_term_list_num_terms_real (DeeTermList *self); - -static void dee_term_list_clear_real (DeeTermList *self); - -/* - * GOBJECT VOODOO - */ - -/** - * DeeTermListPrivate: - * - * Ignore this structure. - **/ -struct _DeeTermListPrivate -{ - /* String pool - reused to minimize strdup()ing */ - GStringChunk *chunk; - - /* The actual terms, in order. The strings are stored in priv->chunk - * so they shouldn't be freed by this instance */ - GPtrArray *terms; -}; - -enum -{ - PROP_0, -}; - -/* GObject stuff */ -static void -dee_term_list_finalize (GObject *object) -{ - DeeTermListPrivate *priv = DEE_TERM_LIST (object)->priv; - - if (priv->chunk) - { - g_string_chunk_free (priv->chunk); - priv->chunk = NULL; - } - - if (priv->terms) - { - g_ptr_array_unref (priv->terms); - priv->terms = NULL; - } - - G_OBJECT_CLASS (dee_term_list_parent_class)->finalize (object); -} - -static void -dee_term_list_class_init (DeeTermListClass *klass) -{ - // GParamSpec *pspec; - GObjectClass *obj_class = G_OBJECT_CLASS (klass); - - obj_class->finalize = dee_term_list_finalize; - - klass->get_term = dee_term_list_get_term_real; - klass->add_term = dee_term_list_add_term_real; - klass->num_terms = dee_term_list_num_terms_real; - klass->clear = dee_term_list_clear_real; - - /* - pspec = g_param_spec_pointer ("filter", "Filter", - "Filtering rules applied to the original model", - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY - | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (obj_class, PROP_FILTER, pspec); - */ - - /* Add private data */ - g_type_class_add_private (obj_class, sizeof (DeeTermListPrivate)); -} - -static void -dee_term_list_init (DeeTermList *self) -{ - DeeTermListPrivate *priv; - - priv = self->priv = DEE_TERM_LIST_GET_PRIVATE (self); - - /* The number 64 is chosen as a an estimate of the length of URIs to files - * under the user's home dir somewhere */ - priv->chunk = g_string_chunk_new (64); - - /* Making room for 10 terms by default is probably sane */ - priv->terms = g_ptr_array_sized_new (10); -} - -/* - * API - */ - -/** - * dee_term_list_get_term: - * @self: The term list to get the @nth term from - * @n: The (zero based) offset into the term list - * - * Get the n'th term in the list. - * - * Note that in the default implementation it is guaranteed that the returned - * string is valid for the entire lifetime of the #DeeTermList. - * - * Returns: The @nth string held in the term list - */ -const gchar* -dee_term_list_get_term (DeeTermList *self, - guint n) -{ - DeeTermListClass *klass; - - g_return_val_if_fail (DEE_IS_TERM_LIST (self), NULL); - - klass = DEE_TERM_LIST_GET_CLASS (self); - - return (* klass->get_term) (self, n); -} - -/** - * dee_term_list_add_term: - * @self: The term list to add a term to - * @term: The term to add - * - * Add a term to the termlist. Note that it is possible to add a term multiple - * times. The effect of this is determined by the #DeeModelIndex consuming the - * #DeeTermList. - */ -void -dee_term_list_add_term (DeeTermList *self, - const gchar *term) -{ - DeeTermListClass *klass; - - g_return_if_fail (DEE_IS_TERM_LIST (self)); - g_return_if_fail (term != NULL); - - klass = DEE_TERM_LIST_GET_CLASS (self); - - return (* klass->add_term) (self, term); -} - -/** - * dee_term_list_num_terms: - * @self: The term list to check the number of terms in - * - * Returns: The number of terms in the term list - */ -guint -dee_term_list_num_terms (DeeTermList *self) -{ - DeeTermListClass *klass; - - g_return_val_if_fail (DEE_IS_TERM_LIST (self), 0); - - klass = DEE_TERM_LIST_GET_CLASS (self); - - return (* klass->num_terms) (self); -} - -/** - * dee_term_list_clear: - * @self: The term list to clear - * - * Remove all terms from a term list making it ready for reuse. Note that - * term list implementations will often have optimized memory allocation - * schemes so reuse is often more efficient than allocating a new term list - * each time you need it. - */ -void -dee_term_list_clear (DeeTermList *self) -{ - DeeTermListClass *klass; - - g_return_if_fail (DEE_IS_TERM_LIST (self)); - - klass = DEE_TERM_LIST_GET_CLASS (self); - - (* klass->clear) (self); -} - -/* - * IMPLEMENTATION - */ - -static const gchar* -dee_term_list_get_term_real (DeeTermList *self, - guint n) -{ - DeeTermListPrivate *priv; - - g_return_val_if_fail (DEE_IS_TERM_LIST(self), NULL); - - priv = self->priv; - g_return_val_if_fail (n < priv->terms->len, NULL); - - return g_ptr_array_index (priv->terms, n); -} - -static void -dee_term_list_add_term_real (DeeTermList *self, - const gchar *term) -{ - DeeTermListPrivate *priv; - gchar *cterm; - - g_return_if_fail (DEE_IS_TERM_LIST(self)); - g_return_if_fail (term != NULL); - - priv = self->priv; - cterm = g_string_chunk_insert_const (priv->chunk, term); - - g_ptr_array_add (priv->terms, cterm); -} - -static guint -dee_term_list_num_terms_real (DeeTermList *self) -{ - DeeTermListPrivate *priv; - - g_return_val_if_fail (DEE_IS_TERM_LIST(self), 0); - - priv = self->priv; - return priv->terms->len; -} - -static void -dee_term_list_clear_real (DeeTermList *self) -{ - /* - * The idea here is that we clear only the term list (priv->terms), - * but not the string pool (priv->chunk). This will work well assuming that - * there is a fair deal of reuse in the term. - */ - DeeTermListPrivate *priv; - guint i; - - g_return_if_fail (DEE_IS_TERM_LIST(self)); - - priv = self->priv; - - if (priv->terms->len == 0) - return; - - /* Clear the term list backwards to avoid memory shuffling */ - for (i = priv->terms->len; i > 0; i--) - g_ptr_array_remove_index_fast (priv->terms, i - 1); -} - diff -Nru dee-0.5.22/dee/dee-term-list.h dee-1.0.0/dee/dee-term-list.h --- dee-0.5.22/dee/dee-term-list.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/dee-term-list.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -#if !defined (_DEE_H_INSIDE) && !defined (DEE_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef _HAVE_DEE_TERM_LIST_H -#define _HAVE_DEE_TERM_LIST_H - -#include -#include - -G_BEGIN_DECLS - -#define DEE_TYPE_TERM_LIST (dee_term_list_get_type ()) - -#define DEE_TERM_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - DEE_TYPE_TERM_LIST, DeeTermList)) - -#define DEE_TERM_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \ - DEE_TYPE_TERM_LIST, DeeTermListClass)) - -#define DEE_IS_TERM_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - DEE_TYPE_TERM_LIST)) - -#define DEE_IS_TERM_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - DEE_TYPE_TERM_LIST)) - -#define DEE_TERM_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - DBUS_TYPE_TERM_LIST, DeeTermListClass)) - -typedef struct _DeeTermListClass DeeTermListClass; -typedef struct _DeeTermList DeeTermList; -typedef struct _DeeTermListPrivate DeeTermListPrivate; - -/** - * DeeTermList: - * - * All fields in the DeeTermList structure are private and should never be - * accessed directly - */ -struct _DeeTermList -{ - /*< private >*/ - GObject parent; - - DeeTermListPrivate *priv; -}; - -struct _DeeTermListClass -{ - GObjectClass parent_class; - - /*< public >*/ - const gchar* (* get_term) (DeeTermList *self, - guint n); - - void (* add_term) (DeeTermList *self, - const gchar *term); - - guint (* num_terms) (DeeTermList *self); - - void (* clear) (DeeTermList *self); - - /*< private >*/ - void (*_dee_term_list_1) (void); - void (*_dee_term_list_2) (void); - void (*_dee_term_list_3) (void); - void (*_dee_term_list_4) (void); - -}; - -GType dee_term_list_get_type (void) G_GNUC_CONST; - -const gchar* dee_term_list_get_term (DeeTermList *self, - guint n); - -void dee_term_list_add_term (DeeTermList *self, - const gchar *term); - -guint dee_term_list_num_terms (DeeTermList *self); - -void dee_term_list_clear (DeeTermList *self); - -G_END_DECLS - -#endif /* _HAVE_DEE_TERM_LIST_H */ diff -Nru dee-0.5.22/dee/Makefile.am dee-1.0.0/dee/Makefile.am --- dee-0.5.22/dee/Makefile.am 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,181 +0,0 @@ -BUILT_SOURCES = -CLEANFILES = -EXTRA_DIST = - -## -# DBus introspection XML -## -# create a .h file containing the introspection data in a variable for gdbus -%-xml.h : dbus/%.xml - name=`basename $< | sed -e 's/[-\.]/_/g' -e 's/.xml/_xml/g'`; \ - echo "static const gchar $$name[] = " > $@; \ - cat $< | tr \" \' | sed 's/^/\"/g' | sed 's/$$/\"/g' >> $@; \ - echo ";" >> $@; - -BUILT_SOURCES += \ - com.canonical.Dee.Model-xml.h \ - com.canonical.Dee.Peer-xml.h - -EXTRA_DIST += \ - dbus/com.canonical.Dee.Model.xml \ - dbus/com.canonical.Dee.Peer.xml - - -## -# Development headers -## -devel_headersdir = $(includedir)/dee-1.0 - -devel_headers = \ - dee.h \ - dee-model.h \ - dee-filter-model.h \ - dee-filters.h \ - dee-peer.h \ - dee-proxy-model.h \ - dee-sequence-model.h \ - dee-shared-model.h \ - dee-serializable-model.h \ - dee-index.h \ - dee-hash-index.h \ - dee-term-list.h \ - dee-result-set.h \ - dee-analyzers.h \ - dee-serializable.h \ - dee-resource-manager.h \ - dee-file-resource-manager.h - -devel_headers_HEADERS = \ - $(devel_headers) - -## -# Build libdee -## -lib_LTLIBRARIES = libdee-1.0.la - -libdee_1_0_la_SOURCES = \ - $(devel_headers) \ - dee-model.c \ - dee-marshal.c \ - dee-marshal.h \ - dee-peer.c \ - dee-proxy-model.c \ - dee-filter-model.c \ - dee-filters.c \ - dee-sequence-model.c \ - dee-shared-model.c \ - dee-serializable-model.c \ - dee-index.c \ - dee-hash-index.c \ - dee-term-list.c \ - dee-result-set.c \ - dee-glist-result-set.h \ - dee-glist-result-set.c \ - dee-analyzers.c \ - dee-serializable.c \ - dee-resource-manager.c \ - dee-file-resource-manager.c \ - trace-log.h \ - com.canonical.Dee.Model-xml.h - -libdee_1_0_la_LIBADD = \ - $(DEE_LIBS) - -libdee_1_0_la_LDFLAGS = \ - $(DEE_LT_LDFLAGS) - -libdee_1_0_la_CPPFLAGS = \ - -I$(srcdir) \ - -I$(top_srcdir) \ - -I$(top_builddir) \ - -DG_LOG_DOMAIN=\"dee\" \ - -DPREFIX=\""$(prefix)"\" \ - -DLIBDIR=\""$(libdir)"\" \ - -DG_DISABLE_DEPRECATED \ - -DDEE_COMPILATION \ - $(GCC_FLAGS) \ - $(DEE_CFLAGS) \ - $(MAINTAINER_CFLAGS) - -## -# If trace logging is not enabled -# all the macros are removed by the preprocessor -## -if ENABLE_TRACE_LOG -libdee_1_0_la_SOURCES += trace-log.c -endif - -## -# Signal Marshallers -## -dee-marshal.h: $(srcdir)/dee-marshal.list - $(GLIB_GENMARSHAL) --header \ - --prefix=_dee_marshal $(srcdir)/dee-marshal.list \ - > dee-marshal.h - -dee-marshal.c: $(srcdir)/dee-marshal.list - $(GLIB_GENMARSHAL) --body \ - --prefix=_dee_marshal $(srcdir)/dee-marshal.list \ - > dee-marshal.c - -BUILT_SOURCES += \ - dee-marshal.c \ - dee-marshal.h - -EXTRA_DIST += dee-marshal.list - -CLEANFILES += \ - $(BUILT_SOURCES) - -## -# GObject Introspection -## - -if HAVE_INTROSPECTION -BUILT_GIRSOURCES = - -irscanner_sources = $(patsubst %,$(srcdir)/%,$(libdee_1_0_la_SOURCES)) - -dee_gir = Dee-$(DEE_MAJOR_VERSION).$(DEE_MINOR_VERSION).gir - -# For the 'sed' below see https://bugzilla.gnome.org/show_bug.cgi?id=638929 -$(dee_gir): $(devel_headers) - $(QUIET_GEN)$(INTROSPECTION_SCANNER) -v --warn-all \ - --namespace Dee \ - --nsversion=$(DEE_MAJOR_VERSION).$(DEE_MINOR_VERSION) \ - --add-include-path=$(srcdir) \ - --add-include-path=$(top_builddir) \ - --add-include-path=$(top_builddir)/dee \ - --warn-all \ - -I$(srcdir) \ - -I$(top_srcdir) \ - -I$(top_builddir) \ - -DDEE_COMPILATION \ - --include=GObject-2.0 \ - --include=GLib-2.0 \ - --library=dee-1.0 \ - --output $@ $(irscanner_sources) - sed -i -e 's@@@g' $@ - -BUILT_GIRSOURCES += $(dee_gir) - -# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to -# install anything - we need to install inside our prefix. -girdir = $(datadir)/gir-1.0 -gir_DATA = $(BUILT_GIRSOURCES) - -typelibsdir = $(libdir)/girepository-1.0/ -typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) - -%.typelib: %.gir $(INTROSPECTION_COMPILER) - $(QUIET_GEN) \ - $(INTROSPECTION_COMPILER) \ - --includedir=$(srcdir) \ - --includedir=. \ - --includedir=$(top_builddir) \ - --includedir=$(top_builddir)/dee \ - $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) - -CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA) - -endif diff -Nru dee-0.5.22/dee/Makefile.in dee-1.0.0/dee/Makefile.in --- dee-0.5.22/dee/Makefile.in 2011-09-23 14:16:58.000000000 +0000 +++ dee-1.0.0/dee/Makefile.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,979 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -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 = : -build_triplet = @build@ -host_triplet = @host@ - -# If trace logging is not enabled -# all the macros are removed by the preprocessor -@ENABLE_TRACE_LOG_TRUE@am__append_1 = trace-log.c -@HAVE_INTROSPECTION_TRUE@am__append_2 = $(BUILT_GIRSOURCES) $(typelibs_DATA) -subdir = dee -DIST_COMMON = $(devel_headers_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/build/autotools/gtk-doc.m4 \ - $(top_srcdir)/build/autotools/introspection.m4 \ - $(top_srcdir)/build/autotools/libtool.m4 \ - $(top_srcdir)/build/autotools/ltoptions.m4 \ - $(top_srcdir)/build/autotools/ltsugar.m4 \ - $(top_srcdir)/build/autotools/ltversion.m4 \ - $(top_srcdir)/build/autotools/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \ - "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(devel_headersdir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -am__DEPENDENCIES_1 = -libdee_1_0_la_DEPENDENCIES = $(am__DEPENDENCIES_1) -am__libdee_1_0_la_SOURCES_DIST = dee.h dee-model.h dee-filter-model.h \ - dee-filters.h dee-peer.h dee-proxy-model.h \ - dee-sequence-model.h dee-shared-model.h \ - dee-serializable-model.h dee-index.h dee-hash-index.h \ - dee-term-list.h dee-result-set.h dee-analyzers.h \ - dee-serializable.h dee-resource-manager.h \ - dee-file-resource-manager.h dee-model.c dee-marshal.c \ - dee-marshal.h dee-peer.c dee-proxy-model.c dee-filter-model.c \ - dee-filters.c dee-sequence-model.c dee-shared-model.c \ - dee-serializable-model.c dee-index.c dee-hash-index.c \ - dee-term-list.c dee-result-set.c dee-glist-result-set.h \ - dee-glist-result-set.c dee-analyzers.c dee-serializable.c \ - dee-resource-manager.c dee-file-resource-manager.c trace-log.h \ - com.canonical.Dee.Model-xml.h trace-log.c -am__objects_1 = -@ENABLE_TRACE_LOG_TRUE@am__objects_2 = libdee_1_0_la-trace-log.lo -am_libdee_1_0_la_OBJECTS = $(am__objects_1) libdee_1_0_la-dee-model.lo \ - libdee_1_0_la-dee-marshal.lo libdee_1_0_la-dee-peer.lo \ - libdee_1_0_la-dee-proxy-model.lo \ - libdee_1_0_la-dee-filter-model.lo libdee_1_0_la-dee-filters.lo \ - libdee_1_0_la-dee-sequence-model.lo \ - libdee_1_0_la-dee-shared-model.lo \ - libdee_1_0_la-dee-serializable-model.lo \ - libdee_1_0_la-dee-index.lo libdee_1_0_la-dee-hash-index.lo \ - libdee_1_0_la-dee-term-list.lo libdee_1_0_la-dee-result-set.lo \ - libdee_1_0_la-dee-glist-result-set.lo \ - libdee_1_0_la-dee-analyzers.lo \ - libdee_1_0_la-dee-serializable.lo \ - libdee_1_0_la-dee-resource-manager.lo \ - libdee_1_0_la-dee-file-resource-manager.lo $(am__objects_2) -libdee_1_0_la_OBJECTS = $(am_libdee_1_0_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -libdee_1_0_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(libdee_1_0_la_LDFLAGS) $(LDFLAGS) -o $@ -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -SOURCES = $(libdee_1_0_la_SOURCES) -DIST_SOURCES = $(am__libdee_1_0_la_SOURCES_DIST) -DATA = $(gir_DATA) $(typelibs_DATA) -HEADERS = $(devel_headers_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEE_CFLAGS = @DEE_CFLAGS@ -DEE_LIBS = @DEE_LIBS@ -DEE_LT_LDFLAGS = @DEE_LT_LDFLAGS@ -DEE_LT_VERSION = @DEE_LT_VERSION@ -DEE_MAJOR_VERSION = @DEE_MAJOR_VERSION@ -DEE_MICRO_VERSION = @DEE_MICRO_VERSION@ -DEE_MINOR_VERSION = @DEE_MINOR_VERSION@ -DEE_VERSION = @DEE_VERSION@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GCC_FLAGS = @GCC_FLAGS@ -GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ -GLIB_MKENUMS = @GLIB_MKENUMS@ -GREP = @GREP@ -GTKDOC_CHECK = @GTKDOC_CHECK@ -GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ -GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ -GTKDOC_MKPDF = @GTKDOC_MKPDF@ -GTKDOC_REBASE = @GTKDOC_REBASE@ -GTX_CFLAGS = @GTX_CFLAGS@ -GTX_LIBS = @GTX_LIBS@ -HTML_DIR = @HTML_DIR@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ -INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ -INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ -INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ -INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINTAINER_CFLAGS = @MAINTAINER_CFLAGS@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -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@ -PKG_CONFIG = @PKG_CONFIG@ -PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ -PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ -PYTHON = @PYTHON@ -PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ -PYTHON_PLATFORM = @PYTHON_PLATFORM@ -PYTHON_PREFIX = @PYTHON_PREFIX@ -PYTHON_VERSION = @PYTHON_VERSION@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VALA_API_GEN = @VALA_API_GEN@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -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 = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -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@ -pkgpyexecdir = @pkgpyexecdir@ -pkgpythondir = @pkgpythondir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -pyexecdir = @pyexecdir@ -pythondir = @pythondir@ -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@ -BUILT_SOURCES = com.canonical.Dee.Model-xml.h \ - com.canonical.Dee.Peer-xml.h dee-marshal.c dee-marshal.h -CLEANFILES = $(BUILT_SOURCES) $(am__append_2) -EXTRA_DIST = dbus/com.canonical.Dee.Model.xml \ - dbus/com.canonical.Dee.Peer.xml dee-marshal.list - -# Development headers -devel_headersdir = $(includedir)/dee-1.0 -devel_headers = \ - dee.h \ - dee-model.h \ - dee-filter-model.h \ - dee-filters.h \ - dee-peer.h \ - dee-proxy-model.h \ - dee-sequence-model.h \ - dee-shared-model.h \ - dee-serializable-model.h \ - dee-index.h \ - dee-hash-index.h \ - dee-term-list.h \ - dee-result-set.h \ - dee-analyzers.h \ - dee-serializable.h \ - dee-resource-manager.h \ - dee-file-resource-manager.h - -devel_headers_HEADERS = \ - $(devel_headers) - - -# Build libdee -lib_LTLIBRARIES = libdee-1.0.la -libdee_1_0_la_SOURCES = $(devel_headers) dee-model.c dee-marshal.c \ - dee-marshal.h dee-peer.c dee-proxy-model.c dee-filter-model.c \ - dee-filters.c dee-sequence-model.c dee-shared-model.c \ - dee-serializable-model.c dee-index.c dee-hash-index.c \ - dee-term-list.c dee-result-set.c dee-glist-result-set.h \ - dee-glist-result-set.c dee-analyzers.c dee-serializable.c \ - dee-resource-manager.c dee-file-resource-manager.c trace-log.h \ - com.canonical.Dee.Model-xml.h $(am__append_1) -libdee_1_0_la_LIBADD = \ - $(DEE_LIBS) - -libdee_1_0_la_LDFLAGS = \ - $(DEE_LT_LDFLAGS) - -libdee_1_0_la_CPPFLAGS = \ - -I$(srcdir) \ - -I$(top_srcdir) \ - -I$(top_builddir) \ - -DG_LOG_DOMAIN=\"dee\" \ - -DPREFIX=\""$(prefix)"\" \ - -DLIBDIR=\""$(libdir)"\" \ - -DG_DISABLE_DEPRECATED \ - -DDEE_COMPILATION \ - $(GCC_FLAGS) \ - $(DEE_CFLAGS) \ - $(MAINTAINER_CFLAGS) - - -# GObject Introspection -@HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = $(dee_gir) -@HAVE_INTROSPECTION_TRUE@irscanner_sources = $(patsubst %,$(srcdir)/%,$(libdee_1_0_la_SOURCES)) -@HAVE_INTROSPECTION_TRUE@dee_gir = Dee-$(DEE_MAJOR_VERSION).$(DEE_MINOR_VERSION).gir - -# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to -# install anything - we need to install inside our prefix. -@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0 -@HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES) -@HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0/ -@HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) -all: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu dee/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu dee/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libdee-1.0.la: $(libdee_1_0_la_OBJECTS) $(libdee_1_0_la_DEPENDENCIES) - $(AM_V_CCLD)$(libdee_1_0_la_LINK) -rpath $(libdir) $(libdee_1_0_la_OBJECTS) $(libdee_1_0_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-dee-analyzers.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-dee-file-resource-manager.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-dee-filter-model.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-dee-filters.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-dee-glist-result-set.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-dee-hash-index.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-dee-index.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-dee-marshal.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-dee-model.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-dee-peer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-dee-proxy-model.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-dee-resource-manager.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-dee-result-set.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-dee-sequence-model.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-dee-serializable-model.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-dee-serializable.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-dee-shared-model.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-dee-term-list.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdee_1_0_la-trace-log.Plo@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -libdee_1_0_la-dee-model.lo: dee-model.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-dee-model.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-dee-model.Tpo -c -o libdee_1_0_la-dee-model.lo `test -f 'dee-model.c' || echo '$(srcdir)/'`dee-model.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-dee-model.Tpo $(DEPDIR)/libdee_1_0_la-dee-model.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dee-model.c' object='libdee_1_0_la-dee-model.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-dee-model.lo `test -f 'dee-model.c' || echo '$(srcdir)/'`dee-model.c - -libdee_1_0_la-dee-marshal.lo: dee-marshal.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-dee-marshal.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-dee-marshal.Tpo -c -o libdee_1_0_la-dee-marshal.lo `test -f 'dee-marshal.c' || echo '$(srcdir)/'`dee-marshal.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-dee-marshal.Tpo $(DEPDIR)/libdee_1_0_la-dee-marshal.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dee-marshal.c' object='libdee_1_0_la-dee-marshal.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-dee-marshal.lo `test -f 'dee-marshal.c' || echo '$(srcdir)/'`dee-marshal.c - -libdee_1_0_la-dee-peer.lo: dee-peer.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-dee-peer.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-dee-peer.Tpo -c -o libdee_1_0_la-dee-peer.lo `test -f 'dee-peer.c' || echo '$(srcdir)/'`dee-peer.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-dee-peer.Tpo $(DEPDIR)/libdee_1_0_la-dee-peer.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dee-peer.c' object='libdee_1_0_la-dee-peer.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-dee-peer.lo `test -f 'dee-peer.c' || echo '$(srcdir)/'`dee-peer.c - -libdee_1_0_la-dee-proxy-model.lo: dee-proxy-model.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-dee-proxy-model.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-dee-proxy-model.Tpo -c -o libdee_1_0_la-dee-proxy-model.lo `test -f 'dee-proxy-model.c' || echo '$(srcdir)/'`dee-proxy-model.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-dee-proxy-model.Tpo $(DEPDIR)/libdee_1_0_la-dee-proxy-model.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dee-proxy-model.c' object='libdee_1_0_la-dee-proxy-model.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-dee-proxy-model.lo `test -f 'dee-proxy-model.c' || echo '$(srcdir)/'`dee-proxy-model.c - -libdee_1_0_la-dee-filter-model.lo: dee-filter-model.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-dee-filter-model.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-dee-filter-model.Tpo -c -o libdee_1_0_la-dee-filter-model.lo `test -f 'dee-filter-model.c' || echo '$(srcdir)/'`dee-filter-model.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-dee-filter-model.Tpo $(DEPDIR)/libdee_1_0_la-dee-filter-model.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dee-filter-model.c' object='libdee_1_0_la-dee-filter-model.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-dee-filter-model.lo `test -f 'dee-filter-model.c' || echo '$(srcdir)/'`dee-filter-model.c - -libdee_1_0_la-dee-filters.lo: dee-filters.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-dee-filters.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-dee-filters.Tpo -c -o libdee_1_0_la-dee-filters.lo `test -f 'dee-filters.c' || echo '$(srcdir)/'`dee-filters.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-dee-filters.Tpo $(DEPDIR)/libdee_1_0_la-dee-filters.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dee-filters.c' object='libdee_1_0_la-dee-filters.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-dee-filters.lo `test -f 'dee-filters.c' || echo '$(srcdir)/'`dee-filters.c - -libdee_1_0_la-dee-sequence-model.lo: dee-sequence-model.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-dee-sequence-model.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-dee-sequence-model.Tpo -c -o libdee_1_0_la-dee-sequence-model.lo `test -f 'dee-sequence-model.c' || echo '$(srcdir)/'`dee-sequence-model.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-dee-sequence-model.Tpo $(DEPDIR)/libdee_1_0_la-dee-sequence-model.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dee-sequence-model.c' object='libdee_1_0_la-dee-sequence-model.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-dee-sequence-model.lo `test -f 'dee-sequence-model.c' || echo '$(srcdir)/'`dee-sequence-model.c - -libdee_1_0_la-dee-shared-model.lo: dee-shared-model.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-dee-shared-model.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-dee-shared-model.Tpo -c -o libdee_1_0_la-dee-shared-model.lo `test -f 'dee-shared-model.c' || echo '$(srcdir)/'`dee-shared-model.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-dee-shared-model.Tpo $(DEPDIR)/libdee_1_0_la-dee-shared-model.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dee-shared-model.c' object='libdee_1_0_la-dee-shared-model.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-dee-shared-model.lo `test -f 'dee-shared-model.c' || echo '$(srcdir)/'`dee-shared-model.c - -libdee_1_0_la-dee-serializable-model.lo: dee-serializable-model.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-dee-serializable-model.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-dee-serializable-model.Tpo -c -o libdee_1_0_la-dee-serializable-model.lo `test -f 'dee-serializable-model.c' || echo '$(srcdir)/'`dee-serializable-model.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-dee-serializable-model.Tpo $(DEPDIR)/libdee_1_0_la-dee-serializable-model.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dee-serializable-model.c' object='libdee_1_0_la-dee-serializable-model.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-dee-serializable-model.lo `test -f 'dee-serializable-model.c' || echo '$(srcdir)/'`dee-serializable-model.c - -libdee_1_0_la-dee-index.lo: dee-index.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-dee-index.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-dee-index.Tpo -c -o libdee_1_0_la-dee-index.lo `test -f 'dee-index.c' || echo '$(srcdir)/'`dee-index.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-dee-index.Tpo $(DEPDIR)/libdee_1_0_la-dee-index.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dee-index.c' object='libdee_1_0_la-dee-index.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-dee-index.lo `test -f 'dee-index.c' || echo '$(srcdir)/'`dee-index.c - -libdee_1_0_la-dee-hash-index.lo: dee-hash-index.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-dee-hash-index.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-dee-hash-index.Tpo -c -o libdee_1_0_la-dee-hash-index.lo `test -f 'dee-hash-index.c' || echo '$(srcdir)/'`dee-hash-index.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-dee-hash-index.Tpo $(DEPDIR)/libdee_1_0_la-dee-hash-index.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dee-hash-index.c' object='libdee_1_0_la-dee-hash-index.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-dee-hash-index.lo `test -f 'dee-hash-index.c' || echo '$(srcdir)/'`dee-hash-index.c - -libdee_1_0_la-dee-term-list.lo: dee-term-list.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-dee-term-list.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-dee-term-list.Tpo -c -o libdee_1_0_la-dee-term-list.lo `test -f 'dee-term-list.c' || echo '$(srcdir)/'`dee-term-list.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-dee-term-list.Tpo $(DEPDIR)/libdee_1_0_la-dee-term-list.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dee-term-list.c' object='libdee_1_0_la-dee-term-list.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-dee-term-list.lo `test -f 'dee-term-list.c' || echo '$(srcdir)/'`dee-term-list.c - -libdee_1_0_la-dee-result-set.lo: dee-result-set.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-dee-result-set.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-dee-result-set.Tpo -c -o libdee_1_0_la-dee-result-set.lo `test -f 'dee-result-set.c' || echo '$(srcdir)/'`dee-result-set.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-dee-result-set.Tpo $(DEPDIR)/libdee_1_0_la-dee-result-set.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dee-result-set.c' object='libdee_1_0_la-dee-result-set.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-dee-result-set.lo `test -f 'dee-result-set.c' || echo '$(srcdir)/'`dee-result-set.c - -libdee_1_0_la-dee-glist-result-set.lo: dee-glist-result-set.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-dee-glist-result-set.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-dee-glist-result-set.Tpo -c -o libdee_1_0_la-dee-glist-result-set.lo `test -f 'dee-glist-result-set.c' || echo '$(srcdir)/'`dee-glist-result-set.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-dee-glist-result-set.Tpo $(DEPDIR)/libdee_1_0_la-dee-glist-result-set.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dee-glist-result-set.c' object='libdee_1_0_la-dee-glist-result-set.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-dee-glist-result-set.lo `test -f 'dee-glist-result-set.c' || echo '$(srcdir)/'`dee-glist-result-set.c - -libdee_1_0_la-dee-analyzers.lo: dee-analyzers.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-dee-analyzers.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-dee-analyzers.Tpo -c -o libdee_1_0_la-dee-analyzers.lo `test -f 'dee-analyzers.c' || echo '$(srcdir)/'`dee-analyzers.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-dee-analyzers.Tpo $(DEPDIR)/libdee_1_0_la-dee-analyzers.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dee-analyzers.c' object='libdee_1_0_la-dee-analyzers.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-dee-analyzers.lo `test -f 'dee-analyzers.c' || echo '$(srcdir)/'`dee-analyzers.c - -libdee_1_0_la-dee-serializable.lo: dee-serializable.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-dee-serializable.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-dee-serializable.Tpo -c -o libdee_1_0_la-dee-serializable.lo `test -f 'dee-serializable.c' || echo '$(srcdir)/'`dee-serializable.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-dee-serializable.Tpo $(DEPDIR)/libdee_1_0_la-dee-serializable.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dee-serializable.c' object='libdee_1_0_la-dee-serializable.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-dee-serializable.lo `test -f 'dee-serializable.c' || echo '$(srcdir)/'`dee-serializable.c - -libdee_1_0_la-dee-resource-manager.lo: dee-resource-manager.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-dee-resource-manager.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-dee-resource-manager.Tpo -c -o libdee_1_0_la-dee-resource-manager.lo `test -f 'dee-resource-manager.c' || echo '$(srcdir)/'`dee-resource-manager.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-dee-resource-manager.Tpo $(DEPDIR)/libdee_1_0_la-dee-resource-manager.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dee-resource-manager.c' object='libdee_1_0_la-dee-resource-manager.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-dee-resource-manager.lo `test -f 'dee-resource-manager.c' || echo '$(srcdir)/'`dee-resource-manager.c - -libdee_1_0_la-dee-file-resource-manager.lo: dee-file-resource-manager.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-dee-file-resource-manager.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-dee-file-resource-manager.Tpo -c -o libdee_1_0_la-dee-file-resource-manager.lo `test -f 'dee-file-resource-manager.c' || echo '$(srcdir)/'`dee-file-resource-manager.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-dee-file-resource-manager.Tpo $(DEPDIR)/libdee_1_0_la-dee-file-resource-manager.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dee-file-resource-manager.c' object='libdee_1_0_la-dee-file-resource-manager.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-dee-file-resource-manager.lo `test -f 'dee-file-resource-manager.c' || echo '$(srcdir)/'`dee-file-resource-manager.c - -libdee_1_0_la-trace-log.lo: trace-log.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdee_1_0_la-trace-log.lo -MD -MP -MF $(DEPDIR)/libdee_1_0_la-trace-log.Tpo -c -o libdee_1_0_la-trace-log.lo `test -f 'trace-log.c' || echo '$(srcdir)/'`trace-log.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdee_1_0_la-trace-log.Tpo $(DEPDIR)/libdee_1_0_la-trace-log.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trace-log.c' object='libdee_1_0_la-trace-log.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdee_1_0_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdee_1_0_la-trace-log.lo `test -f 'trace-log.c' || echo '$(srcdir)/'`trace-log.c - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-girDATA: $(gir_DATA) - @$(NORMAL_INSTALL) - test -z "$(girdir)" || $(MKDIR_P) "$(DESTDIR)$(girdir)" - @list='$(gir_DATA)'; test -n "$(girdir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \ - done - -uninstall-girDATA: - @$(NORMAL_UNINSTALL) - @list='$(gir_DATA)'; test -n "$(girdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(girdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(girdir)" && rm -f $$files -install-typelibsDATA: $(typelibs_DATA) - @$(NORMAL_INSTALL) - test -z "$(typelibsdir)" || $(MKDIR_P) "$(DESTDIR)$(typelibsdir)" - @list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibsdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibsdir)" || exit $$?; \ - done - -uninstall-typelibsDATA: - @$(NORMAL_UNINSTALL) - @list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(typelibsdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(typelibsdir)" && rm -f $$files -install-devel_headersHEADERS: $(devel_headers_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(devel_headersdir)" || $(MKDIR_P) "$(DESTDIR)$(devel_headersdir)" - @list='$(devel_headers_HEADERS)'; test -n "$(devel_headersdir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(devel_headersdir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(devel_headersdir)" || exit $$?; \ - done - -uninstall-devel_headersHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(devel_headers_HEADERS)'; test -n "$(devel_headersdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(devel_headersdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(devel_headersdir)" && rm -f $$files - -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" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(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 -check-am: all-am -check: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) check-am -all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(devel_headersdir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -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." - -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -clean: clean-am - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - mostlyclean-am - -distclean: distclean-am - -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-devel_headersHEADERS install-girDATA \ - install-typelibsDATA - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES - -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 -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-devel_headersHEADERS uninstall-girDATA \ - uninstall-libLTLIBRARIES uninstall-typelibsDATA - -.MAKE: all check install install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libLTLIBRARIES clean-libtool ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am \ - install-devel_headersHEADERS install-dvi install-dvi-am \ - install-exec install-exec-am install-girDATA install-html \ - install-html-am install-info install-info-am \ - install-libLTLIBRARIES install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip install-typelibsDATA \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-devel_headersHEADERS \ - uninstall-girDATA uninstall-libLTLIBRARIES \ - uninstall-typelibsDATA - - -# DBus introspection XML -# create a .h file containing the introspection data in a variable for gdbus -%-xml.h : dbus/%.xml - name=`basename $< | sed -e 's/[-\.]/_/g' -e 's/.xml/_xml/g'`; \ - echo "static const gchar $$name[] = " > $@; \ - cat $< | tr \" \' | sed 's/^/\"/g' | sed 's/$$/\"/g' >> $@; \ - echo ";" >> $@; - -# Signal Marshallers -dee-marshal.h: $(srcdir)/dee-marshal.list - $(GLIB_GENMARSHAL) --header \ - --prefix=_dee_marshal $(srcdir)/dee-marshal.list \ - > dee-marshal.h - -dee-marshal.c: $(srcdir)/dee-marshal.list - $(GLIB_GENMARSHAL) --body \ - --prefix=_dee_marshal $(srcdir)/dee-marshal.list \ - > dee-marshal.c - -# For the 'sed' below see https://bugzilla.gnome.org/show_bug.cgi?id=638929 -@HAVE_INTROSPECTION_TRUE@$(dee_gir): $(devel_headers) -@HAVE_INTROSPECTION_TRUE@ $(QUIET_GEN)$(INTROSPECTION_SCANNER) -v --warn-all \ -@HAVE_INTROSPECTION_TRUE@ --namespace Dee \ -@HAVE_INTROSPECTION_TRUE@ --nsversion=$(DEE_MAJOR_VERSION).$(DEE_MINOR_VERSION) \ -@HAVE_INTROSPECTION_TRUE@ --add-include-path=$(srcdir) \ -@HAVE_INTROSPECTION_TRUE@ --add-include-path=$(top_builddir) \ -@HAVE_INTROSPECTION_TRUE@ --add-include-path=$(top_builddir)/dee \ -@HAVE_INTROSPECTION_TRUE@ --warn-all \ -@HAVE_INTROSPECTION_TRUE@ -I$(srcdir) \ -@HAVE_INTROSPECTION_TRUE@ -I$(top_srcdir) \ -@HAVE_INTROSPECTION_TRUE@ -I$(top_builddir) \ -@HAVE_INTROSPECTION_TRUE@ -DDEE_COMPILATION \ -@HAVE_INTROSPECTION_TRUE@ --include=GObject-2.0 \ -@HAVE_INTROSPECTION_TRUE@ --include=GLib-2.0 \ -@HAVE_INTROSPECTION_TRUE@ --library=dee-1.0 \ -@HAVE_INTROSPECTION_TRUE@ --output $@ $(irscanner_sources) -@HAVE_INTROSPECTION_TRUE@ sed -i -e 's@@@g' $@ - -@HAVE_INTROSPECTION_TRUE@%.typelib: %.gir $(INTROSPECTION_COMPILER) -@HAVE_INTROSPECTION_TRUE@ $(QUIET_GEN) \ -@HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_COMPILER) \ -@HAVE_INTROSPECTION_TRUE@ --includedir=$(srcdir) \ -@HAVE_INTROSPECTION_TRUE@ --includedir=. \ -@HAVE_INTROSPECTION_TRUE@ --includedir=$(top_builddir) \ -@HAVE_INTROSPECTION_TRUE@ --includedir=$(top_builddir)/dee \ -@HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff -Nru dee-0.5.22/dee/trace-log.c dee-1.0.0/dee/trace-log.c --- dee-0.5.22/dee/trace-log.c 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/trace-log.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -#include - -#include "trace-log.h" - -void -trace_object_va (void *obj, - const gchar *format, - va_list args) -{ - GString *tmp; - - if (!G_IS_OBJECT(obj)) { - g_critical ("Failed to log '%s' for object. Not an object.", format); - return; - } - - tmp = g_string_sized_new (512); - g_string_printf (tmp, "(%s@%p): ", g_type_name(G_OBJECT_TYPE(obj)), obj); - g_string_append (tmp, format); - g_logv (TRACE_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, tmp->str, args); - - g_string_free (tmp, TRUE); -} - -void -trace_object_real (void *obj, - const gchar *format, - ...) -{ - va_list args; - va_start (args, format); - trace_object_va (obj, format, args); - va_end (args); -} diff -Nru dee-0.5.22/dee/trace-log.h dee-1.0.0/dee/trace-log.h --- dee-0.5.22/dee/trace-log.h 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/dee/trace-log.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,103 +0,0 @@ -/* - * Copyright (C) 2010 Canonical, Ltd. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License - * version 3.0 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3.0 for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - * - * Authored by Mikkel Kamstrup Erlandsen - */ - -/* - * This file contains some special GObject-centric debugging macros that - * can be compiled completely out out of the final binary - */ - -#ifndef _TRACE_LOG_H -#define _TRACE_LOG_H - -#include "config.h" - -G_BEGIN_DECLS - -#ifndef TRACE_LOG_DOMAIN - -/** - * TRACE_LOG_DOMAIN: (skip) - * - * The log domain of libdee - */ -#define TRACE_LOG_DOMAIN "Dee" -#endif /* TRACE_LOG_DOMAIN */ - -/* - * Make trace() a noop if ENABLE_TRACE_LOG is not defined - */ -#ifdef ENABLE_TRACE_LOG - -void trace_object_va (void *obj, const gchar *format, va_list args); -void trace_object_real (void *obj, const gchar *format, ...); - -# ifdef G_HAVE_ISO_VARARGS -# define trace(...) g_log (TRACE_LOG_DOMAIN, \ - G_LOG_LEVEL_DEBUG, \ - __VA_ARGS__) -# define trace_object(object, ...) trace_object_real (object, __VA_ARGS__) - -# elif defined(G_HAVE_GNUC_VARARGS) -# define trace(format...) g_log (TRACE_LOG_DOMAIN, \ - G_LOG_LEVEL_DEBUG, \ - format) -# define trace_object(object, format...) trace_object_real (object, format) -# else /* no varargs macros */ -static void -trace (const gchar *format, - ...) -{ - va_list args; - va_start (args, format); - g_logv (TRACE_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format, args); - va_end (args); -} - -static void -trace_object (void *obj, - const gchar *format, - ...) -{ - va_list args; - va_start (args, format); - trace_object_va (obj, format, args); - va_end (args); -} -# endif /* !__GNUC__ */ - -#else /* NO TRACE LOGGING OUTPUT */ - -# ifdef G_HAVE_ISO_VARARGS -# define trace(...) G_STMT_START{ (void)0; }G_STMT_END -# define trace_object(object, ...) G_STMT_START{ (void)0; }G_STMT_END -# elif defined(G_HAVE_GNUC_VARARGS) -# define trace(format...) G_STMT_START{ (void)0; }G_STMT_END -# define trace_object(object, format...) G_STMT_START{ (void)0; }G_STMT_END -# else /* no varargs macros */ - -static void trace (const gchar *format, ...) { ; } -static void trace_object (GObject *obj, const gchar *format, ...) { ; } - -# endif /* !__GNUC__ */ - -#endif /* ENABLE_TRACE_LOG */ - -G_END_DECLS - -#endif /* _TRACE_LOG_H */ diff -Nru dee-0.5.22/doc/Makefile.in dee-1.0.0/doc/Makefile.in --- dee-0.5.22/doc/Makefile.in 2011-09-23 14:16:58.000000000 +0000 +++ dee-1.0.0/doc/Makefile.in 2012-01-12 15:07:03.000000000 +0000 @@ -149,9 +149,12 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ +INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ LD = @LD@ diff -Nru dee-0.5.22/doc/reference/dee-1.0/dee-1.0-docs.sgml dee-1.0.0/doc/reference/dee-1.0/dee-1.0-docs.sgml --- dee-0.5.22/doc/reference/dee-1.0/dee-1.0-docs.sgml 2011-09-23 14:10:55.000000000 +0000 +++ dee-1.0.0/doc/reference/dee-1.0/dee-1.0-docs.sgml 2012-01-12 15:06:35.000000000 +0000 @@ -11,34 +11,40 @@ Peer Discovery + + Models + + - - + - - + + Indexes - + - + + - + + + Resources and Serialization - - + + diff -Nru dee-0.5.22/doc/reference/dee-1.0/dee-1.0-sections.txt dee-1.0.0/doc/reference/dee-1.0/dee-1.0-sections.txt --- dee-0.5.22/doc/reference/dee-1.0/dee-1.0-sections.txt 2011-09-23 14:17:20.000000000 +0000 +++ dee-1.0.0/doc/reference/dee-1.0/dee-1.0-sections.txt 2012-01-12 15:07:25.000000000 +0000 @@ -14,11 +14,46 @@
-dee-analyzers -dee_analyzer_new_for_full_text_column -dee_analyzer_new_for_int32_column -dee_analyzer_new_for_key_column -dee_analyzer_new_for_uint32_column +dee-analyzer +DeeAnalyzer +DeeAnalyzer +DeeAnalyzerClass +DeeCollatorFunc +DeeTermFilterFunc +dee_analyzer_add_term_filter +dee_analyzer_analyze +dee_analyzer_collate_cmp +dee_analyzer_collate_cmp_func +dee_analyzer_collate_key +dee_analyzer_new +dee_analyzer_tokenize + +DEE_ANALYZER +DEE_ANALYZER_CLASS +DEE_ANALYZER_GET_CLASS +DEE_IS_ANALYZER +DEE_IS_ANALYZER_CLASS +DEE_TYPE_ANALYZER +DeeAnalyzerPrivate +dee_analyzer_get_type +
+ +
+dee-client +DeeClient +DeeClient +DeeClientClass +dee_client_new +dee_client_new_for_address + +DEE_CLIENT +DEE_CLIENT_CLASS +DEE_CLIENT_GET_CLASS +DEE_IS_CLIENT +DEE_IS_CLIENT_CLASS +DEE_TYPE_CLIENT +DeeClientPrivate +dee_client_get_type
@@ -40,13 +75,28 @@
+dee-filter +DeeFilter +DeeFilterMapFunc +DeeFilterMapNotify +dee_filter_destroy +dee_filter_map +dee_filter_new +dee_filter_new_collator +dee_filter_new_collator_desc +dee_filter_new_for_any_column +dee_filter_new_for_key_column +dee_filter_new_regex +dee_filter_new_sort +dee_filter_notify +
+ +
dee-filter-model DeeFilterModel DeeFilter DeeFilterModel DeeFilterModelClass -DeeModelMapFunc -DeeModelMapNotify dee_filter_model_append_iter dee_filter_model_contains dee_filter_model_insert_iter @@ -66,19 +116,11 @@
-dee-filters -dee_filter_new_collator -dee_filter_new_collator_desc -dee_filter_new_for_any_column -dee_filter_new_for_key_column -dee_filter_new_regex -
- -
dee-glist-result-set DeeGListResultSet DeeGListResultSet DeeGListResultSetClass +dee_glist_result_set_new DEE_GLIST_RESULT_SET DEE_GLIST_RESULT_SET_CLASS @@ -86,6 +128,7 @@ DEE_IS_GLIST_RESULT_SET DEE_IS_GLIST_RESULT_SET_CLASS DEE_TYPE_GLIST_RESULT_SET +dee_glist_result_set_get_type
@@ -108,8 +151,6 @@
dee-index DeeIndex -DeeAnalyzer -DeeAnalyzerFunc DeeIndex DeeIndexClass DeeIndexIterFunc @@ -120,6 +161,7 @@ dee_index_get_n_rows dee_index_get_n_rows_for_term dee_index_get_n_terms +dee_index_get_reader dee_index_get_supported_term_match_flags dee_index_lookup dee_index_lookup_one @@ -142,16 +184,17 @@
dee-model DeeModel +DeeCompareRowFunc DeeModelIface DeeModelIter DeeModelTag dee_model_append dee_model_append_row -dee_model_append_valist dee_model_build_row -dee_model_build_row_valist dee_model_clear dee_model_clear_tag +dee_model_find_row_sorted +dee_model_find_sorted dee_model_get dee_model_get_bool dee_model_get_column_schema @@ -171,20 +214,18 @@ dee_model_get_uchar dee_model_get_uint32 dee_model_get_uint64 -dee_model_get_valist dee_model_get_value dee_model_insert dee_model_insert_before -dee_model_insert_before_valist dee_model_insert_row dee_model_insert_row_before -dee_model_insert_valist +dee_model_insert_row_sorted +dee_model_insert_sorted dee_model_is_first dee_model_is_last dee_model_next dee_model_prepend dee_model_prepend_row -dee_model_prepend_valist dee_model_prev dee_model_register_tag dee_model_remove @@ -192,9 +233,7 @@ dee_model_set_row dee_model_set_schema dee_model_set_schema_full -dee_model_set_schema_valist dee_model_set_tag -dee_model_set_valist dee_model_set_value DEE_IS_MODEL @@ -205,14 +244,29 @@
+dee-model-reader +DeeFilter +DeeModelReader +DeeModelReaderFunc +dee_model_reader_destroy +dee_model_reader_new +dee_model_reader_new_for_int32_column +dee_model_reader_new_for_string_column +dee_model_reader_new_for_uint32_column +dee_model_reader_read +
+ +
dee-peer DeePeer DEE_PEER_DBUS_IFACE DeePeer DeePeerClass +dee_peer_get_connections dee_peer_get_swarm_leader dee_peer_get_swarm_name dee_peer_is_swarm_leader +dee_peer_list_peers dee_peer_new DEE_IS_PEER @@ -331,6 +385,25 @@
+dee-server +DeeServer +DeeServer +DeeServerClass +dee_server_get_client_address +dee_server_new +dee_server_new_for_address + +DEE_IS_SERVER +DEE_IS_SERVER_CLASS +DEE_SERVER +DEE_SERVER_CLASS +DEE_SERVER_GET_CLASS +DEE_TYPE_SERVER +DeeServerPrivate +dee_server_get_type +
+ +
dee-shared-model DeeSharedModel DEE_SHARED_MODEL_DBUS_IFACE @@ -343,6 +416,7 @@ dee_shared_model_is_leader dee_shared_model_is_synchronized dee_shared_model_new +dee_shared_model_new_for_peer dee_shared_model_new_with_back_end DEE_IS_SHARED_MODEL @@ -362,6 +436,7 @@ DeeTermListClass dee_term_list_add_term dee_term_list_clear +dee_term_list_clone dee_term_list_get_term dee_term_list_num_terms @@ -375,3 +450,60 @@ dee_term_list_get_type
+
+dee-text-analyzer +DeeTextAnalyzer +DeeTextAnalyzer +DeeTextAnalyzerClass +dee_text_analyzer_new + +DEE_IS_TEXT_ANALYZER +DEE_IS_TEXT_ANALYZER_CLASS +DEE_TEXT_ANALYZER +DEE_TEXT_ANALYZER_CLASS +DEE_TEXT_ANALYZER_GET_CLASS +DEE_TYPE_TEXT_ANALYZER +DeeTextAnalyzerPrivate +dee_text_analyzer_get_type +
+ +
+dee-transaction +DeeTransaction +DEE_TRANSACTION_ERROR +DeeTransaction +DeeTransactionClass +DeeTransactionError +dee_transaction_commit +dee_transaction_error_quark +dee_transaction_get_target +dee_transaction_is_committed +dee_transaction_new + +DEE_IS_TRANSACTION +DEE_IS_TRANSACTION_CLASS +DEE_TRANSACTION +DEE_TRANSACTION_CLASS +DEE_TRANSACTION_GET_CLASS +DEE_TYPE_TRANSACTION +DeeTransactionPrivate +dee_transaction_get_type +
+ +
+dee-tree-index +DeeTreeIndex +DeeTreeIndex +DeeTreeIndexClass +dee_tree_index_new + +DEE_IS_TREE_INDEX +DEE_IS_TREE_INDEX_CLASS +DEE_TREE_INDEX +DEE_TREE_INDEX_CLASS +DEE_TREE_INDEX_GET_CLASS +DEE_TYPE_TREE_INDEX +DeeTreeIndexPrivate +dee_tree_index_get_type +
+ diff -Nru dee-0.5.22/doc/reference/dee-1.0/dee-1.0.types dee-1.0.0/doc/reference/dee-1.0/dee-1.0.types --- dee-0.5.22/doc/reference/dee-1.0/dee-1.0.types 2011-09-23 14:17:20.000000000 +0000 +++ dee-1.0.0/doc/reference/dee-1.0/dee-1.0.types 2012-01-12 15:07:25.000000000 +0000 @@ -1,15 +1,21 @@ -dee_peer_get_type +dee_analyzer_get_type +dee_client_get_type +dee_file_resource_manager_get_type +dee_filter_model_get_type +dee_glist_result_set_get_type +dee_hash_index_get_type +dee_index_get_type dee_model_get_type -dee_serializable_model_get_type +dee_peer_get_type dee_proxy_model_get_type +dee_resource_manager_get_type +dee_result_set_get_type dee_sequence_model_get_type +dee_serializable_get_type +dee_serializable_model_get_type +dee_server_get_type dee_shared_model_get_type dee_term_list_get_type -dee_result_set_get_type -dee_index_get_type -dee_hash_index_get_type -dee_filter_model_get_type -dee_serializable_get_type -dee_resource_manager_get_type -dee_file_resource_manager_get_type - +dee_text_analyzer_get_type +dee_transaction_get_type +dee_tree_index_get_type diff -Nru dee-0.5.22/doc/reference/dee-1.0/html/annotation-glossary.html dee-1.0.0/doc/reference/dee-1.0/html/annotation-glossary.html --- dee-0.5.22/doc/reference/dee-1.0/html/annotation-glossary.html 2011-09-23 14:17:20.000000000 +0000 +++ dee-1.0.0/doc/reference/dee-1.0/html/annotation-glossary.html 2012-01-12 15:07:25.000000000 +0000 @@ -3,7 +3,7 @@ Annotation Glossary - + @@ -24,15 +24,23 @@  |  A  |  - E + D  |  - S + C  |  T  |  - C + A +  |  + E +  |  + T +  |  + S  |  T +  |  + S
@@ -44,34 +52,47 @@

Parameter for returning results. Default is transfer full.

A

-array
-

Parameter points to an array of items.

-
allow-none

NULL is ok, both for passing and for returning.

+

D

+
+default
+

Default parameter value (for in case the shadows-to function has less parameters).

+

C

+
+closure
+

This parameter is a 'user_data', for callbacks; many bindings can pass NULL here.

+

T

+
+transfer none
+

Don't free data after the code is done.

+

A

+
+array
+

Parameter points to an array of items.

E

element-type

Generics and defining elements of containers and arrays.

+

T

+
+transfer container
+

Free data container after the code is done.

+
+transfer full
+

Free data after the code is done.

S

scope call

The callback is valid only during the call to the method.

T

-transfer full
-

Free data after the code is done.

-
type

Override the parsed C type with given type

-

C

-
-closure
-

This parameter is a 'user_data', for callbacks; many bindings can pass NULL here.

-

T

+

S

-transfer none
-

Don't free data after the code is done.

+scope notified +

The callback is valid until the GDestroyNotify argument is called.

A

-DeeAnalyzer, struct in DeeIndex +DeeAnalyzer, struct in DeeAnalyzer +
+
+
+DeeAnalyzerClass, struct in DeeAnalyzer +
+
+
+dee_analyzer_add_term_filter, function in DeeAnalyzer +
+
+
+dee_analyzer_analyze, function in DeeAnalyzer +
+
+
+dee_analyzer_collate_cmp, function in DeeAnalyzer +
+
+
+dee_analyzer_collate_cmp_func, function in DeeAnalyzer +
+
+
+dee_analyzer_collate_key, function in DeeAnalyzer +
+
+
+dee_analyzer_new, function in DeeAnalyzer +
+
+
+dee_analyzer_tokenize, function in DeeAnalyzer +
+
+

C

+
+DeeClient, struct in DeeClient +
+
+
+DeeClient:bus-address, object property in DeeClient
-DeeAnalyzerFunc, user_function in DeeIndex +DeeClientClass, struct in DeeClient
-dee_analyzer_new_for_full_text_column, function in Analyzers +dee_client_new, function in DeeClient
-dee_analyzer_new_for_int32_column, function in Analyzers +dee_client_new_for_address, function in DeeClient
-dee_analyzer_new_for_key_column, function in Analyzers +DeeCollatorFunc, user_function in DeeAnalyzer
-dee_analyzer_new_for_uint32_column, function in Analyzers +DeeCompareRowFunc, user_function in DeeModel

F

@@ -96,7 +139,15 @@
-DeeFilter, struct in DeeFilterModel +DeeFilter, struct in Model Readers +
+
+
+DeeFilterMapFunc, user_function in Filters +
+
+
+DeeFilterMapNotify, user_function in Filters
@@ -112,6 +163,14 @@
+dee_filter_destroy, function in Filters +
+
+
+dee_filter_map, function in Filters +
+
+
dee_filter_model_append_iter, function in DeeFilterModel
@@ -140,6 +199,10 @@
+dee_filter_new, function in Filters +
+
+
dee_filter_new_collator, function in Filters
@@ -159,6 +222,14 @@ dee_filter_new_regex, function in Filters
+
+dee_filter_new_sort, function in Filters +
+
+
+dee_filter_notify, function in Filters +
+

G

DeeGListResultSet, struct in DeeGListResultSet @@ -168,6 +239,10 @@ DeeGListResultSetClass, struct in DeeGListResultSet
+
+dee_glist_result_set_new, function in DeeGListResultSet +
+

H

DeeHashIndex, struct in DeeHashIndex @@ -195,6 +270,10 @@
+DeeIndex:reader, object property in DeeIndex +
+
+
DeeIndexClass, struct in DeeIndex
@@ -227,6 +306,10 @@
+dee_index_get_reader, function in DeeIndex +
+
+
dee_index_get_supported_term_match_flags, function in DeeIndex
@@ -248,11 +331,11 @@
-DeeModelMapFunc, user_function in DeeFilterModel +DeeModelReader, struct in Model Readers
-DeeModelMapNotify, user_function in DeeFilterModel +DeeModelReaderFunc, user_function in Model Readers
@@ -268,23 +351,23 @@
-dee_model_append_valist, function in DeeModel +dee_model_build_row, function in DeeModel
-dee_model_build_row, function in DeeModel +dee_model_clear, function in DeeModel
-dee_model_build_row_valist, function in DeeModel +dee_model_clear_tag, function in DeeModel
-dee_model_clear, function in DeeModel +dee_model_find_row_sorted, function in DeeModel
-dee_model_clear_tag, function in DeeModel +dee_model_find_sorted, function in DeeModel
@@ -364,10 +447,6 @@
-dee_model_get_valist, function in DeeModel -
-
-
dee_model_get_value, function in DeeModel
@@ -380,19 +459,19 @@
-dee_model_insert_before_valist, function in DeeModel +dee_model_insert_row, function in DeeModel
-dee_model_insert_row, function in DeeModel +dee_model_insert_row_before, function in DeeModel
-dee_model_insert_row_before, function in DeeModel +dee_model_insert_row_sorted, function in DeeModel
-dee_model_insert_valist, function in DeeModel +dee_model_insert_sorted, function in DeeModel
@@ -416,11 +495,31 @@
-dee_model_prepend_valist, function in DeeModel +dee_model_prev, function in DeeModel
-dee_model_prev, function in DeeModel +dee_model_reader_destroy, function in Model Readers +
+
+
+dee_model_reader_new, function in Model Readers +
+
+
+dee_model_reader_new_for_int32_column, function in Model Readers +
+
+
+dee_model_reader_new_for_string_column, function in Model Readers +
+
+
+dee_model_reader_new_for_uint32_column, function in Model Readers +
+
+
+dee_model_reader_read, function in Model Readers
@@ -448,24 +547,24 @@
-dee_model_set_schema_valist, function in DeeModel +dee_model_set_tag, function in DeeModel
-dee_model_set_tag, function in DeeModel +dee_model_set_value, function in DeeModel
+

P

-dee_model_set_valist, function in DeeModel +DeePeer, struct in DeePeer
-dee_model_set_value, function in DeeModel +DeePeer::connection-acquired, object signal in DeePeer
-

P

-DeePeer, struct in DeePeer +DeePeer::connection-closed, object signal in DeePeer
@@ -493,6 +592,10 @@
+dee_peer_get_connections, function in DeePeer +
+
+
dee_peer_get_swarm_leader, function in DeePeer
@@ -505,6 +608,10 @@
+dee_peer_list_peers, function in DeePeer +
+
+
dee_peer_new, function in DeePeer
@@ -639,10 +746,46 @@
+DeeServer, struct in DeeServer +
+
+
+DeeServer:bus-address, object property in DeeServer +
+
+
+DeeServer:same-user-only, object property in DeeServer +
+
+
+DeeServerClass, struct in DeeServer +
+
+
+dee_server_get_client_address, function in DeeServer +
+
+
+dee_server_new, function in DeeServer +
+
+
+dee_server_new_for_address, function in DeeServer +
+
+
DeeSharedModel, struct in DeeSharedModel
+DeeSharedModel::begin-transaction, object signal in DeeSharedModel +
+
+
+DeeSharedModel::end-transaction, object signal in DeeSharedModel +
+
+
DeeSharedModel:peer, object property in DeeSharedModel
@@ -687,11 +830,19 @@
+dee_shared_model_new_for_peer, function in DeeSharedModel +
+
+
dee_shared_model_new_with_back_end, function in DeeSharedModel

T

+DeeTermFilterFunc, user_function in DeeAnalyzer +
+
+
DeeTermList, struct in DeeTermList
@@ -712,6 +863,10 @@
+dee_term_list_clone, function in DeeTermList +
+
+
dee_term_list_get_term, function in DeeTermList
@@ -719,6 +874,70 @@ dee_term_list_num_terms, function in DeeTermList
+
+DeeTextAnalyzer, struct in DeeTextAnalyzer +
+
+
+DeeTextAnalyzerClass, struct in DeeTextAnalyzer +
+
+
+dee_text_analyzer_new, function in DeeTextAnalyzer +
+
+
+DeeTransaction, struct in DeeTransaction +
+
+
+DeeTransaction:target, object property in DeeTransaction +
+
+
+DeeTransactionClass, struct in DeeTransaction +
+
+
+DeeTransactionError, enum in DeeTransaction +
+
+
+dee_transaction_commit, function in DeeTransaction +
+
+
+DEE_TRANSACTION_ERROR, macro in DeeTransaction +
+
+
+dee_transaction_error_quark, function in DeeTransaction +
+
+
+dee_transaction_get_target, function in DeeTransaction +
+
+
+dee_transaction_is_committed, function in DeeTransaction +
+
+
+dee_transaction_new, function in DeeTransaction +
+
+
+DeeTreeIndex, struct in DeeTreeIndex +
+
+
+DeeTreeIndexClass, struct in DeeTreeIndex +
+
+
+dee_tree_index_new, function in DeeTreeIndex +
+
+
+
+DeeClient — Creates a client object you can use to connect + to a DeeServer. +
+
DeePeer — Finds other objects with the same swarm-name on the bus. -
+ +
+DeeServer — Creates a server object you can connect to. +
+
-DeeModel — A generic table model interface +Filters — A suite of simple DeeFilters for use with DeeFilterModels
-DeeSharedModel — A DeeModel that can synchronize with other - DeeSharedModel objects across D-Bus. +DeeFilterModel — A DeeModel that contains a filtered subset of + another DeeModel
-DeeSequenceModel — A DeeModel implementation backed by a GSequence +DeeModel — A generic table model interface
DeeProxyModel — A model that wraps another underlying DeeModel
-DeeSerializableModel +DeeSequenceModel — A DeeModel implementation backed by a GSequence
-DeeFilterModel — A DeeModel that contains a filtered subset of - another DeeModel +DeeSerializableModel — Abstract base class for easing implementations of + DeeModels providing a unique version number + for each row +
+
+DeeSharedModel — A DeeModel that can synchronize with other + DeeSharedModel objects across D-Bus.
-Filters — A suite of simple DeeFilters for use with DeeFilterModels +DeeTransaction — A self contained change set for a DeeModel
diff -Nru dee-0.5.22/doc/reference/dee-1.0/html/ch03.html dee-1.0.0/doc/reference/dee-1.0/html/ch03.html --- dee-0.5.22/doc/reference/dee-1.0/html/ch03.html 2011-09-23 14:17:20.000000000 +0000 +++ dee-1.0.0/doc/reference/dee-1.0/html/ch03.html 2012-01-12 15:07:25.000000000 +0000 @@ -3,40 +3,49 @@ Indexes - + - - + + - + - +

-Indexes

+Indexes
-DeeIndex — An inverted index interface for smart access to a DeeModel +DeeAnalyzer — Primary gateway for data indexing
DeeHashIndex — A DeeHashIndex implementation doing lookups in a hash map
-DeeTermList — A simple collection type representing a list of indexed terms for a row in a DeeIndex +DeeIndex — An inverted index interface for smart access to a DeeModel +
+
+Model Readers — Extracting strings from DeeModels
DeeResultSet — Cursor-like interface for results sets
-Analyzers — A suite of simple DeeAnalyzers of common operations +DeeTermList — A simple collection type representing a list of indexed terms for a row in a DeeIndex +
+
+DeeTextAnalyzer — Analyze UTF8 text +
+
+DeeTreeIndex — A DeeTreeIndex backed by a balanced binary tree
diff -Nru dee-0.5.22/doc/reference/dee-1.0/html/ch04.html dee-1.0.0/doc/reference/dee-1.0/html/ch04.html --- dee-0.5.22/doc/reference/dee-1.0/html/ch04.html 2011-09-23 14:17:20.000000000 +0000 +++ dee-1.0.0/doc/reference/dee-1.0/html/ch04.html 2012-01-12 15:07:25.000000000 +0000 @@ -3,34 +3,34 @@ Resources and Serialization - + - - + + - + - +

-Resources and Serialization

+Resources and Serialization
-DeeSerializable — Interface for classes that can serialize to and from GVariants +DeeFileResourceManager — A resource manager backed by memory mapped files
DeeResourceManager — Store and load DeeSerializables by name
-DeeFileResourceManager — A resource manager backed by memory mapped files +DeeSerializable — Interface for classes that can serialize to and from GVariants
diff -Nru dee-0.5.22/doc/reference/dee-1.0/html/dee-1.0-Analyzers.html dee-1.0.0/doc/reference/dee-1.0/html/dee-1.0-Analyzers.html --- dee-0.5.22/doc/reference/dee-1.0/html/dee-1.0-Analyzers.html 2011-09-23 14:17:20.000000000 +0000 +++ dee-1.0.0/doc/reference/dee-1.0/html/dee-1.0-Analyzers.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,161 +0,0 @@ - - - - -Analyzers - - - - - - - - - - - - - - - - - - - -
-
-
- - -
-

Analyzers

-

Analyzers — A suite of simple DeeAnalyzers of common operations

-
- -
-

Description

-
-
-

Details

-
-

dee_analyzer_new_for_full_text_column ()

-
DeeAnalyzer *       dee_analyzer_new_for_full_text_column
-                                                        (guint column);
-

-Create a DeeAnalyzer that does a (simple) full text analysis of textual -data in some column. -

-

-The terms will be split on any non-alphanumeric character, run through -g_utf8_normalize(), and then g_utf8_strdown(). -

-
-- - - - - - - - - - -

column :

The index of the column to get full text from

Returns :

A newly allocated DeeAnalyzer. Do not modify it. -Free with g_free(). [transfer full] -
-
-
-
-

dee_analyzer_new_for_int32_column ()

-
DeeAnalyzer *       dee_analyzer_new_for_int32_column   (guint column);
-

-Create a DeeAnalyzer that extracts an 32 bit integer from a given column -in a DeeModel. -

-
-- - - - - - - - - - -

column :

The index of the column to get a gint32 from

Returns :

A newly allocated DeeAnalyzer. Do not modify it. -Free with g_free(). [transfer full] -
-
-
-
-

dee_analyzer_new_for_key_column ()

-
DeeAnalyzer *       dee_analyzer_new_for_key_column     (guint column);
-

-Create a DeeAnalyzer that takes the string from a column in the model -and treats that string as one single term. -

-
-- - - - - - - - - - -

column :

The index of the column to get strings from

Returns :

A newly allocated DeeAnalyzer. Do not modify it. -Free with g_free(). [transfer full] -
-
-
-
-

dee_analyzer_new_for_uint32_column ()

-
DeeAnalyzer *       dee_analyzer_new_for_uint32_column  (guint column);
-

-Create a DeeAnalyzer that extracts an unsigned 32 integer from a given -column in a DeeModel. -

-
-- - - - - - - - - - -

column :

The index of the column to get a guint32 from

Returns :

A newly allocated DeeAnalyzer. Do not modify it. -Free with g_free(). [transfer full] -
-
-
-
- - - \ No newline at end of file diff -Nru dee-0.5.22/doc/reference/dee-1.0/html/dee-1.0-DeeModel.html dee-1.0.0/doc/reference/dee-1.0/html/dee-1.0-DeeModel.html --- dee-0.5.22/doc/reference/dee-1.0/html/dee-1.0-DeeModel.html 2011-09-23 14:17:20.000000000 +0000 +++ dee-1.0.0/doc/reference/dee-1.0/html/dee-1.0-DeeModel.html 2012-01-12 15:07:25.000000000 +0000 @@ -3,22 +3,22 @@ DeeModel - + - - + + - + - + - +out_row_members if it was not NULL +or a newly allocated array otherwise which you must free +with g_free(). The variants in the array will have a strong +reference and needs to be freed with g_variant_unref(). [array zero-terminated=1] + @@ -939,10 +1118,9 @@

Returns :

-A NULL-terminated -array of GVariant type strings. The length of +A NULL-terminated array of GVariant type strings. The length of the returned array is written to num_columns. The returned array -should not be freed or modified. It is owned by the model. [array][element-type utf8][transfer none] +should not be freed or modified. It is owned by the model. [array length=num_columns][element-type utf8][transfer none] @@ -1047,7 +1225,7 @@

dee_model_get_uint32 ()

-
guint32             dee_model_get_uint32                (DeeModel *self,
+
guint32             dee_model_get_uint32                (DeeModel *self,
                                                          DeeModelIter *iter,
                                                          guint column);
@@ -1078,7 +1256,7 @@

dee_model_get_uint64 ()

-
guint64             dee_model_get_uint64                (DeeModel *self,
+
guint64             dee_model_get_uint64                (DeeModel *self,
                                                          DeeModelIter *iter,
                                                          guint column);
@@ -1108,15 +1286,6 @@
-

dee_model_get_valist ()

-
void                dee_model_get_valist                (DeeModel *self,
-                                                         DeeModelIter *iter,
-                                                         va_list args);
-

-

-
-
-

dee_model_get_value ()

GVariant *          dee_model_get_value                 (DeeModel *self,
                                                          DeeModelIter *iter,
@@ -1232,15 +1401,6 @@
 

-

dee_model_insert_before_valist ()

-
DeeModelIter *      dee_model_insert_before_valist      (DeeModel *self,
-                                                         DeeModelIter *iter,
-                                                         va_list *args);
-

-

-
-
-

dee_model_insert_row ()

DeeModelIter *      dee_model_insert_row                (DeeModel *self,
                                                          guint pos,
@@ -1321,12 +1481,86 @@
 

-

dee_model_insert_valist ()

-
DeeModelIter *      dee_model_insert_valist             (DeeModel *self,
-                                                         guint pos,
-                                                         va_list *args);
+

dee_model_insert_row_sorted ()

+
DeeModelIter *      dee_model_insert_row_sorted         (DeeModel *self,
+                                                         GVariant **row_members,
+                                                         DeeCompareRowFunc cmp_func,
+                                                         gpointer user_data);

+Inserts a row in self according to the sorting specified by cmp_func. +If you use this method for insertion you should not use other methods as this +method assumes the model to be already sorted by cmp_func.

+
++ + + + + + + + + + + + + + + + + + + + + + +

self :

The model to do a sorted insert on

row_members :

An array of +GVariants with type signature matching those of the +column schemas of self. If any of the variants have floating +references they will be consumed. [array zero-terminated=1] +

cmp_func :

Callback used for comparison or rows. [scope call] +

user_data :

Arbitrary pointer passed to cmp_func during search. [closure] +

Returns :

A DeeModelIter pointing to the new row. [transfer none][type Dee.ModelIter] +
+
+
+
+

dee_model_insert_sorted ()

+
DeeModelIter *      dee_model_insert_sorted             (DeeModel *self,
+                                                         DeeCompareRowFunc cmp_func,
+                                                         gpointer user_data,
+                                                         ...);
+

+Convenience function for calling dee_model_insert_row_sorted(). +Inserts a row in self according to the sorting specified by cmp_func. +If you use this method for insertion you should not use other methods as this +method assumes the model to be already sorted by cmp_func. +

+
++ + + + + + + + + + + + + + + + + + +

self :

The model to do a sorted insert on

cmp_func :

Callback used for comparison or rows. [scope call] +

user_data :

Arbitrary pointer passed to cmp_func during search. [closure] +

Returns :

A DeeModelIter pointing to the new row. [transfer none][type Dee.ModelIter] +

@@ -1334,7 +1568,7 @@
gboolean            dee_model_is_first                  (DeeModel *self,
                                                          DeeModelIter *iter);

-Where iter is at the start of self. +Checks if iter is the very first iter self.

@@ -1363,7 +1597,8 @@
gboolean            dee_model_is_last                   (DeeModel *self,
                                                          DeeModelIter *iter);

-Whether iter is at the end of self. +Whether iter is the end iter of self. Note that the end iter points +right after the last valid row in self.

@@ -1484,14 +1719,6 @@
-

dee_model_prepend_valist ()

-
DeeModelIter *      dee_model_prepend_valist            (DeeModel *self,
-                                                         va_list *args);
-

-

-
-
-

dee_model_prev ()

DeeModelIter *      dee_model_prev                      (DeeModel *self,
                                                          DeeModelIter *iter);
@@ -1730,22 +1957,6 @@

-

dee_model_set_schema_valist ()

-
void                dee_model_set_schema_valist         (DeeModel *self,
-                                                         va_list *args);
-

-Like dee_model_set_schema() but for language bindings. -

-
-- - - - -

self :

The DeeModel to change
-
-
-

dee_model_set_tag ()

void                dee_model_set_tag                   (DeeModel *self,
                                                          DeeModelIter *iter,
@@ -1784,15 +1995,6 @@
 

-

dee_model_set_valist ()

-
void                dee_model_set_valist                (DeeModel *self,
-                                                         DeeModelIter *iter,
-                                                         va_list *args);
-

-

-
-
-

dee_model_set_value ()

void                dee_model_set_value                 (DeeModel *self,
                                                          DeeModelIter *iter,
diff -Nru dee-0.5.22/doc/reference/dee-1.0/html/dee-1.0-DeeResourceManager.html dee-1.0.0/doc/reference/dee-1.0/html/dee-1.0-DeeResourceManager.html
--- dee-0.5.22/doc/reference/dee-1.0/html/dee-1.0-DeeResourceManager.html	2011-09-23 14:17:20.000000000 +0000
+++ dee-1.0.0/doc/reference/dee-1.0/html/dee-1.0-DeeResourceManager.html	2012-01-12 15:07:25.000000000 +0000
@@ -3,22 +3,22 @@
 
 
 DeeResourceManager
-
+
 
 
-
-
+
+
 
 
 
 
 
-
+
-
+