Simple SWIG interface

This commit is contained in:
Mark Callaghan 2007-05-30 23:48:36 +00:00
parent 15addf35aa
commit 12c7f6a1c5
12 changed files with 644 additions and 0 deletions

View file

@ -20,6 +20,14 @@ AC_PROG_AWK
AC_PROG_RANLIB
# Checks for libraries.
# For SWIG & Python
# AC_PROG_LIBTOOL
AM_PATH_PYTHON(2.3)
AC_PROG_SWIG(1.3)
SWIG_ENABLE_CXX
SWIG_PYTHON
AM_CONDITIONAL(HAVE_SWIG, test x"$have_swig" = "xyes")
#AM_PATH_CHECK(,[have_check="yes"],
# AC_MSG_WARN([Check not found; cannot run unit tests!])
# [have_check="no"])
@ -232,6 +240,7 @@ AC_CONFIG_FILES([Makefile
test/monotree/Makefile
test/pobj/Makefile
utilities/Makefile
utilities/swig/Makefile
examples/Makefile
])
AC_OUTPUT

View file

@ -475,6 +475,8 @@ int Tbegin();
*/
compensated_function void Tupdate(int xid, recordid rid,
const void *dat, int op);
compensated_function void TupdateStr(int xid, recordid rid,
const char *dat, int op);
compensated_function void TupdateRaw(int xid, recordid rid,
const void *dat, int op);
compensated_function void TupdateDeferred(int xid, recordid rid,
@ -485,6 +487,7 @@ compensated_function void TupdateDeferred(int xid, recordid rid,
* @param dat buffer into which data goes
*/
compensated_function void Tread(int xid, recordid rid, void *dat);
compensated_function void TreadStr(int xid, recordid rid, char *dat);
void TreadUnlocked(int xid, recordid rid, void *dat);
/**

127
m4/ac_pkg_swig.m4 Normal file
View file

@ -0,0 +1,127 @@
##### http://autoconf-archive.cryp.to/ac_pkg_swig.html
#
# SYNOPSIS
#
# AC_PROG_SWIG([major.minor.micro])
#
# DESCRIPTION
#
# This macro searches for a SWIG installation on your system. If
# found you should call SWIG via $(SWIG). You can use the optional
# first argument to check if the version of the available SWIG is
# greater than or equal to the value of the argument. It should have
# the format: N[.N[.N]] (N is a number between 0 and 999. Only the
# first N is mandatory.)
#
# If the version argument is given (e.g. 1.3.17), AC_PROG_SWIG checks
# that the swig package is this version number or higher.
#
# In configure.in, use as:
#
# AC_PROG_SWIG(1.3.17)
# SWIG_ENABLE_CXX
# SWIG_MULTI_MODULE_SUPPORT
# SWIG_PYTHON
#
# LAST MODIFICATION
#
# 2006-10-22
#
# COPYLEFT
#
# Copyright (c) 2006 Sebastian Huber <sebastian-huber@web.de>
# Copyright (c) 2006 Alan W. Irwin <irwin@beluga.phys.uvic.ca>
# Copyright (c) 2006 Rafael Laboissiere <rafael@laboissiere.net>
# Copyright (c) 2006 Andrew Collier <colliera@ukzn.ac.za>
#
# This program 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.
#
# 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
#
# As a special exception, the respective Autoconf Macro's copyright
# owner gives unlimited permission to copy, distribute and modify the
# configure scripts that are the output of Autoconf when processing
# the Macro. You need not follow the terms of the GNU General Public
# License when using or distributing such scripts, even though
# portions of the text of the Macro appear in them. The GNU General
# Public License (GPL) does govern all other use of the material that
# constitutes the Autoconf Macro.
#
# This special exception to the GPL applies to versions of the
# Autoconf Macro released by the Autoconf Macro Archive. When you
# make and distribute a modified version of the Autoconf Macro, you
# may extend this special exception to the GPL to apply to your
# modified version as well.
AC_DEFUN([AC_PROG_SWIG],[
AC_PATH_PROG([SWIG],[swig])
have_swig="no"
if test -z "$SWIG" ; then
AC_MSG_WARN([cannot find 'swig' program. You should look at http://www.swig.org])
SWIG='echo "Error: SWIG is not installed. You should look at http://www.swig.org" ; false'
elif test -n "$1" ; then
AC_MSG_CHECKING([for SWIG version])
[swig_version=`$SWIG -version 2>&1 | grep 'SWIG Version' | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`]
AC_MSG_RESULT([$swig_version])
if test -n "$swig_version" ; then
# Calculate the required version number components
[required=$1]
[required_major=`echo $required | sed 's/[^0-9].*//'`]
if test -z "$required_major" ; then
[required_major=0]
fi
[required=`echo $required | sed 's/[0-9]*[^0-9]//'`]
[required_minor=`echo $required | sed 's/[^0-9].*//'`]
if test -z "$required_minor" ; then
[required_minor=0]
fi
[required=`echo $required | sed 's/[0-9]*[^0-9]//'`]
[required_patch=`echo $required | sed 's/[^0-9].*//'`]
if test -z "$required_patch" ; then
[required_patch=0]
fi
# Calculate the available version number components
[available=$swig_version]
[available_major=`echo $available | sed 's/[^0-9].*//'`]
if test -z "$available_major" ; then
[available_major=0]
fi
[available=`echo $available | sed 's/[0-9]*[^0-9]//'`]
[available_minor=`echo $available | sed 's/[^0-9].*//'`]
if test -z "$available_minor" ; then
[available_minor=0]
fi
[available=`echo $available | sed 's/[0-9]*[^0-9]//'`]
[available_patch=`echo $available | sed 's/[^0-9].*//'`]
if test -z "$available_patch" ; then
[available_patch=0]
fi
if test $available_major -ne $required_major \
-o $available_minor -ne $required_minor \
-o $available_patch -lt $required_patch ; then
AC_MSG_WARN([SWIG version >= $1 is required. You have $swig_version. You should look at http://www.swig.org])
SWIG='echo "Error: SWIG version >= $1 is required. You have '"$swig_version"'. You should look at http://www.swig.org" ; false'
else
AC_MSG_NOTICE([SWIG executable is '$SWIG'])
SWIG_LIB=`$SWIG -swiglib`
AC_MSG_NOTICE([SWIG library directory is '$SWIG_LIB'])
have_swig="yes"
fi
else
AC_MSG_WARN([cannot determine SWIG version])
SWIG='echo "Error: Cannot determine SWIG version. You should look at http://www.swig.org" ; false'
fi
fi
AC_SUBST([SWIG_LIB])
])

269
m4/ac_python_devel.m4 Normal file
View file

@ -0,0 +1,269 @@
##### http://autoconf-archive.cryp.to/ac_python_devel.html
#
# SYNOPSIS
#
# AC_PYTHON_DEVEL([version])
#
# DESCRIPTION
#
# Note: Defines as a precious variable "PYTHON_VERSION". Don't
# override it in your configure.ac.
#
# This macro checks for Python and tries to get the include path to
# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and
# $(PYTHON_LDFLAGS) output variables. It also exports
# $(PYTHON_EXTRA_LIBS) and $(PYTHON_EXTRA_LDFLAGS) for embedding
# Python in your code.
#
# You can search for some particular version of Python by passing a
# parameter to this macro, for example ">= '2.3.1'", or "== '2.4'".
# Please note that you *have* to pass also an operator along with the
# version to match, and pay special attention to the single quotes
# surrounding the version number. Don't use "PYTHON_VERSION" for
# this: that environment variable is declared as precious and thus
# reserved for the end-user.
#
# This macro should work for all versions of Python >= 2.1.0. As an
# end user, you can disable the check for the python version by
# setting the PYTHON_NOVERSIONCHECK environment variable to something
# else than the empty string.
#
# If you need to use this macro for an older Python version, please
# contact the authors. We're always open for feedback.
#
# LAST MODIFICATION
#
# 2006-10-22
#
# COPYLEFT
#
# Copyright (c) 2006 Sebastian Huber <sebastian-huber@web.de>
# Copyright (c) 2006 Alan W. Irwin <irwin@beluga.phys.uvic.ca>
# Copyright (c) 2006 Rafael Laboissiere <rafael@laboissiere.net>
# Copyright (c) 2006 Andrew Collier <colliera@ukzn.ac.za>
# Copyright (c) 2006 Matteo Settenvini <matteo@member.fsf.org>
# Copyright (c) 2006 Horst Knorr <hk_classes@knoda.org>
#
# This program 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.
#
# 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
#
# As a special exception, the respective Autoconf Macro's copyright
# owner gives unlimited permission to copy, distribute and modify the
# configure scripts that are the output of Autoconf when processing
# the Macro. You need not follow the terms of the GNU General Public
# License when using or distributing such scripts, even though
# portions of the text of the Macro appear in them. The GNU General
# Public License (GPL) does govern all other use of the material that
# constitutes the Autoconf Macro.
#
# This special exception to the GPL applies to versions of the
# Autoconf Macro released by the Autoconf Macro Archive. When you
# make and distribute a modified version of the Autoconf Macro, you
# may extend this special exception to the GPL to apply to your
# modified version as well.
AC_DEFUN([AC_PYTHON_DEVEL],[
#
# Allow the use of a (user set) custom python version
#
AC_ARG_VAR([PYTHON_VERSION],[The installed Python
version to use, for example '2.3'. This string
will be appended to the Python interpreter
canonical name.])
AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]])
if test -z "$PYTHON"; then
AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path])
PYTHON_VERSION=""
fi
#
# Check for a version of Python >= 2.1.0
#
AC_MSG_CHECKING([for a version of Python >= '2.1.0'])
ac_supports_python_ver=`$PYTHON -c "import sys, string; \
ver = string.split(sys.version)[[0]]; \
print ver >= '2.1.0'"`
if test "$ac_supports_python_ver" != "True"; then
if test -z "$PYTHON_NOVERSIONCHECK"; then
AC_MSG_RESULT([no])
AC_MSG_FAILURE([
This version of the AC@&t@_PYTHON_DEVEL macro
doesn't work properly with versions of Python before
2.1.0. You may need to re-run configure, setting the
variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG,
PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
to something else than an empty string.
])
else
AC_MSG_RESULT([skip at user request])
fi
else
AC_MSG_RESULT([yes])
fi
#
# if the macro parameter ``version'' is set, honour it
#
if test -n "$1"; then
AC_MSG_CHECKING([for a version of Python $1])
ac_supports_python_ver=`$PYTHON -c "import sys, string; \
ver = string.split(sys.version)[[0]]; \
print ver $1"`
if test "$ac_supports_python_ver" = "True"; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
AC_MSG_ERROR([this package requires Python $1.
If you have it installed, but it isn't the default Python
interpreter in your system path, please pass the PYTHON_VERSION
variable to configure. See ``configure --help'' for reference.
])
PYTHON_VERSION=""
fi
fi
#
# Check if you have distutils, else fail
#
AC_MSG_CHECKING([for the distutils Python package])
ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
if test -z "$ac_distutils_result"; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
AC_MSG_ERROR([cannot import Python module "distutils".
Please check your Python installation. The error was:
$ac_distutils_result])
PYTHON_VERSION=""
fi
#
# Check for Python include path
#
AC_MSG_CHECKING([for Python include path])
if test -z "$PYTHON_CPPFLAGS"; then
python_path=`$PYTHON -c "import distutils.sysconfig; \
print distutils.sysconfig.get_python_inc();"`
if test -n "${python_path}"; then
python_path="-I$python_path"
fi
PYTHON_CPPFLAGS=$python_path
fi
AC_MSG_RESULT([$PYTHON_CPPFLAGS])
AC_SUBST([PYTHON_CPPFLAGS])
#
# Check for Python library path
#
AC_MSG_CHECKING([for Python library path])
if test -z "$PYTHON_LDFLAGS"; then
# (makes two attempts to ensure we've got a version number
# from the interpreter)
py_version=`$PYTHON -c "from distutils.sysconfig import *; \
from string import join; \
print join(get_config_vars('VERSION'))"`
if test "$py_version" == "[None]"; then
if test -n "$PYTHON_VERSION"; then
py_version=$PYTHON_VERSION
else
py_version=`$PYTHON -c "import sys; \
print sys.version[[:3]]"`
fi
fi
PYTHON_LDFLAGS=`$PYTHON -c "from distutils.sysconfig import *; \
from string import join; \
print '-L' + get_python_lib(0,1), \
'-lpython';"`$py_version
fi
AC_MSG_RESULT([$PYTHON_LDFLAGS])
AC_SUBST([PYTHON_LDFLAGS])
#
# Check for site packages
#
AC_MSG_CHECKING([for Python site-packages path])
if test -z "$PYTHON_SITE_PKG"; then
PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
print distutils.sysconfig.get_python_lib(0,0);"`
fi
AC_MSG_RESULT([$PYTHON_SITE_PKG])
AC_SUBST([PYTHON_SITE_PKG])
#
# libraries which must be linked in when embedding
#
AC_MSG_CHECKING(python extra libraries)
if test -z "$PYTHON_EXTRA_LIBS"; then
PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
conf = distutils.sysconfig.get_config_var; \
print conf('LOCALMODLIBS'), conf('LIBS')"`
fi
AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
AC_SUBST(PYTHON_EXTRA_LIBS)
#
# linking flags needed when embedding
#
AC_MSG_CHECKING(python extra linking flags)
if test -z "$PYTHON_EXTRA_LDFLAGS"; then
PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
conf = distutils.sysconfig.get_config_var; \
print conf('LINKFORSHARED')"`
fi
AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
AC_SUBST(PYTHON_EXTRA_LDFLAGS)
#
# final check to see if everything compiles alright
#
AC_MSG_CHECKING([consistency of all components of python development environment])
AC_LANG_PUSH([C])
# save current global flags
LIBS="$ac_save_LIBS $PYTHON_LDFLAGS"
CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
AC_TRY_LINK([
#include <Python.h>
],[
Py_Initialize();
],[pythonexists=yes],[pythonexists=no])
AC_MSG_RESULT([$pythonexists])
if test ! "$pythonexists" = "yes"; then
AC_MSG_ERROR([
Could not link test program to Python. Maybe the main Python library has been
installed in some non-standard library path. If so, pass it to configure,
via the LDFLAGS environment variable.
Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"
============================================================================
ERROR!
You probably have to install the development version of the Python package
for your distribution. The exact name of this package varies among them.
============================================================================
])
PYTHON_VERSION=""
fi
AC_LANG_POP
# turn back to default flags
CPPFLAGS="$ac_save_CPPFLAGS"
LIBS="$ac_save_LIBS"
#
# all done!
#
])

56
m4/swig_enable_cxx.m4 Normal file
View file

@ -0,0 +1,56 @@
##### http://autoconf-archive.cryp.to/swig_enable_cxx.html
#
# SYNOPSIS
#
# SWIG_ENABLE_CXX
#
# DESCRIPTION
#
# Enable SWIG C++ support. This affects all invocations of $(SWIG).
#
# LAST MODIFICATION
#
# 2006-10-22
#
# COPYLEFT
#
# Copyright (c) 2006 Sebastian Huber <sebastian-huber@web.de>
# Copyright (c) 2006 Alan W. Irwin <irwin@beluga.phys.uvic.ca>
# Copyright (c) 2006 Rafael Laboissiere <rafael@laboissiere.net>
# Copyright (c) 2006 Andrew Collier <colliera@ukzn.ac.za>
#
# This program 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.
#
# 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
#
# As a special exception, the respective Autoconf Macro's copyright
# owner gives unlimited permission to copy, distribute and modify the
# configure scripts that are the output of Autoconf when processing
# the Macro. You need not follow the terms of the GNU General Public
# License when using or distributing such scripts, even though
# portions of the text of the Macro appear in them. The GNU General
# Public License (GPL) does govern all other use of the material that
# constitutes the Autoconf Macro.
#
# This special exception to the GPL applies to versions of the
# Autoconf Macro released by the Autoconf Macro Archive. When you
# make and distribute a modified version of the Autoconf Macro, you
# may extend this special exception to the GPL to apply to your
# modified version as well.
AC_DEFUN([SWIG_ENABLE_CXX],[
AC_REQUIRE([AC_PROG_SWIG])
AC_REQUIRE([AC_PROG_CXX])
SWIG="$SWIG -c++"
])

67
m4/swig_python.m4 Normal file
View file

@ -0,0 +1,67 @@
##### http://autoconf-archive.cryp.to/swig_python.html
#
# SYNOPSIS
#
# SWIG_PYTHON([use-shadow-classes = {no, yes}])
#
# DESCRIPTION
#
# Checks for Python and provides the $(SWIG_PYTHON_CPPFLAGS), and
# $(SWIG_PYTHON_OPT) output variables.
#
# $(SWIG_PYTHON_OPT) contains all necessary SWIG options to generate
# code for Python. Shadow classes are enabled unless the value of the
# optional first argument is exactly 'no'. If you need multi module
# support (provided by the SWIG_MULTI_MODULE_SUPPORT macro) use
# $(SWIG_PYTHON_LIBS) to link against the appropriate library. It
# contains the SWIG Python runtime library that is needed by the type
# check system for example.
#
# LAST MODIFICATION
#
# 2006-10-22
#
# COPYLEFT
#
# Copyright (c) 2006 Sebastian Huber <sebastian-huber@web.de>
# Copyright (c) 2006 Alan W. Irwin <irwin@beluga.phys.uvic.ca>
# Copyright (c) 2006 Rafael Laboissiere <rafael@laboissiere.net>
# Copyright (c) 2006 Andrew Collier <colliera@ukzn.ac.za>
#
# This program 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.
#
# 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
#
# As a special exception, the respective Autoconf Macro's copyright
# owner gives unlimited permission to copy, distribute and modify the
# configure scripts that are the output of Autoconf when processing
# the Macro. You need not follow the terms of the GNU General Public
# License when using or distributing such scripts, even though
# portions of the text of the Macro appear in them. The GNU General
# Public License (GPL) does govern all other use of the material that
# constitutes the Autoconf Macro.
#
# This special exception to the GPL applies to versions of the
# Autoconf Macro released by the Autoconf Macro Archive. When you
# make and distribute a modified version of the Autoconf Macro, you
# may extend this special exception to the GPL to apply to your
# modified version as well.
AC_DEFUN([SWIG_PYTHON],[
AC_REQUIRE([AC_PROG_SWIG])
AC_REQUIRE([AC_PYTHON_DEVEL])
test "x$1" != "xno" || swig_shadow=" -noproxy"
AC_SUBST([SWIG_PYTHON_OPT],[-python$swig_shadow])
AC_SUBST([SWIG_PYTHON_CPPFLAGS],[$PYTHON_CPPFLAGS])
])

View file

@ -244,6 +244,11 @@ compensated_function void TupdateRaw(int xid, recordid rid,
releasePage(p);
}
compensated_function void TupdateStr(int xid, recordid rid,
const char *dat, int op) {
Tupdate(xid, rid, dat, op);
}
compensated_function void Tupdate(int xid, recordid rid,
const void *dat, int op) {
Page * p = loadPage(xid, rid.page);
@ -286,6 +291,10 @@ void TreadUnlocked(int xid, recordid rid, void * dat) {
releasePage(p);
}
compensated_function void TreadStr(int xid, recordid rid, char * dat) {
Tread(xid, rid, dat);
}
compensated_function void Tread(int xid, recordid rid, void * dat) {
Page * p;
try {

View file

@ -4,3 +4,9 @@ LDADD=$(top_builddir)/src/lladd/liblladd.a \
$(top_builddir)/src/libdfa/librw.a
bin_PROGRAMS=logfile_dump run_recovery truncate_log
AM_CFLAGS=${GLOBAL_CFLAGS}
SUBDIRS =
if HAVE_SWIG
SUBDIRS += swig
endif

View file

@ -0,0 +1,13 @@
BUILT_SOURCES = lladd_wrap.cc
all: $(BUILD_SOURCES)
pkgpython_PYTHON = lladd.py
pkgpyexec_LTLIBRARIES = _lladd.la
_lladd_la_SOURCES = lladd_wrap.cc
_lladd_la_CPPFLAGS = $(SWIG_PYTHON_CPPFLAGS) -I$(top_srcdir) -I$(top_srcdir)/src
_lladd_la_LDFLAGS = -module
_lladd_la_LIBADD = $(top_srcdir)/src/lladd/liblladd.a $(top_srcdir)/src/libdfa/librw.a
lladd_wrap.cc : lladd.i
$(SWIG) $(SWIG_PYTHON_OPT) -I$(top_srcdir)/src -I$(top_srcdir) -o $@ $<

View file

46
utilities/swig/ex1.py Normal file
View file

@ -0,0 +1,46 @@
#!/usr/bin/python2.4
#
"""Example 1 in Python
"""
import lladd
import sys
import array
def runit(argv):
print "init"
lladd.Tinit()
# First transaction, for writing
print "begin & alloc"
xid = lladd.Tbegin();
record_id = lladd.Talloc(xid, 4);
print "update"
write_data = array.array('l', (42,))
data_out = write_data.tostring()
assert len(data_out) == 4
lladd.TupdateStr(xid, record_id, data_out, lladd.OPERATION_SET)
lladd.Tcommit(xid)
# Second transaction, for reading
print "read"
xid = lladd.Tbegin()
# Read from Stasis into memory for data_in
data_in = '1234'
lladd.TreadStr(xid, record_id, data_in)
read_data = array.array('l', data_in)
assert read_data[0] == 42
print "done"
lladd.Tdealloc(xid, record_id)
lladd.Tabort(xid)
lladd.Tdeinit()
if __name__ == "__main__":
runit(sys.argv)

39
utilities/swig/lladd.i Normal file
View file

@ -0,0 +1,39 @@
%module lladd
%{
#include "lladd/transactional.h"
%}
extern int Tinit();
extern int Tdeinit();
extern int Tbegin();
extern void Tupdate(int xid, recordid rid, const void *dat, int op);
extern void TupdateStr(int xid, recordid rid, const char *dat, int op);
extern void TupdateRaw(int xid, recordid rid, const void *dat, int op);
extern void Tread(int xid, recordid rid, void *dat);
extern void TreadStr(int xid, recordid rid, char *dat);
extern void TreadUnlocked(int xid, recordid rid, void *dat);
extern int Tcommit(int xid);
extern int Tabort(int xid);
extern void Trevive(int xid, long lsn);
extern void TsetXIDCount(int xid);
extern int TisActiveTransaction(int xid);
extern lsn_t transactions_minRecLSN();
extern int TdurabilityLevel();
extern recordid Talloc(int xid, unsigned long size);
extern recordid TallocFromPage(int xid, long page, unsigned long size);
extern void Tdealloc(int xid, recordid rid);
%include "lladd/constants.h"