finish and test support for dynamic arrays
This commit is contained in:
		@@ -1,6 +1,9 @@
 | 
			
		||||
 | 
			
		||||
#include "parms.h"
 | 
			
		||||
 | 
			
		||||
/* are dynamic arrays supported? */
 | 
			
		||||
#undef HAVE_DYNARRAY
 | 
			
		||||
 | 
			
		||||
/* are we using gcc */
 | 
			
		||||
#undef HAVE_GCC
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										36
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								configure
									
									
									
									
										vendored
									
									
								
							@@ -3712,6 +3712,12 @@ done
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ac_ext=c
 | 
			
		||||
ac_cpp='$CPP $CPPFLAGS'
 | 
			
		||||
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 | 
			
		||||
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 | 
			
		||||
ac_compiler_gnu=$ac_cv_c_compiler_gnu
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ac_ext=c
 | 
			
		||||
@@ -4186,6 +4192,36 @@ else
 | 
			
		||||
  use_gecode=$use_gecode_default
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if dynamic arrays are supported" >&5
 | 
			
		||||
$as_echo_n "checking if dynamic arrays are supported... " >&6; }
 | 
			
		||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 | 
			
		||||
/* end confdefs.h.  */
 | 
			
		||||
 | 
			
		||||
  void foo(int n) { int a[n]; a[1]=0; }
 | 
			
		||||
int
 | 
			
		||||
main ()
 | 
			
		||||
{
 | 
			
		||||
foo(3);
 | 
			
		||||
  ;
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_ACEOF
 | 
			
		||||
if ac_fn_c_try_compile "$LINENO"; then :
 | 
			
		||||
 | 
			
		||||
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 | 
			
		||||
$as_echo "yes" >&6; }
 | 
			
		||||
 | 
			
		||||
$as_echo "#define HAVE_DYNARRAY 1" >>confdefs.h
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
else
 | 
			
		||||
 | 
			
		||||
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 | 
			
		||||
$as_echo "no" >&6; }
 | 
			
		||||
 | 
			
		||||
fi
 | 
			
		||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 | 
			
		||||
 | 
			
		||||
# Check whether --enable-tabling was given.
 | 
			
		||||
if test "${enable_tabling+set}" = set; then :
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								configure.in
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								configure.in
									
									
									
									
									
								
							@@ -55,6 +55,7 @@ AC_PROG_AWK
 | 
			
		||||
AC_SUBST(GCC)
 | 
			
		||||
AC_SUBST(C_INTERF_FLAGS)
 | 
			
		||||
AC_SUBST(C_PARSER_FLAGS)
 | 
			
		||||
AC_LANG(C)
 | 
			
		||||
 | 
			
		||||
dnl Gecode support
 | 
			
		||||
AC_CHECK_HEADER(gecode/support/config.hpp,
 | 
			
		||||
@@ -80,6 +81,15 @@ AC_ARG_ENABLE(gecode,
 | 
			
		||||
	       AC_MSG_ERROR([cannot enable gecode: python not found])
 | 
			
		||||
	    fi
 | 
			
		||||
         fi], use_gecode=$use_gecode_default)
 | 
			
		||||
AC_MSG_CHECKING([if dynamic arrays are supported])
 | 
			
		||||
AC_COMPILE_IFELSE([
 | 
			
		||||
  AC_LANG_PROGRAM([[void foo(int n) { int a[n]; a[1]=0; }]],[[foo(3);]])
 | 
			
		||||
  ],[
 | 
			
		||||
  AC_MSG_RESULT([yes])
 | 
			
		||||
  AC_DEFINE([HAVE_DYNARRAY],[1],[Define if dynamic arrays are supported])
 | 
			
		||||
  ],[
 | 
			
		||||
  AC_MSG_RESULT([no])
 | 
			
		||||
  ])
 | 
			
		||||
 | 
			
		||||
AC_ARG_ENABLE(tabling,
 | 
			
		||||
	[ --enable-tabling           support tabling ],
 | 
			
		||||
 
 | 
			
		||||
@@ -57,7 +57,7 @@ gecode_yap.o: \
 | 
			
		||||
	gecode_yap_cc_forward_auto_generated.icc \
 | 
			
		||||
	$(srcdir)/disjunctor.icc \
 | 
			
		||||
	$(srcdir)/disjunctor.hh
 | 
			
		||||
	$(CXX) -c -I. $(CXXFLAGS) $(DISJUNCTOR) -o $@ $<
 | 
			
		||||
	$(CXX) -c $(CXXFLAGS) $(DISJUNCTOR) -o $@ $<
 | 
			
		||||
 | 
			
		||||
@DO_SECOND_LD@gecode_yap.@SO@: gecode_yap.o
 | 
			
		||||
@DO_SECOND_LD@	@SHLIB_LD@ -o gecode_yap.@SO@ gecode_yap.o $(LDFLAGS) -lgecodeint -lgecodeset -lgecodesearch @EXTRA_LIBS_FOR_DLLS@
 | 
			
		||||
 
 | 
			
		||||
@@ -22,6 +22,45 @@ using namespace std;
 | 
			
		||||
using namespace generic_gecode;
 | 
			
		||||
using namespace Gecode;
 | 
			
		||||
 | 
			
		||||
extern "C"
 | 
			
		||||
{
 | 
			
		||||
#include "config.h"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
namespace generic_gecode
 | 
			
		||||
{
 | 
			
		||||
#ifndef HAVE_DYNARRAY
 | 
			
		||||
#error hello
 | 
			
		||||
  template <typename T> struct DynArray
 | 
			
		||||
  {
 | 
			
		||||
    T* _array;
 | 
			
		||||
    DynArray(int n): _array(new T[n]) {}
 | 
			
		||||
    ~DynArray() { delete[] _array; }
 | 
			
		||||
    T& operator[](int i) { return _array[i]; }
 | 
			
		||||
  };
 | 
			
		||||
#define DYNARRAY(T,A,N) DynArray<T> A(N)
 | 
			
		||||
#else
 | 
			
		||||
#define DYNARRAY(T,A,N) T A[N]
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_DYNARRAY
 | 
			
		||||
  struct SpecArray
 | 
			
		||||
  {
 | 
			
		||||
    int (*_array)[2];
 | 
			
		||||
    SpecArray(int n): _array((int (*)[2]) new int[n*2]) {}
 | 
			
		||||
    ~SpecArray() { delete[] _array; }
 | 
			
		||||
    int& operator()(int i,int j) { return _array[i][j]; }
 | 
			
		||||
  };
 | 
			
		||||
#define SPECARRAY(A,N) SpecArray A(N)
 | 
			
		||||
#define SPECARRAYELEM(A,I,J) A(I,J)
 | 
			
		||||
#define SPECARRAYDEREF(A) A._array
 | 
			
		||||
#else
 | 
			
		||||
#define SPECARRAY(A,N) int A[N][2]
 | 
			
		||||
#define SPECARRAYELEM(A,I,J) A[I][J]
 | 
			
		||||
#define SPECARRAYDEREF(A) A
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extern "C"
 | 
			
		||||
{
 | 
			
		||||
#include "SWI-Stream.h"
 | 
			
		||||
@@ -261,22 +300,6 @@ extern "C"
 | 
			
		||||
    return n;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_DYNARRAY
 | 
			
		||||
  struct SpecArray
 | 
			
		||||
  {
 | 
			
		||||
    int* _array;
 | 
			
		||||
    SpecArray(int n): _array(new int[n][2]) {}
 | 
			
		||||
    ~SpecArray() { delete[] _array; }
 | 
			
		||||
    typedef int (*_specarray)[][2];
 | 
			
		||||
    T& operator()(int i,int j) { return ((_specarray)_array)[i][j]; }
 | 
			
		||||
  };
 | 
			
		||||
#define SPECARRAY(A,N) SpecArray A(N)
 | 
			
		||||
#define SPECARRAYELEM(A,I,J) A(I,J)
 | 
			
		||||
#else
 | 
			
		||||
#define SPECARRAY(A,N) int A[N][2]
 | 
			
		||||
#define SPECARRAYELEM(A,I,J) A[I][J]
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  static IntSet
 | 
			
		||||
  gecode_IntSet_from_term(YAP_Term specs)
 | 
			
		||||
  {
 | 
			
		||||
@@ -291,7 +314,7 @@ extern "C"
 | 
			
		||||
	SPECARRAYELEM(r,i,1) = YAP_IntOfTerm(YAP_ArgOfTerm(2, head));
 | 
			
		||||
	i += 1;
 | 
			
		||||
      }
 | 
			
		||||
    return IntSet(r, n);
 | 
			
		||||
    return IntSet(SPECARRAYDEREF(r), n);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static int gecode_new_intvar_from_intset(void)
 | 
			
		||||
@@ -844,19 +867,6 @@ extern "C"
 | 
			
		||||
    return YAP_Unify(result, YAP_MkIntTerm(x.glbMax()));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_DYNARRAY
 | 
			
		||||
  template <typename T> struct DynArray
 | 
			
		||||
  {
 | 
			
		||||
    T* _array;
 | 
			
		||||
    DynArray(int n): _array(new T[n]) {}
 | 
			
		||||
    ~DynArray() { delete[] _array; }
 | 
			
		||||
    T& operator[](int i) { return _array[i]; }
 | 
			
		||||
  };
 | 
			
		||||
#define DYNARRAY(T,A,N) DynArray<T> A(N)
 | 
			
		||||
#else
 | 
			
		||||
#define DYNARRAY(T,A,N) T A[N]
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  static YAP_Functor gecode_COMMA2;
 | 
			
		||||
 | 
			
		||||
  static int gecode_setvar_glb_ranges(void)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user