From: <ha...@us...> - 2008-01-31 19:44:28
|
Revision: 4565 http://octave.svn.sourceforge.net/octave/?rev=4565&view=rev Author: hauberg Date: 2008-01-31 11:44:33 -0800 (Thu, 31 Jan 2008) Log Message: ----------- Update version numbers Modified Paths: -------------- trunk/octave-forge/main/audio/DESCRIPTION trunk/octave-forge/main/combinatorics/DESCRIPTION trunk/octave-forge/main/comm/DESCRIPTION trunk/octave-forge/main/control/DESCRIPTION trunk/octave-forge/main/econometrics/DESCRIPTION trunk/octave-forge/main/fixed/DESCRIPTION trunk/octave-forge/main/general/DESCRIPTION trunk/octave-forge/main/gsl/DESCRIPTION trunk/octave-forge/main/ident/DESCRIPTION trunk/octave-forge/main/image/DESCRIPTION trunk/octave-forge/main/image/INDEX trunk/octave-forge/main/info-theory/DESCRIPTION trunk/octave-forge/main/io/DESCRIPTION trunk/octave-forge/main/irsa/DESCRIPTION trunk/octave-forge/main/linear-algebra/DESCRIPTION trunk/octave-forge/main/miscellaneous/DESCRIPTION trunk/octave-forge/main/miscellaneous/inst/inz.m trunk/octave-forge/main/nnet/DESCRIPTION trunk/octave-forge/main/octcdf/DESCRIPTION trunk/octave-forge/main/odebvp/DESCRIPTION trunk/octave-forge/main/odepkg/DESCRIPTION trunk/octave-forge/main/optim/DESCRIPTION trunk/octave-forge/main/optiminterp/DESCRIPTION trunk/octave-forge/main/outliers/DESCRIPTION trunk/octave-forge/main/parallel/DESCRIPTION trunk/octave-forge/main/physical-constants/DESCRIPTION trunk/octave-forge/main/plot/DESCRIPTION trunk/octave-forge/main/signal/DESCRIPTION trunk/octave-forge/main/signal/INDEX trunk/octave-forge/main/sockets/DESCRIPTION trunk/octave-forge/main/specfun/DESCRIPTION trunk/octave-forge/main/special-matrix/DESCRIPTION trunk/octave-forge/main/splines/DESCRIPTION trunk/octave-forge/main/statistics/DESCRIPTION trunk/octave-forge/main/statistics/INDEX trunk/octave-forge/main/statistics/inst/nanvar.m trunk/octave-forge/main/strings/DESCRIPTION trunk/octave-forge/main/struct/DESCRIPTION trunk/octave-forge/main/symbolic/DESCRIPTION trunk/octave-forge/main/time/DESCRIPTION trunk/octave-forge/main/vrml/DESCRIPTION trunk/octave-forge/main/zenity/DESCRIPTION Modified: trunk/octave-forge/main/audio/DESCRIPTION =================================================================== --- trunk/octave-forge/main/audio/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/audio/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Audio -Version: 1.0.3 +Version: 1.0.4 Date: 2007-12-05 Author: Paul Kienzle Maintainer: Paul Kienzle Modified: trunk/octave-forge/main/combinatorics/DESCRIPTION =================================================================== --- trunk/octave-forge/main/combinatorics/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/combinatorics/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Combinatorics -Version: 1.0.4 +Version: 1.0.5 Date: 2007-12-05 Author: Torsten Finke <fi...@ig...> Maintainer: Torsten Finke <fi...@ig...> Modified: trunk/octave-forge/main/comm/DESCRIPTION =================================================================== --- trunk/octave-forge/main/comm/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/comm/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Communications -Version: 1.0.4 +Version: 1.0.5 Date: 2007-12-05 Author: David Bateman Maintainer: David Bateman Modified: trunk/octave-forge/main/control/DESCRIPTION =================================================================== --- trunk/octave-forge/main/control/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/control/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Control -Version: 1.0.4 +Version: 1.0.5 Date: 2007-12-05 Author: Ben Sapp Maintainer: None Modified: trunk/octave-forge/main/econometrics/DESCRIPTION =================================================================== --- trunk/octave-forge/main/econometrics/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/econometrics/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Econometrics -Version: 1.0.4 +Version: 1.0.5 Date: 2007-12-05 Author: Michael Creel <mic...@ua...> Maintainer: Michael Creel <mic...@ua...> Modified: trunk/octave-forge/main/fixed/DESCRIPTION =================================================================== --- trunk/octave-forge/main/fixed/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/fixed/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Fixed -Version: 0.7.4 +Version: 0.7.5 Date: 2007-12-05 Author: David Bateman Maintainer: David Bateman Modified: trunk/octave-forge/main/general/DESCRIPTION =================================================================== --- trunk/octave-forge/main/general/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/general/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: General -Version: 1.0.4 +Version: 1.0.5 Date: 2007-12-05 Author: Various authors Maintainer: The Octave Community Modified: trunk/octave-forge/main/gsl/DESCRIPTION =================================================================== --- trunk/octave-forge/main/gsl/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/gsl/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: GSL -Version: 1.0.3 +Version: 1.0.4 Date: 2007-12-05 Author: Teemu Ikonen <tpi...@pc...> Maintainer: Teemu Ikonen <tpi...@pc...> Modified: trunk/octave-forge/main/ident/DESCRIPTION =================================================================== --- trunk/octave-forge/main/ident/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/ident/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Ident -Version: 1.0.3 +Version: 1.0.4 Date: 2007-12-05 Author: Paul Kienzle Maintainer: Paul Kienzle Modified: trunk/octave-forge/main/image/DESCRIPTION =================================================================== --- trunk/octave-forge/main/image/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/image/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Image -Version: 1.0.4 +Version: 1.0.5 Date: 2007-12-05 Author: Various Authors Maintainer: The Octave Community Modified: trunk/octave-forge/main/image/INDEX =================================================================== --- trunk/octave-forge/main/image/INDEX 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/image/INDEX 2008-01-31 19:44:33 UTC (rev 4565) @@ -34,6 +34,7 @@ houghtf graythresh Filtering + imfilter colfilt fspecial imsmooth Modified: trunk/octave-forge/main/info-theory/DESCRIPTION =================================================================== --- trunk/octave-forge/main/info-theory/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/info-theory/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: InformationTheory -Version: 0.1.3 +Version: 0.1.4 Date: 2007-12-05 Author: Muthiah Annamalai Maintainer: Muthiah Annamalai Modified: trunk/octave-forge/main/io/DESCRIPTION =================================================================== --- trunk/octave-forge/main/io/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/io/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: io -Version: 1.0.4 +Version: 1.0.5 Date: 2007-12-05 Author: Various Authors Maintainer: The Octave Community Modified: trunk/octave-forge/main/irsa/DESCRIPTION =================================================================== --- trunk/octave-forge/main/irsa/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/irsa/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: IRSA -Version: 1.0.3 +Version: 1.0.4 Date: 2007-12-05 Author: Joerg Huber Maintainer: Joerg Huber Modified: trunk/octave-forge/main/linear-algebra/DESCRIPTION =================================================================== --- trunk/octave-forge/main/linear-algebra/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/linear-algebra/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Linear-Algebra -Version: 1.0.3 +Version: 1.0.4 Date: 2007-12-05 Author: Various Authors Maintainer: The Octave Community Modified: trunk/octave-forge/main/miscellaneous/DESCRIPTION =================================================================== --- trunk/octave-forge/main/miscellaneous/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/miscellaneous/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Miscellaneous -Version: 1.0.4 +Version: 1.0.5 Date: 2007-11-05 Author: Various Authors Maintainer: The Octave Community Modified: trunk/octave-forge/main/miscellaneous/inst/inz.m =================================================================== --- trunk/octave-forge/main/miscellaneous/inst/inz.m 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/miscellaneous/inst/inz.m 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ ## -*- texinfo -*- -## @deftypefn{Function File} {@var{function [y,f]} ={} } inz ( x ) +## @deftypefn{Function File} [@var{y},@var{f}] = inz ( @var{x} ) ## @cindex ## This function is just to save typing and improve readability, as in ## foo(find(foo(:,p)),p) vs. inz(foo(:,p)) Modified: trunk/octave-forge/main/nnet/DESCRIPTION =================================================================== --- trunk/octave-forge/main/nnet/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/nnet/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: nnet -Version: 0.1.5 +Version: 0.1.6 Date: 2007-12-05 Author: Michael Schmid Maintainer: Michael Schmid Modified: trunk/octave-forge/main/octcdf/DESCRIPTION =================================================================== --- trunk/octave-forge/main/octcdf/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/octcdf/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: octcdf -Version: 1.0.7 +Version: 1.0.8 Date: 2007-09-15 Author: Alexander Barth <ab...@ma...> Maintainer: Alexander Barth <ab...@ma...> Modified: trunk/octave-forge/main/odebvp/DESCRIPTION =================================================================== --- trunk/octave-forge/main/odebvp/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/odebvp/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: odebvp -Version: 1.0.2 +Version: 1.0.3 Date: 2007-12-05 Author: Tiago Charters de Azevedo Maintainer: Tiago Charters de Azevedo Modified: trunk/octave-forge/main/odepkg/DESCRIPTION =================================================================== --- trunk/octave-forge/main/odepkg/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/odepkg/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: OdePkg -Version: 0.4.0 +Version: 0.4.1 Date: 2008-01-19 Author: Thomas Treichl Maintainer: Thomas Treichl Modified: trunk/octave-forge/main/optim/DESCRIPTION =================================================================== --- trunk/octave-forge/main/optim/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/optim/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Optim -Version: 1.0.1 +Version: 1.0.2 Date: 2008-01-08 Author: Various Authors Maintainer: The Octave Community Modified: trunk/octave-forge/main/optiminterp/DESCRIPTION =================================================================== --- trunk/octave-forge/main/optiminterp/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/optiminterp/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: optiminterp -Version: 0.2.5 +Version: 0.2.6 Date: 2007-12-05 Author: Alexander Barth <ab...@ma...>, Aida Alvera-Azc\xE1rate <aa...@ma...> Maintainer: Alexander Barth <ab...@ma...> Modified: trunk/octave-forge/main/outliers/DESCRIPTION =================================================================== --- trunk/octave-forge/main/outliers/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/outliers/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Outliers -Version: 0.13.5 +Version: 0.13.6 Date: 2007-12-05 Author: Lukasz Komsta Maintainer: Lukasz Komsta Modified: trunk/octave-forge/main/parallel/DESCRIPTION =================================================================== --- trunk/octave-forge/main/parallel/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/parallel/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Parallel -Version: 1.0.4 +Version: 1.0.5 Date: 2007-12-05 Author: Hayato Fujiwara Maintainer: Hayato Fujiwara Modified: trunk/octave-forge/main/physical-constants/DESCRIPTION =================================================================== --- trunk/octave-forge/main/physical-constants/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/physical-constants/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: PhysicalConstants -Version: 0.1.3 +Version: 0.1.4 Date: 2007-12-05 Author: Muthiah Annamalai Maintainer: Muthiah Annamalai Modified: trunk/octave-forge/main/plot/DESCRIPTION =================================================================== --- trunk/octave-forge/main/plot/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/plot/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Plot -Version: 1.0.3 +Version: 1.0.4 Date: 2007-12-05 Author: Various Authors Maintainer: The Octave Community Modified: trunk/octave-forge/main/signal/DESCRIPTION =================================================================== --- trunk/octave-forge/main/signal/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/signal/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Signal -Version: 1.0.5 +Version: 1.0.6 Date: 2007-12-05 Author: Various Authors Maintainer: The Octave Community Modified: trunk/octave-forge/main/signal/INDEX =================================================================== --- trunk/octave-forge/main/signal/INDEX 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/signal/INDEX 2008-01-31 19:44:33 UTC (rev 4565) @@ -130,6 +130,7 @@ tukeywin rectwin welchwin + parzenwin System identification arburg arcov= use <code>ar_covar</code> $SPCTOOLS Modified: trunk/octave-forge/main/sockets/DESCRIPTION =================================================================== --- trunk/octave-forge/main/sockets/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/sockets/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: sockets -Version: 1.0.2 +Version: 1.0.3 Date: 2007-09-25 Author: John Swensen <jps...@co...> Maintainer: Tom Holroyd <to...@ku...> Modified: trunk/octave-forge/main/specfun/DESCRIPTION =================================================================== --- trunk/octave-forge/main/specfun/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/specfun/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Specfun -Version: 1.0.4 +Version: 1.0.5 Date: 2007-12-05 Author: Various Authors Maintainer: The Octave Community Modified: trunk/octave-forge/main/special-matrix/DESCRIPTION =================================================================== --- trunk/octave-forge/main/special-matrix/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/special-matrix/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: special-matrix -Version: 1.0.3 +Version: 1.0.4 Date: 2007-12-05 Author: Paul Kienzle <pki...@us...> Maintainer: Paul Kienzle <pki...@us...> Modified: trunk/octave-forge/main/splines/DESCRIPTION =================================================================== --- trunk/octave-forge/main/splines/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/splines/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: splines -Version: 1.0.3 +Version: 1.0.4 Date: 2007-12-05 Author: Kai Habel and Paul Kienzle Maintainer: Kai Habel and Paul Kienzle Modified: trunk/octave-forge/main/statistics/DESCRIPTION =================================================================== --- trunk/octave-forge/main/statistics/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/statistics/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Statistics -Version: 1.0.4 +Version: 1.0.5 Date: 2007-12-05 Author: Various Authors Maintainer: The Octave Community Modified: trunk/octave-forge/main/statistics/INDEX =================================================================== --- trunk/octave-forge/main/statistics/INDEX 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/statistics/INDEX 2008-01-31 19:44:33 UTC (rev 4565) @@ -30,6 +30,7 @@ nanmedian nanmin nanstd + nanvar geomean harmmean mad Modified: trunk/octave-forge/main/statistics/inst/nanvar.m =================================================================== --- trunk/octave-forge/main/statistics/inst/nanvar.m 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/statistics/inst/nanvar.m 2008-01-31 19:44:33 UTC (rev 4565) @@ -16,8 +16,7 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {[@var{y}] =} nanvar(@var{X} [, @var{opt} [, @var{dim}]]) -## nanstd is identical to the var function except that NaN values are -ignored. +## nanstd is identical to the var function except that NaN values are ignored. ## @seealso{nanmean,nanstd,nanmax,nanmin} ## @end deftypefn @@ -36,4 +35,4 @@ endif y = nanstd(x,w,dim).^2; - \ No newline at end of file + Modified: trunk/octave-forge/main/strings/DESCRIPTION =================================================================== --- trunk/octave-forge/main/strings/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/strings/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: strings -Version: 1.0.3 +Version: 1.0.4 Date: 2007-12-05 Author: Various Authors Maintainer: The Octave Community Modified: trunk/octave-forge/main/struct/DESCRIPTION =================================================================== --- trunk/octave-forge/main/struct/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/struct/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Struct -Version: 1.0.3 +Version: 1.0.4 Date: 2007-12-05 Author: Etienne Grossmann Maintainer: Etienne Grossmann Modified: trunk/octave-forge/main/symbolic/DESCRIPTION =================================================================== --- trunk/octave-forge/main/symbolic/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/symbolic/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Symbolic -Version: 1.0.4 +Version: 1.0.5 Date: 2007-12-05 Author: Various Authors Maintainer: The Octave Community Modified: trunk/octave-forge/main/time/DESCRIPTION =================================================================== --- trunk/octave-forge/main/time/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/time/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: time -Version: 1.0.3 +Version: 1.0.4 Date: 2007-12-05 Author: Bill Denney <bi...@gi...> Maintainer: Bill Denney <bi...@gi...> Modified: trunk/octave-forge/main/vrml/DESCRIPTION =================================================================== --- trunk/octave-forge/main/vrml/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/vrml/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Vrml -Version: 1.0.4 +Version: 1.0.5 Date: 2007-12-05 Author: Etienne Grossmann Maintainer: Etienne Grossmann Modified: trunk/octave-forge/main/zenity/DESCRIPTION =================================================================== --- trunk/octave-forge/main/zenity/DESCRIPTION 2008-01-31 16:04:22 UTC (rev 4564) +++ trunk/octave-forge/main/zenity/DESCRIPTION 2008-01-31 19:44:33 UTC (rev 4565) @@ -1,5 +1,5 @@ Name: Zenity -Version: 0.5.3 +Version: 0.5.4 Date: 2007-12-05 Author: S\xF8ren Hauberg Maintainer: S\xF8ren Hauberg This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hi...@us...> - 2008-02-07 14:06:10
|
Revision: 4609 http://octave.svn.sourceforge.net/octave/?rev=4609&view=rev Author: highegg Date: 2008-02-07 06:06:13 -0800 (Thu, 07 Feb 2008) Log Message: ----------- Initial commit of the OctGPR package. Added Paths: ----------- trunk/octave-forge/main/octgpr/ trunk/octave-forge/main/octgpr/COPYING trunk/octave-forge/main/octgpr/DESCRIPTION trunk/octave-forge/main/octgpr/INDEX trunk/octave-forge/main/octgpr/README trunk/octave-forge/main/octgpr/TODO trunk/octave-forge/main/octgpr/inst/ trunk/octave-forge/main/octgpr/inst/demo_octgpr.m trunk/octave-forge/main/octgpr/src/ trunk/octave-forge/main/octgpr/src/Makefile trunk/octave-forge/main/octgpr/src/Makefile.in trunk/octave-forge/main/octgpr/src/config.h trunk/octave-forge/main/octgpr/src/config.h.in trunk/octave-forge/main/octgpr/src/config.log trunk/octave-forge/main/octgpr/src/config.status trunk/octave-forge/main/octgpr/src/configure trunk/octave-forge/main/octgpr/src/configure.in trunk/octave-forge/main/octgpr/src/corrf.f trunk/octave-forge/main/octgpr/src/dscrot.f trunk/octave-forge/main/octgpr/src/dscsev.f trunk/octave-forge/main/octgpr/src/dsdacc.f trunk/octave-forge/main/octgpr/src/dspmid.f trunk/octave-forge/main/octgpr/src/dtr2tp.f trunk/octave-forge/main/octgpr/src/dwdis2.f trunk/octave-forge/main/octgpr/src/dxnrm2.f trunk/octave-forge/main/octgpr/src/forsubs.h trunk/octave-forge/main/octgpr/src/get_corrf.c trunk/octave-forge/main/octgpr/src/gpr_predict.cc trunk/octave-forge/main/octgpr/src/gpr_train.cc trunk/octave-forge/main/octgpr/src/gprmod.h trunk/octave-forge/main/octgpr/src/infgpr.f trunk/octave-forge/main/octgpr/src/nl0gpr.f trunk/octave-forge/main/octgpr/src/nldgpr.f trunk/octave-forge/main/octgpr/src/nllgpr.f trunk/octave-forge/main/octgpr/src/optdrv.f trunk/octave-forge/main/octgpr/src/predict.c trunk/octave-forge/main/octgpr/src/setup.c trunk/octave-forge/main/octgpr/src/sr1upd.f trunk/octave-forge/main/octgpr/src/stheta.f trunk/octave-forge/main/octgpr/src/train.c trunk/octave-forge/main/octgpr/src/trstp.f trunk/octave-forge/main/octgpr/src/trtest.f trunk/octave-forge/main/octgpr/src/vmcmp.f trunk/octave-forge/main/octgpr/src/vmfac.f Added: trunk/octave-forge/main/octgpr/COPYING =================================================================== --- trunk/octave-forge/main/octgpr/COPYING (rev 0) +++ trunk/octave-forge/main/octgpr/COPYING 2008-02-07 14:06:13 UTC (rev 4609) @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 19yy <name of author> + + 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 + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. Added: trunk/octave-forge/main/octgpr/DESCRIPTION =================================================================== --- trunk/octave-forge/main/octgpr/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/octgpr/DESCRIPTION 2008-02-07 14:06:13 UTC (rev 4609) @@ -0,0 +1,13 @@ +Name: OctGPR +Version: 1.1.0 +Date: 2008-08-02 +Author: Jaroslav Hajek (hi...@gm...) +Title: Package for full dense Gaussian Process Regression +Maintainer: Jaroslav Hajek (hi...@gm...) +Description: The package allows interpolating and smoothing scattered + multidimensional data using Gaussian Process Regression (also known + as Kriging). It features two functions: one for training (building + statistical model) and one for prediction (inference). +License: GPL v2 +Depends: octave (>= 2.9.7) + Added: trunk/octave-forge/main/octgpr/INDEX =================================================================== --- trunk/octave-forge/main/octgpr/INDEX (rev 0) +++ trunk/octave-forge/main/octgpr/INDEX 2008-02-07 14:06:13 UTC (rev 4609) @@ -0,0 +1,6 @@ +octgpr >> OctGPR +OctGPR + gpr_train + gpr_predict +Examples + demo_gpr Added: trunk/octave-forge/main/octgpr/README =================================================================== --- trunk/octave-forge/main/octgpr/README (rev 0) +++ trunk/octave-forge/main/octgpr/README 2008-02-07 14:06:13 UTC (rev 4609) @@ -0,0 +1,20 @@ +OctGPR +-------------------------------------------------------------------------------- + +OctGPR is a package for using Gaussian Process Regression (GPR) in Octave. +GPR is a Bayesian statistical method of inference of unknown spatial data +from known samples. It is also know as Kriging in geostatistics field. + +The method assumes that the known sample data are a result of a uniform spatial +Gaussian Process, with a constant or linear mean and constant variance. +Several models for the correlation function may be selected - gaussian, +exponential or inverse multiquadrics (more might be added in the future). + +The mean (mu) and variance (var) parameters are ML-estimated analytically, +while the inverse spatial scales (theta) and white noise (nu) are ML-estimated +using a custom mixed-norm trust-region optimization algorithm. Derivatives +w.r.t. theta and *two* derivatives w.r.t. nu are calculated analytically, +hoping for a rapid convergence (as nu is typically the most sensitive +parameter). + +In the future, the package will be extended with RBF models trained via GCV. Added: trunk/octave-forge/main/octgpr/TODO =================================================================== --- trunk/octave-forge/main/octgpr/TODO (rev 0) +++ trunk/octave-forge/main/octgpr/TODO 2008-02-07 14:06:13 UTC (rev 4609) @@ -0,0 +1,7 @@ +TODO list for OctGPR + +o add documentation where missing +o add more demos +o add RBF models with GCV training (in progress) +o improve trust-region training optimizer + Added: trunk/octave-forge/main/octgpr/inst/demo_octgpr.m =================================================================== --- trunk/octave-forge/main/octgpr/inst/demo_octgpr.m (rev 0) +++ trunk/octave-forge/main/octgpr/inst/demo_octgpr.m 2008-02-07 14:06:13 UTC (rev 4609) @@ -0,0 +1,57 @@ +% demo of Gaussian Process Regression package +1; + +disp("2-dimensional GPR demo"); +% define the test function (the well-known matlab "peaks") +function z = testfun(x,y) + z = 4 + 3 * (1-x).^2 .* exp(-(x.^2) - (y+1).^2) - ... + 10 * (x/5 - x.^3 - y.^5) .* exp(-x.^2 - y.^2)- ... + 1/3 * exp(-(x+1).^2 - y.^2); + +end + +disp("matlab peaks surface..."); +% create the mesh onto which to interpolate +t = linspace(-3,3,50); +[xi,yi] = meshgrid(t,t); + +% evaluate +zi = testfun(xi,yi); +zimax = max(vec(zi)); zimin = min(vec(zi)); +subplot(1,2,1); +mesh(xi,yi,zi); +pause; + +disp("sampled at 400 random points"); +% create 400 random samples +xs = rand(400,1); ys = rand(400,1); +xs = 6*xs-3; ys = 6*ys - 3; +% evaluate at random samples +zs = testfun(xs,ys); +xys = [xs ys]; + +subplot(1,2,2); +plot3(xs,ys,zs,".+"); +pause; + +disp("GPR model with heuristic hypers"); +ths = 0.3 ./ std(xys); +GPM = gpr_train(xys,zs,ths,1e-5); +zm = gpr_predict(GPM,[vec(xi) vec(yi)]); +zm = reshape(zm,size(zi)); +zm = min(zm,zimax); zm = max(zm,zimin); +subplot(1,2,2); +mesh(xi,yi,zm); +pause; + +disp("GPR model with MLE training"); +fflush(stdout); +GPM = gpr_train(xys,zs,ths,1e-5,{"tol",1e-5,"maxev",400,"numin",1e-8}); +zm = gpr_predict(GPM,[vec(xi) vec(yi)]); +zm = reshape(zm,size(zi)); +zm = min(zm,zimax); zm = max(zm,zimin); +subplot(1,2,2); +mesh(xi,yi,zm); +pause; + +close Added: trunk/octave-forge/main/octgpr/src/Makefile =================================================================== --- trunk/octave-forge/main/octgpr/src/Makefile (rev 0) +++ trunk/octave-forge/main/octgpr/src/Makefile 2008-02-07 14:06:13 UTC (rev 4609) @@ -0,0 +1,51 @@ +## Copyright (C) 2008 Jaroslav Hajek <hi...@gm...> +## +## 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., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301 USA + +F77=gfortran +MKOCTFILE=mkoctfile +FFLAGS=-O2 -mieee-fp -O2 -funroll-loops +CC=gcc +CFLAGS=-O2 -fno-strict-aliasing -I. +LIBS= -llapack -lblas + +OBJS_GPR_TRAIN=dsdacc.o dwdis2.o dtr2tp.o \ + nllgpr.o nldgpr.o nl0gpr.o corrf.o stheta.o \ + dscrot.o dscsev.o dspmid.o dxnrm2.o \ + trstp.o sr1upd.o optdrv.o \ + get_corrf.o train.o setup.o + +OBJS_GPR_PRED=dsdacc.o dwdis2.o infgpr.o corrf.o \ + get_corrf.o predict.o + +all: gpr_train.oct gpr_predict.oct + +%.o: %.f + $(F77) $(FFLAGS) -c $< +%.o: %.c forsubs.h gprmod.h + $(CC) $(CFLAGS) -c $< + +# C++ files are preferably compiled with mkoctfile directly +gpr_train.o: gpr_train.cc gprmod.h forsubs.h + $(MKOCTFILE) -c $< +gpr_predict.o: gpr_predict.cc gprmod.h forsubs.h + $(MKOCTFILE) -c $< +gpr_train.oct: gpr_train.o $(OBJS_GPR_TRAIN) + $(MKOCTFILE) -o $@ gpr_train.o $(OBJS_GPR_TRAIN) $(LIBS) +gpr_predict.oct: gpr_predict.o $(OBJS_GPR_PRED) + $(MKOCTFILE) -o $@ gpr_predict.o $(OBJS_GPR_PRED) $(LIBS) +clean: + rm -f *.o *.oct Added: trunk/octave-forge/main/octgpr/src/Makefile.in =================================================================== --- trunk/octave-forge/main/octgpr/src/Makefile.in (rev 0) +++ trunk/octave-forge/main/octgpr/src/Makefile.in 2008-02-07 14:06:13 UTC (rev 4609) @@ -0,0 +1,51 @@ +## Copyright (C) 2008 Jaroslav Hajek <hi...@gm...> +## +## 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., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301 USA + +F77=@F77@ +MKOCTFILE=@MKOCTFILE@ +FFLAGS=@FFLAGS@ +CC=@CC@ +CFLAGS=@CFLAGS@ -I. +LIBS=@LIBS@ + +OBJS_GPR_TRAIN=dsdacc.o dwdis2.o dtr2tp.o \ + nllgpr.o nldgpr.o nl0gpr.o corrf.o stheta.o \ + dscrot.o dscsev.o dspmid.o dxnrm2.o \ + trstp.o sr1upd.o optdrv.o \ + get_corrf.o train.o setup.o + +OBJS_GPR_PRED=dsdacc.o dwdis2.o infgpr.o corrf.o \ + get_corrf.o predict.o + +all: gpr_train.oct gpr_predict.oct + +%.o: %.f + $(F77) $(FFLAGS) -c $< +%.o: %.c forsubs.h gprmod.h + $(CC) $(CFLAGS) -c $< + +# C++ files are preferably compiled with mkoctfile directly +gpr_train.o: gpr_train.cc gprmod.h forsubs.h + $(MKOCTFILE) -c $< +gpr_predict.o: gpr_predict.cc gprmod.h forsubs.h + $(MKOCTFILE) -c $< +gpr_train.oct: gpr_train.o $(OBJS_GPR_TRAIN) + $(MKOCTFILE) -o $@ gpr_train.o $(OBJS_GPR_TRAIN) $(LIBS) +gpr_predict.oct: gpr_predict.o $(OBJS_GPR_PRED) + $(MKOCTFILE) -o $@ gpr_predict.o $(OBJS_GPR_PRED) $(LIBS) +clean: + rm -f *.o *.oct Added: trunk/octave-forge/main/octgpr/src/config.h =================================================================== --- trunk/octave-forge/main/octgpr/src/config.h (rev 0) +++ trunk/octave-forge/main/octgpr/src/config.h 2008-02-07 14:06:13 UTC (rev 4609) @@ -0,0 +1,83 @@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.in by autoheader. */ + +/* Define to dummy `main' function (if any) required to link to the Fortran + libraries. */ +/* #undef F77_DUMMY_MAIN */ + +/* Define to a macro mangling the given C identifier (in lower and upper + case), which must not contain underscores, for linking with Fortran. */ +#define F77_FUNC(name,NAME) name ## _ + +/* As F77_FUNC, but for C identifiers containing underscores. */ +#define F77_FUNC_(name,NAME) name ## _ + +/* Define if F77 and FC dummy `main' functions are identical. */ +/* #undef FC_DUMMY_MAIN_EQ_F77 */ + +/* Define to 1 if you have the <inttypes.h> header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if your system has a GNU libc compatible `malloc' function, and + to 0 otherwise. */ +#define HAVE_MALLOC 1 + +/* Define to 1 if you have the <memory.h> header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `memset' function. */ +/* #undef HAVE_MEMSET */ + +/* Define to 1 if you have the `sqrt' function. */ +/* #undef HAVE_SQRT */ + +/* Define to 1 if stdbool.h conforms to C99. */ +#define HAVE_STDBOOL_H 1 + +/* Define to 1 if you have the <stdint.h> header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the <stdlib.h> header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the <strings.h> header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the <string.h> header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the <sys/types.h> header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the <unistd.h> header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if the system has the type `_Bool'. */ +#define HAVE__BOOL 1 + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "hi...@gm..." + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "OctGPR" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "OctGPR 1.1.0" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "octgpr" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.1.0" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ + +/* Define to rpl_malloc if the replacement function should be used. */ +/* #undef malloc */ Added: trunk/octave-forge/main/octgpr/src/config.h.in =================================================================== --- trunk/octave-forge/main/octgpr/src/config.h.in (rev 0) +++ trunk/octave-forge/main/octgpr/src/config.h.in 2008-02-07 14:06:13 UTC (rev 4609) @@ -0,0 +1,82 @@ +/* config.h.in. Generated from configure.in by autoheader. */ + +/* Define to dummy `main' function (if any) required to link to the Fortran + libraries. */ +#undef F77_DUMMY_MAIN + +/* Define to a macro mangling the given C identifier (in lower and upper + case), which must not contain underscores, for linking with Fortran. */ +#undef F77_FUNC + +/* As F77_FUNC, but for C identifiers containing underscores. */ +#undef F77_FUNC_ + +/* Define if F77 and FC dummy `main' functions are identical. */ +#undef FC_DUMMY_MAIN_EQ_F77 + +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if your system has a GNU libc compatible `malloc' function, and + to 0 otherwise. */ +#undef HAVE_MALLOC + +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `memset' function. */ +#undef HAVE_MEMSET + +/* Define to 1 if you have the `sqrt' function. */ +#undef HAVE_SQRT + +/* Define to 1 if stdbool.h conforms to C99. */ +#undef HAVE_STDBOOL_H + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if the system has the type `_Bool'. */ +#undef HAVE__BOOL + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Define to rpl_malloc if the replacement function should be used. */ +#undef malloc Added: trunk/octave-forge/main/octgpr/src/config.log =================================================================== --- trunk/octave-forge/main/octgpr/src/config.log (rev 0) +++ trunk/octave-forge/main/octgpr/src/config.log 2008-02-07 14:06:13 UTC (rev 4609) @@ -0,0 +1,545 @@ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by OctGPR configure 1.1.0, which was +generated by GNU Autoconf 2.61. Invocation command line was + + $ ./configure + +## --------- ## +## Platform. ## +## --------- ## + +hostname = hajek +uname -m = i686 +uname -r = 2.6.22.16-0.2-default +uname -s = Linux +uname -v = #1 SMP 2008/02/01 19:36:55 UTC + +/usr/bin/uname -p = unknown +/bin/uname -X = unknown + +/bin/arch = i686 +/usr/bin/arch -k = unknown +/usr/convex/getsysinfo = unknown +/usr/bin/hostinfo = unknown +/bin/machine = unknown +/usr/bin/oslevel = unknown +/bin/universe = unknown + +PATH: /opt/intel/idb/10.0.023/bin +PATH: /opt/intel/fc/10.1.008/bin +PATH: /opt/intel/cc/10.0.023/bin +PATH: /home/hajek/bin +PATH: /usr/local/bin +PATH: /usr/bin +PATH: /bin +PATH: /usr/bin/X11 +PATH: /usr/X11R6/bin +PATH: /usr/games +PATH: /opt/kde3/bin +PATH: /usr/lib/mit/bin +PATH: /usr/lib/mit/sbin + + +## ----------- ## +## Core tests. ## +## ----------- ## + +configure:1697: checking for mkoctfile +configure:1713: found /usr/local/bin/mkoctfile +configure:1724: result: mkoctfile +configure:1800: checking for gfortran +configure:1816: found /usr/bin/gfortran +configure:1827: result: gfortran +configure:1857: checking for Fortran 77 compiler version +configure:1864: gfortran --version >&5 +GNU Fortran (GCC) 4.2.1 (SUSE Linux) +Copyright (C) 2007 Free Software Foundation, Inc. + +GNU Fortran comes with NO WARRANTY, to the extent permitted by law. +You may redistribute copies of GNU Fortran +under the terms of the GNU General Public License. +For more information about these matters, see the file named COPYING + +configure:1867: $? = 0 +configure:1874: gfortran -v >&5 +Using built-in specs. +Target: i586-suse-linux +Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --libexecdir=/usr/lib --enable-languages=c,c++,objc,fortran,obj-c++,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.2.1 --enable-ssp --disable-libssp --disable-libgcj --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --program-suffix=-4.2 --enable-version-specific-runtime-libs --without-system-libunwind --with-cpu=generic --host=i586-suse-linux +Thread model: posix +gcc version 4.2.1 (SUSE Linux) +configure:1877: $? = 0 +configure:1884: gfortran -V >&5 +gfortran: '-V' option must have argument +configure:1887: $? = 1 +configure:1901: checking for Fortran 77 compiler default output file name +configure:1928: gfortran -O2 -mieee-fp conftest.f >&5 +configure:1931: $? = 0 +configure:1969: result: a.out +configure:1986: checking whether the Fortran 77 compiler works +configure:1996: ./a.out +configure:1999: $? = 0 +configure:2016: result: yes +configure:2023: checking whether we are cross compiling +configure:2025: result: no +configure:2028: checking for suffix of executables +configure:2035: gfortran -o conftest -O2 -mieee-fp conftest.f >&5 +configure:2038: $? = 0 +configure:2062: result: +configure:2068: checking for suffix of object files +configure:2084: gfortran -c -O2 -mieee-fp conftest.f >&5 +configure:2087: $? = 0 +configure:2110: result: o +configure:2118: checking whether we are using the GNU Fortran 77 compiler +configure:2137: gfortran -c -O2 -mieee-fp conftest.F >&5 +configure:2143: $? = 0 +configure:2160: result: yes +configure:2166: checking whether gfortran accepts -g +configure:2183: gfortran -c -g conftest.f >&5 +configure:2189: $? = 0 +configure:2205: result: yes +configure:2347: checking for C compiler version +configure:2354: gcc --version >&5 +gcc (GCC) 4.2.1 (SUSE Linux) +Copyright (C) 2007 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +configure:2357: $? = 0 +configure:2364: gcc -v >&5 +Using built-in specs. +Target: i586-suse-linux +Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --libexecdir=/usr/lib --enable-languages=c,c++,objc,fortran,obj-c++,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.2.1 --enable-ssp --disable-libssp --disable-libgcj --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --program-suffix=-4.2 --enable-version-specific-runtime-libs --without-system-libunwind --with-cpu=generic --host=i586-suse-linux +Thread model: posix +gcc version 4.2.1 (SUSE Linux) +configure:2367: $? = 0 +configure:2374: gcc -V >&5 +gcc: '-V' option must have argument +configure:2377: $? = 1 +configure:2380: checking whether we are using the GNU C compiler +configure:2409: gcc -c -O2 -fno-strict-aliasing conftest.c >&5 +configure:2415: $? = 0 +configure:2432: result: yes +configure:2437: checking whether gcc accepts -g +configure:2467: gcc -c -g conftest.c >&5 +configure:2473: $? = 0 +configure:2572: result: yes +configure:2589: checking for gcc option to accept ISO C89 +configure:2663: gcc -c -O2 -fno-strict-aliasing conftest.c >&5 +configure:2669: $? = 0 +configure:2692: result: none needed +configure:2719: checking how to run the C preprocessor +configure:2759: gcc -E conftest.c +configure:2765: $? = 0 +configure:2796: gcc -E conftest.c +conftest.c:8:28: error: ac_nonexistent.h: No such file or directory +configure:2802: $? = 1 +configure: failed program was: +| /* confdefs.h. */ +| #define PACKAGE_NAME "OctGPR" +| #define PACKAGE_TARNAME "octgpr" +| #define PACKAGE_VERSION "1.1.0" +| #define PACKAGE_STRING "OctGPR 1.1.0" +| #define PACKAGE_BUGREPORT "hi...@gm..." +| /* end confdefs.h. */ +| #include <ac_nonexistent.h> +configure:2835: result: gcc -E +configure:2864: gcc -E conftest.c +configure:2870: $? = 0 +configure:2901: gcc -E conftest.c +conftest.c:8:28: error: ac_nonexistent.h: No such file or directory +configure:2907: $? = 1 +configure: failed program was: +| /* confdefs.h. */ +| #define PACKAGE_NAME "OctGPR" +| #define PACKAGE_TARNAME "octgpr" +| #define PACKAGE_VERSION "1.1.0" +| #define PACKAGE_STRING "OctGPR 1.1.0" +| #define PACKAGE_BUGREPORT "hi...@gm..." +| /* end confdefs.h. */ +| #include <ac_nonexistent.h> +configure:2945: checking for grep that handles long lines and -e +configure:3019: result: /usr/bin/grep +configure:3024: checking for egrep +configure:3102: result: /usr/bin/grep -E +configure:3107: checking for ANSI C header files +configure:3137: gcc -c -O2 -fno-strict-aliasing conftest.c >&5 +configure:3143: $? = 0 +configure:3242: gcc -o conftest -O2 -fno-strict-aliasing conftest.c >&5 +configure:3245: $? = 0 +configure:3251: ./conftest +configure:3254: $? = 0 +configure:3271: result: yes +configure:3295: checking for sys/types.h +configure:3316: gcc -c -O2 -fno-strict-aliasing conftest.c >&5 +configure:3322: $? = 0 +configure:3338: result: yes +configure:3295: checking for sys/stat.h +configure:3316: gcc -c -O2 -fno-strict-aliasing conftest.c >&5 +configure:3322: $? = 0 +configure:3338: result: yes +configure:3295: checking for stdlib.h +configure:3316: gcc -c -O2 -fno-strict-aliasing conftest.c >&5 +configure:3322: $? = 0 +configure:3338: result: yes +configure:3295: checking for string.h +configure:3316: gcc -c -O2 -fno-strict-aliasing conftest.c >&5 +configure:3322: $? = 0 +configure:3338: result: yes +configure:3295: checking for memory.h +configure:3316: gcc -c -O2 -fno-strict-aliasing conftest.c >&5 +configure:3322: $? = 0 +configure:3338: result: yes +configure:3295: checking for strings.h +configure:3316: gcc -c -O2 -fno-strict-aliasing conftest.c >&5 +configure:3322: $? = 0 +configure:3338: result: yes +configure:3295: checking for inttypes.h +configure:3316: gcc -c -O2 -fno-strict-aliasing conftest.c >&5 +configure:3322: $? = 0 +configure:3338: result: yes +configure:3295: checking for stdint.h +configure:3316: gcc -c -O2 -fno-strict-aliasing conftest.c >&5 +configure:3322: $? = 0 +configure:3338: result: yes +configure:3295: checking for unistd.h +configure:3316: gcc -c -O2 -fno-strict-aliasing conftest.c >&5 +configure:3322: $? = 0 +configure:3338: result: yes +configure:3356: checking for stdlib.h +configure:3362: result: yes +configure:3356: checking for string.h +configure:3362: result: yes +configure:3498: checking for stdbool.h that conforms to C99 +configure:3591: gcc -c -O2 -fno-strict-aliasing conftest.c >&5 +configure:3597: $? = 0 +configure:3612: result: yes +configure:3614: checking for _Bool +configure:3644: gcc -c -O2 -fno-strict-aliasing conftest.c >&5 +configure:3650: $? = 0 +configure:3665: result: yes +configure:3684: checking for an ANSI C-conforming const +configure:3759: gcc -c -O2 -fno-strict-aliasing conftest.c >&5 +configure:3765: $? = 0 +configure:3780: result: yes +configure:3792: checking for error_at_line +configure:3818: gcc -o conftest -O2 -fno-strict-aliasing conftest.c >&5 +configure:3824: $? = 0 +configure:3841: result: yes +configure:3857: checking for stdlib.h +configure:3863: result: yes +configure:3997: checking for GNU libc compatible malloc +configure:4031: gcc -o conftest -O2 -fno-strict-aliasing conftest.c >&5 +configure:4034: $? = 0 +configure:4040: ./conftest +configure:4043: $? = 0 +configure:4059: result: yes +configure:4092: checking for fprintf +configure:4148: gcc -o conftest -O2 -fno-strict-aliasing conftest.c >&5 +conftest.c:47: warning: conflicting types for built-in function 'fprintf' +configure:4154: $? = 0 +configure:4172: result: yes +configure:4092: checking for fflush +configure:4148: gcc -o conftest -O2 -fno-strict-aliasing conftest.c >&5 +configure:4154: $? = 0 +configure:4172: result: yes +configure:4194: checking how to get verbose linking output from gfortran +configure:4210: gfortran -c -O2 -mieee-fp conftest.f >&5 +configure:4216: $? = 0 +configure:4238: gfortran -o conftest -O2 -mieee-fp -v conftest.f +Using built-in specs. +Target: i586-suse-linux +Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --libexecdir=/usr/lib --enable-languages=c,c++,objc,fortran,obj-c++,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.2.1 --enable-ssp --disable-libssp --disable-libgcj --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --program-suffix=-4.2 --enable-version-specific-runtime-libs --without-system-libunwind --with-cpu=generic --host=i586-suse-linux +Thread model: posix +gcc version 4.2.1 (SUSE Linux) + /usr/lib/gcc/i586-suse-linux/4.2.1/f951 conftest.f -ffixed-form -quiet -dumpbase conftest.f -mieee-fp -mtune=generic -auxbase conftest -O2 -version -I /usr/lib/gcc/i586-suse-linux/4.2.1/finclude -o /tmp/ccdGSZg4.s +GNU F95 version 4.2.1 (SUSE Linux) (i586-suse-linux) + compiled by GNU C version 4.2.1 (SUSE Linux). +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + /usr/lib/gcc/i586-suse-linux/4.2.1/../../../../i586-suse-linux/bin/as -V -Qy -o /tmp/ccoQFSEW.o /tmp/ccdGSZg4.s +GNU assembler version 2.17.50 (i586-suse-linux) using BFD version (GNU Binutils) 2.17.50.20070726-14 (SUSE Linux) + /usr/lib/gcc/i586-suse-linux/4.2.1/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o conftest /usr/lib/gcc/i586-suse-linux/4.2.1/../../../crt1.o /usr/lib/gcc/i586-suse-linux/4.2.1/../../../crti.o /usr/lib/gcc/i586-suse-linux/4.2.1/crtbegin.o -L/usr/lib/gcc/i586-suse-linux/4.2.1 -L/usr/lib/gcc/i586-suse-linux/4.2.1 -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../../../i586-suse-linux/lib -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../.. /tmp/ccoQFSEW.o -lgfortranbegin -lgfortran -lm -lgcc_s -lgcc -lieee -lc -lgcc_s -lgcc /usr/lib/gcc/i586-suse-linux/4.2.1/crtend.o /usr/lib/gcc/i586-suse-linux/4.2.1/../../../crtn.o +configure:4304: result: -v +configure:4306: checking for Fortran 77 libraries of gfortran +configure:4329: gfortran -o conftest -O2 -mieee-fp -v conftest.f +Using built-in specs. +Target: i586-suse-linux +Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --libexecdir=/usr/lib --enable-languages=c,c++,objc,fortran,obj-c++,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.2.1 --enable-ssp --disable-libssp --disable-libgcj --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --program-suffix=-4.2 --enable-version-specific-runtime-libs --without-system-libunwind --with-cpu=generic --host=i586-suse-linux +Thread model: posix +gcc version 4.2.1 (SUSE Linux) + /usr/lib/gcc/i586-suse-linux/4.2.1/f951 conftest.f -ffixed-form -quiet -dumpbase conftest.f -mieee-fp -mtune=generic -auxbase conftest -O2 -version -I /usr/lib/gcc/i586-suse-linux/4.2.1/finclude -o /tmp/cceSp2h8.s +GNU F95 version 4.2.1 (SUSE Linux) (i586-suse-linux) + compiled by GNU C version 4.2.1 (SUSE Linux). +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + /usr/lib/gcc/i586-suse-linux/4.2.1/../../../../i586-suse-linux/bin/as -V -Qy -o /tmp/cckx9ma5.o /tmp/cceSp2h8.s +GNU assembler version 2.17.50 (i586-suse-linux) using BFD version (GNU Binutils) 2.17.50.20070726-14 (SUSE Linux) + /usr/lib/gcc/i586-suse-linux/4.2.1/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o conftest /usr/lib/gcc/i586-suse-linux/4.2.1/../../../crt1.o /usr/lib/gcc/i586-suse-linux/4.2.1/../../../crti.o /usr/lib/gcc/i586-suse-linux/4.2.1/crtbegin.o -L/usr/lib/gcc/i586-suse-linux/4.2.1 -L/usr/lib/gcc/i586-suse-linux/4.2.1 -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../../../i586-suse-linux/lib -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../.. /tmp/cckx9ma5.o -lgfortranbegin -lgfortran -lm -lgcc_s -lgcc -lieee -lc -lgcc_s -lgcc /usr/lib/gcc/i586-suse-linux/4.2.1/crtend.o /usr/lib/gcc/i586-suse-linux/4.2.1/../../../crtn.o +configure:4503: result: -L/usr/lib/gcc/i586-suse-linux/4.2.1 -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../../../i586-suse-linux/lib -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../.. -lgfortranbegin -lgfortran -lm -lieee +configure:4518: checking for dummy main to link with Fortran 77 libraries +configure:4562: gcc -o conftest -O2 -fno-strict-aliasing conftest.c -L/usr/lib/gcc/i586-suse-linux/4.2.1 -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../../../i586-suse-linux/lib -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../.. -lgfortranbegin -lgfortran -lm -lieee >&5 +configure:4568: $? = 0 +configure:4649: result: none +configure:4685: checking for Fortran 77 name-mangling scheme +configure:4704: gfortran -c -O2 -mieee-fp conftest.f >&5 +configure:4710: $? = 0 +configure:4765: gcc -o conftest -O2 -fno-strict-aliasing conftest.c cfortran_test.o -L/usr/lib/gcc/i586-suse-linux/4.2.1 -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../../../i586-suse-linux/lib -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../.. -lgfortranbegin -lgfortran -lm -lieee >&5 +/tmp/cca7F2Of.o: In function `main': +conftest.c:(.text+0x12): undefined reference to `foobar' +collect2: ld returned 1 exit status +configure:4771: $? = 1 +configure: failed program was: +| /* confdefs.h. */ +| #define PACKAGE_NAME "OctGPR" +| #define PACKAGE_TARNAME "octgpr" +| #define PACKAGE_VERSION "1.1.0" +| #define PACKAGE_STRING "OctGPR 1.1.0" +| #define PACKAGE_BUGREPORT "hi...@gm..." +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define HAVE_FPRINTF 1 +| #define HAVE_FFLUSH 1 +| /* end confdefs.h. */ +| +| /* Override any GCC internal prototype to avoid an error. +| Use char because int might match the return type of a GCC +| builtin and then its argument prototype would still apply. */ +| #ifdef __cplusplus +| extern "C" +| #endif +| char foobar (); +| #ifdef F77_DUMMY_MAIN +| +| # ifdef __cplusplus +| extern "C" +| # endif +| int F77_DUMMY_MAIN() { return 1; } +| +| #endif +| int +| main () +| { +| return foobar (); +| ; +| return 0; +| } +configure:4765: gcc -o conftest -O2 -fno-strict-aliasing conftest.c cfortran_test.o -L/usr/lib/gcc/i586-suse-linux/4.2.1 -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../../../i586-suse-linux/lib -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../.. -lgfortranbegin -lgfortran -lm -lieee >&5 +configure:4771: $? = 0 +configure:4850: gcc -o conftest -O2 -fno-strict-aliasing conftest.c cfortran_test.o -L/usr/lib/gcc/i586-suse-linux/4.2.1 -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../../../i586-suse-linux/lib -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../.. -lgfortranbegin -lgfortran -lm -lieee >&5 +configure:4856: $? = 0 +configure:4913: result: lower case, underscore, no extra underscore +configure:5027: checking for library containing dtpsv +configure:5051: gfortran -o conftest -O2 -mieee-fp -O2 -funroll-loops conftest.f -llapack -lblas >&5 +configure:5057: $? = 0 +configure:5085: result: none required +configure:5093: checking for library containing dspr +configure:5117: gfortran -o conftest -O2 -mieee-fp -O2 -funroll-loops conftest.f -llapack -lblas >&5 +configure:5123: $? = 0 +configure:5151: result: none required +configure:5162: checking for library containing dpotrf +configure:5186: gfortran -o conftest -O2 -mieee-fp -O2 -funroll-loops conftest.f -llapack -lblas >&5 +configure:5192: $? = 0 +configure:5220: result: none required +configure:5228: checking for library containing dpotrs +configure:5252: gfortran -o conftest -O2 -mieee-fp -O2 -funroll-loops conftest.f -llapack -lblas >&5 +configure:5258: $? = 0 +configure:5286: result: none required +configure:5294: checking for library containing dpotri +configure:5318: gfortran -o conftest -O2 -mieee-fp -O2 -funroll-loops conftest.f -llapack -lblas >&5 +configure:5324: $? = 0 +configure:5352: result: none required +configure:5360: checking for library containing dsyev +configure:5384: gfortran -o conftest -O2 -mieee-fp -O2 -funroll-loops conftest.f -llapack -lblas >&5 +configure:5390: $? = 0 +configure:5418: result: none required +configure:5531: creating ./config.status + +## ---------------------- ## +## Running config.status. ## +## ---------------------- ## + +This file was extended by OctGPR config.status 1.1.0, which was +generated by GNU Autoconf 2.61. Invocation command line was + + CONFIG_FILES = + CONFIG_HEADERS = + CONFIG_LINKS = + CONFIG_COMMANDS = + $ ./config.status + +on hajek + +config.status:596: creating Makefile +config.status:596: creating config.h +config.status:819: config.h is unchanged + +## ---------------- ## +## Cache variables. ## +## ---------------- ## + +ac_cv_c_compiler_gnu=yes +ac_cv_c_const=yes +ac_cv_env_CC_set= +ac_cv_env_CC_value= +ac_cv_env_CFLAGS_set= +ac_cv_env_CFLAGS_value= +ac_cv_env_CPPFLAGS_set= +ac_cv_env_CPPFLAGS_value= +ac_cv_env_CPP_set= +ac_cv_env_CPP_value= +ac_cv_env_F77_set= +ac_cv_env_F77_value= +ac_cv_env_FFLAGS_set= +ac_cv_env_FFLAGS_value= +ac_cv_env_LDFLAGS_set= +ac_cv_env_LDFLAGS_value= +ac_cv_env_LIBS_set= +ac_cv_env_LIBS_value= +ac_cv_env_build_alias_set= +ac_cv_env_build_alias_value= +ac_cv_env_host_alias_set= +ac_cv_env_host_alias_value= +ac_cv_env_target_alias_set= +ac_cv_env_target_alias_value= +ac_cv_f77_compiler_gnu=yes +ac_cv_f77_dummy_main=none +ac_cv_f77_libs=' -L/usr/lib/gcc/i586-suse-linux/4.2.1 -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../../../i586-suse-linux/lib -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../.. -lgfortranbegin -lgfortran -lm -lieee' +ac_cv_f77_mangling='lower case, underscore, no extra underscore' +ac_cv_fortran_dummy_main=none +ac_cv_func_fflush=yes +ac_cv_func_fprintf=yes +ac_cv_func_malloc_0_nonnull=yes +ac_cv_header_inttypes_h=yes +ac_cv_header_memory_h=yes +ac_cv_header_stdbool_h=yes +ac_cv_header_stdc=yes +ac_cv_header_stdint_h=yes +ac_cv_header_stdlib_h=yes +ac_cv_header_string_h=yes +ac_cv_header_strings_h=yes +ac_cv_header_sys_stat_h=yes +ac_cv_header_sys_types_h=yes +ac_cv_header_unistd_h=yes +ac_cv_lib_error_at_line=yes +ac_cv_objext=o +ac_cv_path_EGREP='/usr/bin/grep -E' +ac_cv_path_GREP=/usr/bin/grep +ac_cv_prog_CPP='gcc -E' +ac_cv_prog_MKOCTFILE=mkoctfile +ac_cv_prog_ac_ct_F77=gfortran +ac_cv_prog_cc_c89= +ac_cv_prog_cc_g=yes +ac_cv_prog_f77_g=yes +ac_cv_prog_f77_v=-v +ac_cv_search_dpotrf='none required' +ac_cv_search_dpotri='none required' +ac_cv_search_dpotrs='none required' +ac_cv_search_dspr='none required' +ac_cv_search_dsyev='none required' +ac_cv_search_dtpsv='none required' +ac_cv_type__Bool=yes + +## ----------------- ## +## Output variables. ## +## ----------------- ## + +CC='gcc' +CFLAGS='-O2 -fno-strict-aliasing' +CPP='gcc -E' +CPPFLAGS='' +DEFS='-DHAVE_CONFIG_H' +ECHO_C='' +ECHO_N='-n' +ECHO_T='' +EGREP='/usr/bin/grep -E' +EXEEXT='' +F77='gfortran' +FFLAGS='-O2 -mieee-fp -O2 -funroll-loops' +FLIBS=' -L/usr/lib/gcc/i586-suse-linux/4.2.1 -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../../../i586-suse-linux/lib -L/usr/lib/gcc/i586-suse-linux/4.2.1/../../.. -lgfortranbegin -lgfortran -lm -lieee' +GREP='/usr/bin/grep' +LDFLAGS='' +LIBOBJS='' +LIBS=' -llapack -lblas' +LTLIBOBJS='' +MKOCTFILE='mkoctfile' +OBJEXT='o' +PACKAGE_BUGREPORT='hi...@gm...' +PACKAGE_NAME='OctGPR' +PACKAGE_STRING='OctGPR 1.1.0' +PACKAGE_TARNAME='octgpr' +PACKAGE_VERSION='1.1.0' +PATH_SEPARATOR=':' +SHELL='/bin/sh' +ac_ct_CC='' +ac_ct_F77='gfortran' +bindir='${exec_prefix}/bin' +build_alias='' +datadir='${datarootdir}' +datarootdir='${prefix}/share' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +dvidir='${docdir}' +exec_prefix='${prefix}' +host_alias='' +htmldir='${docdir}' +includedir='${prefix}/include' +infodir='${datarootdir}/info' +libdir='${exec_prefix}/lib' +libexecdir='${exec_prefix}/libexec' +localedir='${datarootdir}/locale' +localstatedir='${prefix}/var' +mandir='${datarootdir}/man' +oldincludedir='/usr/include' +pdfdir='${docdir}' +prefix='/usr/local' +program_transform_name='s,x,x,' +psdir='${docdir}' +sbindir='${exec_prefix}/sbin' +sharedstatedir='${prefix}/com' +sysconfdir='${prefix}/etc' +target_alias='' + +## ----------- ## +## confdefs.h. ## +## ----------- ## + +#define PACKAGE_NAME "OctGPR" +#define PACKAGE_TARNAME "octgpr" +#define PACKAGE_VERSION "1.1.0" +#define PACKAGE_STRING "OctGPR 1.1.0" +#define PACKAGE_BUGREPORT "hi...@gm..." +#define STDC_HEADERS 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 +#define HAVE_MEMORY_H 1 +#define HAVE_STRINGS_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_UNISTD_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 +#define HAVE__BOOL 1 +#define HAVE_STDBOOL_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_MALLOC 1 +#define HAVE_FPRINTF 1 +#define HAVE_FFLUSH 1 +#define F77_FUNC(name,NAME) name ## _ +#define F77_FUNC_(name,NAME) name ## _ + +configure: exit 0 Added: trunk/octave-forge/main/octgpr/src/config.status =================================================================== --- trunk/octave-forge/main/octgpr/src/config.status (rev 0) +++ trunk/octave-forge/main/octgpr/src/config.status 2008-02-07 14:06:13 UTC (rev 4609) @@ -0,0 +1,838 @@ +#! /bin/sh +# Generated by configure. +# 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-/bin/sh} +## --------------------- ## +## 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=: + # Zsh 3.x and 4.x performs 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 + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' ... [truncated message content] |
From: <ws...@us...> - 2008-02-14 04:09:06
|
Revision: 4625 http://octave.svn.sourceforge.net/octave/?rev=4625&view=rev Author: wsloand Date: 2008-02-13 20:09:10 -0800 (Wed, 13 Feb 2008) Log Message: ----------- Added first functions in the financial toolbox Added Paths: ----------- trunk/octave-forge/main/financial/ trunk/octave-forge/main/financial/COPYING trunk/octave-forge/main/financial/DESCRIPTION trunk/octave-forge/main/financial/inst/ trunk/octave-forge/main/financial/inst/dateaxis.m trunk/octave-forge/main/financial/inst/highlow.m Added: trunk/octave-forge/main/financial/COPYING =================================================================== --- trunk/octave-forge/main/financial/COPYING (rev 0) +++ trunk/octave-forge/main/financial/COPYING 2008-02-14 04:09:10 UTC (rev 4625) @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 19yy <name of author> + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. Added: trunk/octave-forge/main/financial/DESCRIPTION =================================================================== --- trunk/octave-forge/main/financial/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/financial/DESCRIPTION 2008-02-14 04:09:10 UTC (rev 4625) @@ -0,0 +1,12 @@ +Name: financial +Version: .1 +Date: 2007-02-02 +Author: Bill Denney <bi...@de...> +Maintainer: Bill Denney <bi...@de...> +Title: Financial +Description: Financial manipulation and plotting functions +Categories: Financial +Depends: octave (>= 3.0.0) +Autoload: yes +License: GPL version 2 or later +Url: http://octave.sf.net Added: trunk/octave-forge/main/financial/inst/dateaxis.m =================================================================== --- trunk/octave-forge/main/financial/inst/dateaxis.m (rev 0) +++ trunk/octave-forge/main/financial/inst/dateaxis.m 2008-02-14 04:09:10 UTC (rev 4625) @@ -0,0 +1,100 @@ +## Copyright (C) 2008 Bill Denney +## +## This software 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 3 of the License, or (at +## your option) any later version. +## +## This software 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 software; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} dateaxis () +## @deftypefnx {Function File} {} dateaxis (ax) +## @deftypefnx {Function File} {} dateaxis (ax, dateform) +## @deftypefnx {Function File} {} dateaxis (ax, dateform, startdate) +## @deftypefnx {Function File} {} dateaxis (h, ...) +## +## Convert the current axis tick labels (or the axis handle @var{h}) to +## a date format. The axis given by @var{ax} ("x", "y", or "z") will be +## changed; the default is "x". The date format, @var{dateform}, used +## will be either auto-determined or an integer corresponding to the +## date formats in datestr. If @var{startdate} is given, then the first +## tick value on the given axis is assumed to be that date. +## +## @seealso{bolling, candle, highlow, movavg, pointfig} +## @end deftypefn + +## Author: Bill Denney <bi...@de...> +## Created: 2 Feb 2008 + +function dateaxis (varargin) + + ## defaults + h = gca (); + ax = "x"; + dateform = []; + startdate = []; + + ## check inputs + if nargin > 0 + if ishandle(varargin{1}) + h = varargin{1}; + varargin(1) = []; + endif + if length(varargin) > 0 + ax = varargin{1}; + endif + if length(varargin) > 1 + dateform = varargin{2}; + endif + if length(varargin) > 2 + startdate = varargin{3}; + if ischar(startdate) + startdate = datenum(startdate); + elseif ~isnumeric(startdate) + error ("startdate must be either a datenum or numeric") + endif + endif + if length(varargin) > 3 + print_usage (); + endif + endif + + if isempty(dateform) + r = range(get(h, [ax "lim"])); + if r < 10/60/24 + ## minutes and seconds + dateform = 13; + elseif r < 2 + ## hours + dateform = 15; + elseif r < 15 + ## days + dateform = 8; + elseif r < 365 + ## months + dateform = 6; + elseif r < 90*12 + ## quarters + dateform = 27; + else + ## years + dateform = 10; + endif + endif + + ticks = get (h, [ax "tick"]); + ticks = ticks - ticks(1) + startdate; + ticks = datestr(ticks, dateform); + ticks = mat2cell(ticks, ones(size(ticks,1),1), size(ticks,2)); + keyboard + set (h, [ax "ticklabel"], ticks); + +endfunction Added: trunk/octave-forge/main/financial/inst/highlow.m =================================================================== --- trunk/octave-forge/main/financial/inst/highlow.m (rev 0) +++ trunk/octave-forge/main/financial/inst/highlow.m 2008-02-14 04:09:10 UTC (rev 4625) @@ -0,0 +1,78 @@ +## Copyright (C) 2008 Bill Denney +## +## This software 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 3 of the License, or (at +## your option) any later version. +## +## This software 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 software; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {h =} highlow (high, low, close) +## @deftypefnx {Function File} {h =} highlow (high, low, close, open) +## @deftypefnx {Function File} {h =} highlow (high, low, close, open, color) +## +## Plot the @var{high}, @var{low}, and @var{close} of a security. The +## @var{close} is plotted as a tick to the right, and if @var{open} is +## given and non-empty, it is plotted as a tick to the left. The color +## can override the default color for the plot. +## +## @seealso{bolling, candle, dateaxis, movavg, pointfig} +## @end deftypefn + +## Author: Bill Denney <bi...@de...> +## Created: 2 Feb 2008 + +function h = highlow (high, low, close, open, color) + + if nargin < 3 || nargin > 5 + print_usage (); + elseif nargin < 4 + open = []; + endif + if nargin < 5 + plotargs = {}; + else + plotargs = {"color", color}; + endif + + if isempty (high) || isempty (low) || isempty (close) + error ("high, low, and close may not be empty") + elseif ~(isvector (high) && isvector (low) && isvector (close)) + error ("high, low, and close must be vectors") + elseif ((numel (high) ~= numel (low)) || + (numel (high) ~= numel (close))) + error ("high, low, and close must have the same number of elements") + elseif (~isempty (open) && (numel (high) ~= numel (open))) + error ("open must have the same number of elements as high, low, and close") + endif + + holdstat = ishold (); + ## h = hggroup (); + ## plotargs(end+1:end+2) = {"parent", h}; + hold on; + x = (1:length(high)) + 0.5; + x = reshape([x;x;nan(size(x))], [], 1); + y = reshape([high(:)'; low(:)'; nan(1, length(high))], [], 1); + plot(x, y, plotargs{:}); + x = 1:length(high); + x = reshape([x+0.5;x+1;nan(size(x))], [], 1); + y = reshape([close(:)';close(:)';nan(1, length(close))], [], 1); + plot(x, y, plotargs{:}); + if ~ isempty(open) + x -= 0.5; + y = reshape([open(:)';open(:)';nan(1, length(open))], [], 1); + plot(x, y, plotargs{:}); + endif + + if ~holdstat + hold off; + endif +endfunction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-02-16 08:40:29
|
Revision: 4640 http://octave.svn.sourceforge.net/octave/?rev=4640&view=rev Author: hauberg Date: 2008-02-16 00:40:33 -0800 (Sat, 16 Feb 2008) Log Message: ----------- Updated INDEX files Modified Paths: -------------- trunk/octave-forge/main/comm/INDEX trunk/octave-forge/main/signal/INDEX Modified: trunk/octave-forge/main/comm/INDEX =================================================================== --- trunk/octave-forge/main/comm/INDEX 2008-02-16 08:38:38 UTC (rev 4639) +++ trunk/octave-forge/main/comm/INDEX 2008-02-16 08:40:33 UTC (rev 4640) @@ -43,6 +43,9 @@ helscanintrlv matintrlv randintrlv + deintrlv + matdeintrlv + randdeintrlv Block Coding bchdeco bchenco Modified: trunk/octave-forge/main/signal/INDEX =================================================================== --- trunk/octave-forge/main/signal/INDEX 2008-02-16 08:38:38 UTC (rev 4639) +++ trunk/octave-forge/main/signal/INDEX 2008-02-16 08:40:33 UTC (rev 4640) @@ -99,6 +99,7 @@ cceps icceps cplxreal + bitrevorder Power spectrum analysis pwelch tfe This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <xav...@us...> - 2008-03-15 18:45:25
|
Revision: 4753 http://octave.svn.sourceforge.net/octave/?rev=4753&view=rev Author: xavier98 Date: 2008-03-15 11:45:29 -0700 (Sat, 15 Mar 2008) Log Message: ----------- Add database package. Added Paths: ----------- trunk/octave-forge/main/database/ trunk/octave-forge/main/database/COPYING trunk/octave-forge/main/database/DESCRIPTION trunk/octave-forge/main/database/INDEX trunk/octave-forge/main/database/Makefile trunk/octave-forge/main/database/PKG_ADD trunk/octave-forge/main/database/inst/ trunk/octave-forge/main/database/inst/default_db.m trunk/octave-forge/main/database/inst/sql.m trunk/octave-forge/main/database/src/ trunk/octave-forge/main/database/src/Makeconf.in trunk/octave-forge/main/database/src/Makefile trunk/octave-forge/main/database/src/README trunk/octave-forge/main/database/src/autogen.sh trunk/octave-forge/main/database/src/configure.base trunk/octave-forge/main/database/src/generic_db.h trunk/octave-forge/main/database/src/libpq-fe_filtered.h trunk/octave-forge/main/database/src/mysql.i trunk/octave-forge/main/database/src/mysql_filtered.h trunk/octave-forge/main/database/src/odbc.i trunk/octave-forge/main/database/src/pg_type_filtered.h trunk/octave-forge/main/database/src/postgres.i trunk/octave-forge/main/database/src/sql_filtered.h trunk/octave-forge/main/database/src/sqlext_filtered.h trunk/octave-forge/main/database/src/sqlite3.i trunk/octave-forge/main/database/src/sqlite3_filtered.h trunk/octave-forge/main/database/src/sqltypes_filtered.h trunk/octave-forge/main/database/src/tests/ trunk/octave-forge/main/database/src/tests/helpers.m trunk/octave-forge/main/database/src/tests/mysql_basic.m trunk/octave-forge/main/database/src/tests/mysql_empty.m trunk/octave-forge/main/database/src/tests/mysql_high.m trunk/octave-forge/main/database/src/tests/odbc_basic.m trunk/octave-forge/main/database/src/tests/odbc_empty.m trunk/octave-forge/main/database/src/tests/odbc_high.m trunk/octave-forge/main/database/src/tests/postgres_basic.m trunk/octave-forge/main/database/src/tests/postgres_empty.m trunk/octave-forge/main/database/src/tests/postgres_high.m trunk/octave-forge/main/database/src/tests/sqlite_basic.m trunk/octave-forge/main/database/src/tests/sqlite_empty.m trunk/octave-forge/main/database/src/tests/sqlite_high.m Added: trunk/octave-forge/main/database/COPYING =================================================================== --- trunk/octave-forge/main/database/COPYING (rev 0) +++ trunk/octave-forge/main/database/COPYING 2008-03-15 18:45:29 UTC (rev 4753) @@ -0,0 +1,25 @@ +Copyright (c) 2008, Xavier Delacour <xav...@gm...> +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + * The names of its contributors may not be used to endorse or promote +products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + Added: trunk/octave-forge/main/database/DESCRIPTION =================================================================== --- trunk/octave-forge/main/database/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/database/DESCRIPTION 2008-03-15 18:45:29 UTC (rev 4753) @@ -0,0 +1,12 @@ +Name: database +Version: 1.0 +Date: 2008-03-15 +Author: Xavier Delacour +Maintainer: Xavier Delacour +Title: Bindings for postgres, mysql, sqlite, and standard ODBC +Description: These are bindings that allow SQL queries and other database operations on postgres, mysql, sqlite, and standard ODBC databases from within Octave. A simplified interface that is uniform across all database types is provided, as well as the entire C client API for each database (libpq, libmysqlclient, etc). +Depends: octave (>= 2.9.12) +Autoload: yes +SystemRequirements: swig, postgresql-8.2, postgresql-client-8.2, mysql-common, mysql-client-5.0, mysql-server-5.0, libmysqlclient15-dev, sqlite3, libsqlite3-dev, unixodbc-bin, unixodbc-dev, odbc-postgresql. +License: BSD +Url: http://octave.sf.net Added: trunk/octave-forge/main/database/INDEX =================================================================== --- trunk/octave-forge/main/database/INDEX (rev 0) +++ trunk/octave-forge/main/database/INDEX 2008-03-15 18:45:29 UTC (rev 4753) @@ -0,0 +1,6 @@ +database >> Database +High-Level Interface + sql + default_db + +See the octave-db documentation at http://octave-swig.sourceforge.net/octave-db.html. Added: trunk/octave-forge/main/database/Makefile =================================================================== --- trunk/octave-forge/main/database/Makefile (rev 0) +++ trunk/octave-forge/main/database/Makefile 2008-03-15 18:45:29 UTC (rev 4753) @@ -0,0 +1,4 @@ +sinclude ../../Makeconf + + +PKG_FILES = COPYING DESCRIPTION INDEX PKG_ADD $(wildcard inst/*) $(wildcard src/*) Added: trunk/octave-forge/main/database/PKG_ADD =================================================================== --- trunk/octave-forge/main/database/PKG_ADD (rev 0) +++ trunk/octave-forge/main/database/PKG_ADD 2008-03-15 18:45:29 UTC (rev 4753) @@ -0,0 +1,5 @@ +postgres +mysql +sqlite3 +odbc + Added: trunk/octave-forge/main/database/inst/default_db.m =================================================================== --- trunk/octave-forge/main/database/inst/default_db.m (rev 0) +++ trunk/octave-forge/main/database/inst/default_db.m 2008-03-15 18:45:29 UTC (rev 4753) @@ -0,0 +1,22 @@ +# Copyright (c) 2008, Xavier Delacour <xav...@gm...> +# +# All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the BSD License. For details see the COPYING +# file included as part of this distribution. + +# usage: db = default_db() +# db = default_db(db) +# This function is used to store a database object instance for later +# use by sql() calls that don't specify a db. The first form returns the +# current default database, and the second form changes it and returns +# the new value. + +function db=default_db(db) + global __octave_db_default; + if (nargin==1) + __octave_db_default=db; + endif + db=__octave_db_default; +end Added: trunk/octave-forge/main/database/inst/sql.m =================================================================== --- trunk/octave-forge/main/database/inst/sql.m (rev 0) +++ trunk/octave-forge/main/database/inst/sql.m 2008-03-15 18:45:29 UTC (rev 4753) @@ -0,0 +1,30 @@ +# Copyright (c) 2008, Xavier Delacour <xav...@gm...> +# +# All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the BSD License. For details see the COPYING +# file included as part of this distribution. + +# usage: results = sql(db, query); +# results = sql(query); +# where query is a string giving SQL query, and db is a database object +# instance (constructed with postgres_db(), mysql_db(), sqlite3_db(), +# and odbc_db()). Omitting the db argument is possible if one has called +# default_db() previously. +# For examples, see http://octave-swig.sourceforge.net/octave-db.html. + + +function res=sql(varargin) + global __octave_db_default; + if (length(varargin)==1) + if (!strcmp(typeinfo(__octave_db_default),"swig_ref")) + error("you must call default_db first, or supply db argument"); + endif + res=__octave_db_default.sql(varargin{1}); + elseif (length(varargin)==2) + res=varargin{1}.sql(varargin{2}); + else + error("usage: sql([db,]query)"); + endif +end Added: trunk/octave-forge/main/database/src/Makeconf.in =================================================================== --- trunk/octave-forge/main/database/src/Makeconf.in (rev 0) +++ trunk/octave-forge/main/database/src/Makeconf.in 2008-03-15 18:45:29 UTC (rev 4753) @@ -0,0 +1,69 @@ + +## Makeconf is automatically generated from Makeconf.base and Makeconf.add +## in the various subdirectories. To regenerate, use ./autogen.sh to +## create a new ./Makeconf.in, then use ./configure to generate a new +## Makeconf. + +OCTAVE_FORGE = 1 + +SHELL = @SHELL@ + +canonical_host_type = @canonical_host_type@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ +bindir = @bindir@ +mandir = @mandir@ +libdir = @libdir@ +datadir = @datadir@ +infodir = @infodir@ +includedir = @includedir@ +datarootdir = @datarootdir@ +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALLOCT=octinst.sh + +DESTDIR = + +RANLIB = @RANLIB@ +STRIP = @STRIP@ +LN_S = @LN_S@ + +AWK = @AWK@ + +# Most octave programs will be compiled with $(MKOCTFILE). Those which +# cannot use mkoctfile directly can request the flags that mkoctfile +# would use as follows: +# FLAG = $(shell $(MKOCTFILE) -p FLAG) +# The following flags are for compiling programs that are independent +# of Octave. How confusing. +CC = @CC@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +CPICFLAG = @CPICFLAG@ +CXX = @CXX@ +CXXFLAGS = @CXXFLAGS@ +CXXPICFLAG = @CXXPICFLAG@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FPICFLAG = @FPICFLAG@ + +OCTAVE = @OCTAVE@ +OCTAVE_VERSION = @OCTAVE_VERSION@ +MKOCTFILE = @MKOCTFILE@ -DHAVE_OCTAVE_$(ver) -v +SHLEXT = @SHLEXT@ + +ver = @ver@ +MPATH = @mpath@ +OPATH = @opath@ +XPATH = @xpath@ +ALTMPATH = @altmpath@ +ALTOPATH = @altopath@ + +SWIG = @swigpath@ + +%.o: %.c ; $(MKOCTFILE) -c $< +%.o: %.f ; $(MKOCTFILE) -c $< +%.o: %.cc ; $(MKOCTFILE) -c $< +%.oct: %.cc ; $(MKOCTFILE) $< Added: trunk/octave-forge/main/database/src/Makefile =================================================================== --- trunk/octave-forge/main/database/src/Makefile (rev 0) +++ trunk/octave-forge/main/database/src/Makefile 2008-03-15 18:45:29 UTC (rev 4753) @@ -0,0 +1,45 @@ +sinclude Makeconf + +.PHONY: clean check + +all: sqlite3.oct postgres.oct mysql.oct odbc.oct + +sqlite3.oct: sqlite3.i sqlite3_filtered.h + $(SWIG) -octave -c++ -o sqlite3_wrap.cpp sqlite3.i + $(MKOCTFILE) -o sqlite3.oct -lsqlite3 sqlite3_wrap.cpp + +postgres.oct: postgres.i libpq-fe_filtered.h + $(SWIG) -octave -c++ -o postgres_wrap.cpp postgres.i + $(MKOCTFILE) -o postgres.oct postgres_wrap.cpp -lpq + +mysql.oct: mysql.i mysql_filtered.h + $(SWIG) -octave -c++ -o mysql_wrap.cpp mysql.i + $(MKOCTFILE) -o mysql.oct -lmysqlclient mysql_wrap.cpp + +odbc.oct: odbc.i sql_filtered.h sqltypes_filtered.h sqlext_filtered.h + $(SWIG) -octave -c++ -o odbc_wrap.cpp odbc.i + $(MKOCTFILE) -o odbc.oct -lodbc odbc_wrap.cpp + +clean: + -$(RM) *.o octave-core core *.oct *~ *_wrap.cpp + +TEST_CASES = \ + helpers \ + mysql_basic \ + mysql_empty \ + mysql_high \ + odbc_basic \ + odbc_empty \ + odbc_high \ + postgres_basic \ + postgres_empty \ + sqlite_basic \ + sqlite_empty \ + sqlite_high + +NOT_BROKEN_TEST_CASES = $(TEST_CASES:=.test) +.PHONY: check +check: $(NOT_BROKEN_TEST_CASES) +%.test: + octave -q tests/$*.m > /dev/null + Added: trunk/octave-forge/main/database/src/README =================================================================== --- trunk/octave-forge/main/database/src/README (rev 0) +++ trunk/octave-forge/main/database/src/README 2008-03-15 18:45:29 UTC (rev 4753) @@ -0,0 +1,29 @@ + +As of this writing, the version of SWIG supporting Octave hasn't yet +been released. You'll need to go download and build it yourself from +SWIG's SVN repository. See +http://sourceforge.net/svn/?group_id=1645 +http://octave-swig.sourceforge.net/ + +To build the bindings, run: +make + +To run the tests, run: +make check + + +-------------------------------------------------------------------- +-- Maintainer Notes + +The *_filtered.h files are system headers w/ very minor changes (a few +#ifndef SWIG ... #endif), such that they are easy to keep current w/ +diff/patch/whatever. + +The postgres tests require that postgres is installed, a user +testuser/secret exists, and a database named testdb exists. + +The mysql tests require that mysql is setup, a user/pwd root/secret +exists, and a database named testdb exists. + +The odbc tests require that postgres and its odbc driver are installed, +and that a DSN named testdb exists. Added: trunk/octave-forge/main/database/src/autogen.sh =================================================================== --- trunk/octave-forge/main/database/src/autogen.sh (rev 0) +++ trunk/octave-forge/main/database/src/autogen.sh 2008-03-15 18:45:29 UTC (rev 4753) @@ -0,0 +1,27 @@ +#! /bin/sh + +## Generate ./configure +rm -f configure.in +echo "dnl --- DO NOT EDIT --- Automatically generated by autogen.sh" > configure.in +cat configure.base >> configure.in +cat <<EOF >> configure.in + AC_OUTPUT(\$CONFIGURE_OUTPUTS) + dnl XXX FIXME XXX chmod is not in autoconf's list of portable functions + + echo " " + echo " \"\\\$prefix\" is \$prefix" + echo " \"\\\$exec_prefix\" is \$exec_prefix" + AC_MSG_RESULT([\$STATUS_MSG + +find . -name NOINSTALL -print # shows which toolboxes won't be installed +]) +EOF + +autoconf configure.in > configure.tmp +if [ diff configure.tmp configure > /dev/null 2>&1 ]; then + rm -f configure.tmp; +else + mv -f configure.tmp configure + chmod 0755 configure +fi +rm -f configure.in Property changes on: trunk/octave-forge/main/database/src/autogen.sh ___________________________________________________________________ Name: svn:executable + * Added: trunk/octave-forge/main/database/src/configure.base =================================================================== --- trunk/octave-forge/main/database/src/configure.base (rev 0) +++ trunk/octave-forge/main/database/src/configure.base 2008-03-15 18:45:29 UTC (rev 4753) @@ -0,0 +1,357 @@ +dnl The configure script is generated by autogen.sh from configure.base +dnl and the various configure.add files in the source tree. Edit +dnl configure.base and reprocess rather than modifying ./configure. + +dnl autoconf 2.13 certainly doesn't work! What is the minimum requirement? +AC_PREREQ(2.2) + +AC_INIT(configure.base) + +PACKAGE=octave-forge +MAJOR_VERSION=0 +MINOR_VERSION=1 +PATCH_LEVEL=0 + +dnl Kill caching --- this ought to be the default +define([AC_CACHE_LOAD], )dnl +define([AC_CACHE_SAVE], )dnl + +dnl uncomment to put support files in another directory +dnl AC_CONFIG_AUX_DIR(admin) + +VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL +AC_SUBST(PACKAGE) +AC_SUBST(VERSION) + +dnl need to find admin files, so keep track of the top dir. +TOPDIR=`pwd` +AC_SUBST(TOPDIR) + +dnl if mkoctfile doesn't work, then we need the following: +dnl AC_PROG_CXX +dnl AC_PROG_F77 + +dnl Need C compiler regardless so define it in a way that +dnl makes autoconf happy and we can override whatever we +dnl need with mkoctfile -p. +dnl XXX FIXME XXX should use mkoctfile to get CC and CFLAGS +AC_PROG_CC + +dnl XXX FIXME XXX need tests for -p -c -s in mkoctfile. + +dnl ******************************************************************* +dnl Sort out mkoctfile version number and install paths + +dnl XXX FIXME XXX latest octave has octave-config so we don't +dnl need to discover things here. Doesn't have --exe-site-dir +dnl but defines --oct-site-dir and --m-site-dir + +dnl Check for mkoctfile +AC_CHECK_PROG(MKOCTFILE,mkoctfile,mkoctfile) +test -z "$MKOCTFILE" && AC_MSG_WARN([no mkoctfile found on path]) + +AC_SUBST(ver) +AC_SUBST(subver) +AC_SUBST(mpath) +AC_SUBST(opath) +AC_SUBST(xpath) +AC_SUBST(altpath) +AC_SUBST(altmpath) +AC_SUBST(altopath) + +AC_ARG_WITH(path, + [ --with-path install path prefix], + [ path=$withval ]) +AC_ARG_WITH(mpath, + [ --with-mpath override path for m-files], + [mpath=$withval]) +AC_ARG_WITH(opath, + [ --with-opath override path for oct-files], + [opath=$withval]) +AC_ARG_WITH(xpath, + [ --with-xpath override path for executables], + [xpath=$withval]) +AC_ARG_WITH(altpath, + [ --with-altpath alternative functions install path prefix], + [ altpath=$withval ]) +AC_ARG_WITH(altmpath, + [ --with-altmpath override path for alternative m-files], + [altmpath=$withval]) +AC_ARG_WITH(altopath, + [ --with-altopath override path for alternative oct-files], + [altopath=$withval]) + +if test -n "$path" ; then + test -z "$mpath" && mpath=$path + test -z "$opath" && opath=$path/oct + test -z "$xpath" && xpath=$path/bin + test -z "$altpath" && altpath=$path-alternatives +fi + +if test -n "$altpath" ; then + test -z "$altmpath" && altmpath=$altpath + test -z "$altopath" && altopath=$altpath/oct +fi + +dnl Don't query if path/ver are given in the configure environment +#if test -z "$mpath" || test -z "$opath" || test -z "$xpath" || test -z "$altmpath" || test -z "$altopath" || test -z "$ver" ; then +if test -z "$mpath" || test -z "$opath" || test -z "$xpath" || test -z "$ver" ; then + dnl Construct program to get mkoctfile version and local install paths + cat > conftest.cc <<EOF +#include <octave/config.h> +#include <octave/version.h> +#include <octave/defaults.h> + +#define INFOV "\nINFOV=" OCTAVE_VERSION "\n" + +#define INFOH "\nINFOH=" OCTAVE_CANONICAL_HOST_TYPE "\n" + +#ifdef OCTAVE_LOCALVERFCNFILEDIR +# define INFOM "\nINFOM=" OCTAVE_LOCALVERFCNFILEDIR "\n" +#else +# define INFOM "\nINFOM=" OCTAVE_LOCALFCNFILEPATH "\n" +#endif + +#ifdef OCTAVE_LOCALVEROCTFILEDIR +# define INFOO "\nINFOO=" OCTAVE_LOCALVEROCTFILEDIR "\n" +#else +# define INFOO "\nINFOO=" OCTAVE_LOCALOCTFILEPATH "\n" +#endif + +#ifdef OCTAVE_LOCALVERARCHLIBDIR +# define INFOX "\nINFOX=" OCTAVE_LOCALVERARCHLIBDIR "\n" +#else +# define INFOX "\nINFOX=" OCTAVE_LOCALARCHLIBDIR "\n" +#endif + +const char *infom = INFOM; +const char *infoo = INFOO; +const char *infox = INFOX; +const char *infoh = INFOH; +const char *infov = INFOV; +EOF + + dnl Compile program perhaps with a special version of mkoctfile + $MKOCTFILE conftest.cc || AC_MSG_ERROR(Could not run $MKOCTFILE) + + dnl Strip the config info from the compiled file + eval `strings conftest.o | grep "^INFO.=" | sed -e "s,//.*$,,"` + rm -rf conftest* + + dnl set the appropriate variables if they are not already set + ver=`echo $INFOV | sed -e "s/\.//" -e "s/\..*$//"` + subver=`echo $INFOV | sed -e "[s/^[^.]*[.][^.]*[.]//]"` + alt_mbase=`echo $INFOM | sed -e "[s,\/[^\/]*$,,]"` + alt_obase=`echo $INFOO | sed -e "[s,/site.*$,/site,]"` + test -z "$mpath" && mpath=$INFOM/octave-forge + test -z "$opath" && opath=$INFOO/octave-forge + test -z "$xpath" && xpath=$INFOX + test -z "$altmpath" && altmpath=$alt_mbase/octave-forge-alternatives/m + test -z "$altopath" && altopath=$alt_obase/octave-forge-alternatives/oct/$INFOH +fi + +dnl ******************************************************************* + +dnl XXX FIXME XXX Should we allow the user to override these? +dnl Do we even need them? The individual makefiles can call mkoctfile -p +dnl themselves, so the only reason to keep them is for configure, and +dnl for those things which are not built using mkoctfile (e.g., aurecord) +dnl but it is not clear we should be using octave compile flags for those. + +dnl C compiler and flags +AC_MSG_RESULT([retrieving compile and link flags from $MKOCTFILE]) +CC=`$MKOCTFILE -p CC` +CFLAGS=`$MKOCTFILE -p CFLAGS` +CPPFLAGS=`$MKOCTFILE -p CPPFLAGS` +CPICFLAG=`$MKOCTFILE -p CPICFLAG` +LDFLAGS=`$MKOCTFILE -p LDFLAGS` +LIBS=`$MKOCTFILE -p LIBS` +AC_SUBST(CC) +AC_SUBST(CFLAGS) +AC_SUBST(CPPFLAGS) +AC_SUBST(CPICFLAG) + +dnl Fortran compiler and flags +F77=`$MKOCTFILE -p F77` +FFLAGS=`$MKOCTFILE -p FFLAGS` +FPICFLAG=`$MKOCTFILE -p FPICFLAG` +AC_SUBST(F77) +AC_SUBST(FFLAGS) +AC_SUBST(FPICFLAG) + +dnl C++ compiler and flags +CXX=`$MKOCTFILE -p CXX` +CXXFLAGS=`$MKOCTFILE -p CXXFLAGS` +CXXPICFLAG=`$MKOCTFILE -p CXXPICFLAG` +AC_SUBST(CXX) +AC_SUBST(CXXFLAGS) +AC_SUBST(CXXPICFLAG) + +dnl ******************************************************************* + +dnl Check for features of your version of mkoctfile. +dnl All checks should be designed so that the default +dnl action if the tests are not performed is to do whatever +dnl is appropriate for the most recent version of Octave. + +dnl Define the following macro: +dnl OF_CHECK_LIB(lib,fn,true,false,helpers) +dnl This is just like AC_CHECK_LIB, but it doesn't update LIBS +AC_DEFUN(OF_CHECK_LIB, +[save_LIBS="$LIBS" +AC_CHECK_LIB($1,$2,$3,$4,$5) +LIBS="$save_LIBS" +]) + +dnl Define the following macro: +dnl TRY_MKOCTFILE(msg,program,action_if_true,action_if_false) +dnl +AC_DEFUN(TRY_MKOCTFILE, +[AC_MSG_CHECKING($1) +cat > conftest.cc << EOF +#include <octave/config.h> +$2 +EOF +ac_try="$MKOCTFILE -c conftest.cc" +if AC_TRY_EVAL(ac_try) ; then + AC_MSG_RESULT(yes) + $3 +else + AC_MSG_RESULT(no) + $4 +fi +]) + +dnl +dnl Check if F77_FUNC works with MKOCTFILE +dnl +TRY_MKOCTFILE([for F77_FUNC], +[int F77_FUNC (hello, HELLO) (const int &n);],, +[MKOCTFILE="$MKOCTFILE -DF77_FUNC=F77_FCN"]) + +dnl +dnl Check if octave still uses SLList.h +dnl +TRY_MKOCTFILE([for SLList.h],[#include <octave/SLList.h>], +[MKOCTFILE="$MKOCTFILE -DHAVE_SLLIST_H"],) + +dnl +dnl Check if octave has lo_ieee_nan_value +dnl +TRY_MKOCTFILE([for lo_ieee_nan_value], +[ #include <octave/lo-ieee.h> +int test(void) { lo_ieee_nan_value(); }],, +[MKOCTFILE="$MKOCTFILE -DUSE_OCTAVE_NAN"]) + +dnl +dnl Check if octave is needs octave_idx_type +dnl +TRY_MKOCTFILE([for octave_idx_type], +[#include <octave/oct-types.h> +octave_idx_type test(void) { octave_idx_type idx = 1; return idx; }],, +[MKOCTFILE="$MKOCTFILE -Doctave_idx_type=int"]) + +dnl +dnl Check if octave uses quit.h +dnl +TRY_MKOCTFILE([for quit.h],[#include <octave/quit.h>],, +[MKOCTFILE="$MKOCTFILE -DNEED_OCTAVE_QUIT"]) + +dnl ********************************************************** + +dnl Evaluate an expression in octave +dnl +dnl OCTAVE_EVAL(expr,var) -> var=expr +dnl +AC_DEFUN(OCTAVE_EVAL, +[AC_MSG_CHECKING([for $1 in Octave]) +$2=`echo "disp($1)" | $OCTAVE -qf` +AC_MSG_RESULT($$2) +AC_SUBST($2) +]) + +dnl Check status of an octave variable +dnl +dnl OCTAVE_CHECK_EXIST(variable,action_if_true,action_if_false) +dnl +AC_DEFUN(OCTAVE_CHECK_EXIST, +[AC_MSG_CHECKING([for $1 in Octave]) +if test `echo 'disp(exist("$1"))' | $OCTAVE -qf`X != 0X ; then + AC_MSG_RESULT(yes) + $2 +else + AC_MSG_RESULT(no) + $3 +fi +]) + +dnl should check that $(OCTAVE) --version matches $(MKOCTFILE) --version +AC_CHECK_PROG(OCTAVE,octave,octave) +OCTAVE_EVAL(OCTAVE_VERSION,OCTAVE_VERSION) + +dnl grab canonical host type so we can write system specific install stuff +OCTAVE_EVAL(octave_config_info('canonical_host_type'),canonical_host_type) + +dnl grab SHLEXT from octave config +OCTAVE_EVAL(octave_config_info('SHLEXT'),SHLEXT) + +AC_PROG_LN_S + +AC_PROG_RANLIB + +dnl Use $(COPY_FLAGS) to set options for cp when installing .oct files. +COPY_FLAGS="-Rfp" +case "$canonical_host_type" in + *-*-linux*) + COPY_FLAGS="-fdp" + ;; +esac +AC_SUBST(COPY_FLAGS) + +dnl Use $(STRIP) in the makefile to strip executables. If not found, +dnl STRIP expands to ':', which in the makefile does nothing. +dnl Don't need this for .oct files since mkoctfile handles them directly +STRIP=${STRIP-strip} +AC_CHECK_PROG(STRIP,$STRIP,$STRIP,:) + +dnl Strip on windows, don't strip on Mac OS/X or IRIX +dnl For the rest, you can force strip using MKOCTFILE="mkoctfile -s" +dnl or avoid strip using STRIP=: before ./configure +case "$canonical_host_type" in + powerpc-apple-darwin*|*-sgi-*) + STRIP=: + ;; + *-cygwin-*|*-mingw-*) + MKOCTFILE="$MKOCTFILE -s" + ;; +esac + +dnl check for swig and test that it supports octave +AC_PATH_PROG(swigpath,swig) +test -z "$swigpath" && AC_MSG_ERROR(swig not found on path) +cat > conftest.i <<EOF +%module conftest +EOF +$swigpath -c++ -octave conftest.i || AC_MSG_ERROR(swig doesn't support octave modules) +rm -f conftest.* + +CONFIGURE_OUTPUTS="Makeconf" +STATUS_MSG=" +octave commands will install into the following directories: + m-files: $mpath + oct-files: $opath + binaries: $xpath +alternatives: + m-files: $altmpath + oct-files: $altopath + +shell commands will install into the following directories: + binaries: $bindir + man pages: $mandir + libraries: $libdir + headers: $includedir + +octave-forge is configured with + octave: $OCTAVE (version $OCTAVE_VERSION) + mkoctfile: $MKOCTFILE for Octave $subver + swig: $swigpath" Added: trunk/octave-forge/main/database/src/generic_db.h =================================================================== --- trunk/octave-forge/main/database/src/generic_db.h (rev 0) +++ trunk/octave-forge/main/database/src/generic_db.h 2008-03-15 18:45:29 UTC (rev 4753) @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2008, Xavier Delacour <xav...@gm...> + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the BSD License. For details see the COPYING + * file included as part of this distribution. + */ + +#include <octave/oct.h> +#include <octave/Cell.h> + +struct generic_db { + virtual ~generic_db() {} + virtual Cell sql(const char* query)=0; +}; Added: trunk/octave-forge/main/database/src/libpq-fe_filtered.h =================================================================== --- trunk/octave-forge/main/database/src/libpq-fe_filtered.h (rev 0) +++ trunk/octave-forge/main/database/src/libpq-fe_filtered.h 2008-03-15 18:45:29 UTC (rev 4753) @@ -0,0 +1,519 @@ +/*------------------------------------------------------------------------- + * + * libpq-fe.h + * This file contains definitions for structures and + * externs for functions used by frontend postgres applications. + * + * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * $PostgreSQL: pgsql/src/interfaces/libpq/libpq-fe.h,v 1.134 2006/10/04 00:30:13 momjian Exp $ + * + *------------------------------------------------------------------------- + */ + +#ifndef LIBPQ_FE_H +#define LIBPQ_FE_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +#ifndef SWIG +#include <stdio.h> +#endif // SWIG + +/* + * postgres_ext.h defines the backend's externally visible types, + * such as Oid. + */ +#ifndef +#include "postgres_ext.h" +#endif // SWIG + +/* Application-visible enum types */ + +typedef enum +{ + /* + * Although it is okay to add to this list, values which become unused + * should never be removed, nor should constants be redefined - that would + * break compatibility with existing code. + */ + CONNECTION_OK, + CONNECTION_BAD, + /* Non-blocking mode only below here */ + + /* + * The existence of these should never be relied upon - they should only + * be used for user feedback or similar purposes. + */ + CONNECTION_STARTED, /* Waiting for connection to be made. */ + CONNECTION_MADE, /* Connection OK; waiting to send. */ + CONNECTION_AWAITING_RESPONSE, /* Waiting for a response from the + * postmaster. */ + CONNECTION_AUTH_OK, /* Received authentication; waiting for + * backend startup. */ + CONNECTION_SETENV, /* Negotiating environment. */ + CONNECTION_SSL_STARTUP, /* Negotiating SSL. */ + CONNECTION_NEEDED /* Internal state: connect() needed */ +} ConnStatusType; + +typedef enum +{ + PGRES_POLLING_FAILED = 0, + PGRES_POLLING_READING, /* These two indicate that one may */ + PGRES_POLLING_WRITING, /* use select before polling again. */ + PGRES_POLLING_OK, + PGRES_POLLING_ACTIVE /* unused; keep for awhile for backwards + * compatibility */ +} PostgresPollingStatusType; + +typedef enum +{ + PGRES_EMPTY_QUERY = 0, /* empty query string was executed */ + PGRES_COMMAND_OK, /* a query command that doesn't return + * anything was executed properly by the + * backend */ + PGRES_TUPLES_OK, /* a query command that returns tuples was + * executed properly by the backend, PGresult + * contains the result tuples */ + PGRES_COPY_OUT, /* Copy Out data transfer in progress */ + PGRES_COPY_IN, /* Copy In data transfer in progress */ + PGRES_BAD_RESPONSE, /* an unexpected response was recv'd from the + * backend */ + PGRES_NONFATAL_ERROR, /* notice or warning message */ + PGRES_FATAL_ERROR /* query failed */ +} ExecStatusType; + +typedef enum +{ + PQTRANS_IDLE, /* connection idle */ + PQTRANS_ACTIVE, /* command in progress */ + PQTRANS_INTRANS, /* idle, within transaction block */ + PQTRANS_INERROR, /* idle, within failed transaction */ + PQTRANS_UNKNOWN /* cannot determine status */ +} PGTransactionStatusType; + +typedef enum +{ + PQERRORS_TERSE, /* single-line error messages */ + PQERRORS_DEFAULT, /* recommended style */ + PQERRORS_VERBOSE /* all the facts, ma'am */ +} PGVerbosity; + +/* PGconn encapsulates a connection to the backend. + * The contents of this struct are not supposed to be known to applications. + */ +typedef struct pg_conn PGconn; + +/* PGresult encapsulates the result of a query (or more precisely, of a single + * SQL command --- a query string given to PQsendQuery can contain multiple + * commands and thus return multiple PGresult objects). + * The contents of this struct are not supposed to be known to applications. + */ +typedef struct pg_result PGresult; + +/* PGcancel encapsulates the information needed to cancel a running + * query on an existing connection. + * The contents of this struct are not supposed to be known to applications. + */ +typedef struct pg_cancel PGcancel; + +/* PGnotify represents the occurrence of a NOTIFY message. + * Ideally this would be an opaque typedef, but it's so simple that it's + * unlikely to change. + * NOTE: in Postgres 6.4 and later, the be_pid is the notifying backend's, + * whereas in earlier versions it was always your own backend's PID. + */ +typedef struct pgNotify +{ + char *relname; /* notification condition name */ + int be_pid; /* process ID of notifying server process */ + char *extra; /* notification parameter */ + /* Fields below here are private to libpq; apps should not use 'em */ + struct pgNotify *next; /* list link */ +} PGnotify; + +/* Function types for notice-handling callbacks */ +typedef void (*PQnoticeReceiver) (void *arg, const PGresult *res); +typedef void (*PQnoticeProcessor) (void *arg, const char *message); + +/* Print options for PQprint() */ +typedef char pqbool; + +typedef struct _PQprintOpt +{ + pqbool header; /* print output field headings and row count */ + pqbool align; /* fill align the fields */ + pqbool standard; /* old brain dead format */ + pqbool html3; /* output html tables */ + pqbool expanded; /* expand tables */ + pqbool pager; /* use pager for output if needed */ + char *fieldSep; /* field separator */ + char *tableOpt; /* insert to HTML <table ...> */ + char *caption; /* HTML <caption> */ + char **fieldName; /* null terminated array of replacement field + * names */ +} PQprintOpt; + +/* ---------------- + * Structure for the conninfo parameter definitions returned by PQconndefaults + * + * All fields except "val" point at static strings which must not be altered. + * "val" is either NULL or a malloc'd current-value string. PQconninfoFree() + * will release both the val strings and the PQconninfoOption array itself. + * ---------------- + */ +typedef struct _PQconninfoOption +{ + char *keyword; /* The keyword of the option */ + char *envvar; /* Fallback environment variable name */ + char *compiled; /* Fallback compiled in default value */ + char *val; /* Option's current value, or NULL */ + char *label; /* Label for field in connect dialog */ + char *dispchar; /* Character to display for this field in a + * connect dialog. Values are: "" Display + * entered value as is "*" Password field - + * hide value "D" Debug option - don't show + * by default */ + int dispsize; /* Field size in characters for dialog */ +} PQconninfoOption; + +/* ---------------- + * PQArgBlock -- structure for PQfn() arguments + * ---------------- + */ +typedef struct +{ + int len; + int isint; + union + { + int *ptr; /* can't use void (dec compiler barfs) */ + int integer; + } u; +} PQArgBlock; + +/* ---------------- + * Exported functions of libpq + * ---------------- + */ + +/* === in fe-connect.c === */ + +/* make a new client connection to the backend */ +/* Asynchronous (non-blocking) */ +extern PGconn *PQconnectStart(const char *conninfo); +extern PostgresPollingStatusType PQconnectPoll(PGconn *conn); + +/* Synchronous (blocking) */ +extern PGconn *PQconnectdb(const char *conninfo); +extern PGconn *PQsetdbLogin(const char *pghost, const char *pgport, + const char *pgoptions, const char *pgtty, + const char *dbName, + const char *login, const char *pwd); + +#define PQsetdb(M_PGHOST,M_PGPORT,M_PGOPT,M_PGTTY,M_DBNAME) \ + PQsetdbLogin(M_PGHOST, M_PGPORT, M_PGOPT, M_PGTTY, M_DBNAME, NULL, NULL) + +/* close the current connection and free the PGconn data structure */ +extern void PQfinish(PGconn *conn); + +/* get info about connection options known to PQconnectdb */ +extern PQconninfoOption *PQconndefaults(void); + +/* free the data structure returned by PQconndefaults() */ +extern void PQconninfoFree(PQconninfoOption *connOptions); + +/* + * close the current connection and restablish a new one with the same + * parameters + */ +/* Asynchronous (non-blocking) */ +extern int PQresetStart(PGconn *conn); +extern PostgresPollingStatusType PQresetPoll(PGconn *conn); + +/* Synchronous (blocking) */ +extern void PQreset(PGconn *conn); + +/* request a cancel structure */ +extern PGcancel *PQgetCancel(PGconn *conn); + +/* free a cancel structure */ +extern void PQfreeCancel(PGcancel *cancel); + +/* issue a cancel request */ +extern int PQcancel(PGcancel *cancel, char *errbuf, int errbufsize); + +/* backwards compatible version of PQcancel; not thread-safe */ +extern int PQrequestCancel(PGconn *conn); + +/* Accessor functions for PGconn objects */ +extern char *PQdb(const PGconn *conn); +extern char *PQuser(const PGconn *conn); +extern char *PQpass(const PGconn *conn); +extern char *PQhost(const PGconn *conn); +extern char *PQport(const PGconn *conn); +extern char *PQtty(const PGconn *conn); +extern char *PQoptions(const PGconn *conn); +extern ConnStatusType PQstatus(const PGconn *conn); +extern PGTransactionStatusType PQtransactionStatus(const PGconn *conn); +extern const char *PQparameterStatus(const PGconn *conn, + const char *paramName); +extern int PQprotocolVersion(const PGconn *conn); +extern int PQserverVersion(const PGconn *conn); +extern char *PQerrorMessage(const PGconn *conn); +extern int PQsocket(const PGconn *conn); +extern int PQbackendPID(const PGconn *conn); +extern int PQclientEncoding(const PGconn *conn); +extern int PQsetClientEncoding(PGconn *conn, const char *encoding); + +/* Get the OpenSSL structure associated with a connection. Returns NULL for + * unencrypted connections or if any other TLS library is in use. */ +extern void *PQgetssl(PGconn *conn); + +/* Tell libpq whether it needs to initialize OpenSSL */ +extern void PQinitSSL(int do_init); + +/* Set verbosity for PQerrorMessage and PQresultErrorMessage */ +extern PGVerbosity PQsetErrorVerbosity(PGconn *conn, PGVerbosity verbosity); + +/* Enable/disable tracing */ +extern void PQtrace(PGconn *conn, FILE *debug_port); +extern void PQuntrace(PGconn *conn); + +/* Override default notice handling routines */ +extern PQnoticeReceiver PQsetNoticeReceiver(PGconn *conn, + PQnoticeReceiver proc, + void *arg); +extern PQnoticeProcessor PQsetNoticeProcessor(PGconn *conn, + PQnoticeProcessor proc, + void *arg); + +/* + * Used to set callback that prevents concurrent access to + * non-thread safe functions that libpq needs. + * The default implementation uses a libpq internal mutex. + * Only required for multithreaded apps that use kerberos + * both within their app and for postgresql connections. + */ +typedef void (*pgthreadlock_t) (int acquire); + +extern pgthreadlock_t PQregisterThreadLock(pgthreadlock_t newhandler); + +/* === in fe-exec.c === */ + +/* Simple synchronous query */ +extern PGresult *PQexec(PGconn *conn, const char *query); +extern PGresult *PQexecParams(PGconn *conn, + const char *command, + int nParams, + const Oid *paramTypes, + const char *const * paramValues, + const int *paramLengths, + const int *paramFormats, + int resultFormat); +extern PGresult *PQprepare(PGconn *conn, const char *stmtName, + const char *query, int nParams, + const Oid *paramTypes); +extern PGresult *PQexecPrepared(PGconn *conn, + const char *stmtName, + int nParams, + const char *const * paramValues, + const int *paramLengths, + const int *paramFormats, + int resultFormat); + +/* Interface for multiple-result or asynchronous queries */ +extern int PQsendQuery(PGconn *conn, const char *query); +extern int PQsendQueryParams(PGconn *conn, + const char *command, + int nParams, + const Oid *paramTypes, + const char *const * paramValues, + const int *paramLengths, + const int *paramFormats, + int resultFormat); +extern int PQsendPrepare(PGconn *conn, const char *stmtName, + const char *query, int nParams, + const Oid *paramTypes); +extern int PQsendQueryPrepared(PGconn *conn, + const char *stmtName, + int nParams, + const char *const * paramValues, + const int *paramLengths, + const int *paramFormats, + int resultFormat); +extern PGresult *PQgetResult(PGconn *conn); + +/* Routines for managing an asynchronous query */ +extern int PQisBusy(PGconn *conn); +extern int PQconsumeInput(PGconn *conn); + +/* LISTEN/NOTIFY support */ +extern PGnotify *PQnotifies(PGconn *conn); + +/* Routines for copy in/out */ +extern int PQputCopyData(PGconn *conn, const char *buffer, int nbytes); +extern int PQputCopyEnd(PGconn *conn, const char *errormsg); +extern int PQgetCopyData(PGconn *conn, char **buffer, int async); + +/* Deprecated routines for copy in/out */ +extern int PQgetline(PGconn *conn, char *string, int length); +extern int PQputline(PGconn *conn, const char *string); +extern int PQgetlineAsync(PGconn *conn, char *buffer, int bufsize); +extern int PQputnbytes(PGconn *conn, const char *buffer, int nbytes); +extern int PQendcopy(PGconn *conn); + +/* Set blocking/nonblocking connection to the backend */ +extern int PQsetnonblocking(PGconn *conn, int arg); +extern int PQisnonblocking(const PGconn *conn); +extern int PQisthreadsafe(void); + +/* Force the write buffer to be written (or at least try) */ +extern int PQflush(PGconn *conn); + +/* + * "Fast path" interface --- not really recommended for application + * use + */ +extern PGresult *PQfn(PGconn *conn, + int fnid, + int *result_buf, + int *result_len, + int result_is_int, + const PQArgBlock *args, + int nargs); + +/* Accessor functions for PGresult objects */ +extern ExecStatusType PQresultStatus(const PGresult *res); +extern char *PQresStatus(ExecStatusType status); +extern char *PQresultErrorMessage(const PGresult *res); +extern char *PQresultErrorField(const PGresult *res, int fieldcode); +extern int PQntuples(const PGresult *res); +extern int PQnfields(const PGresult *res); +extern int PQbinaryTuples(const PGresult *res); +extern char *PQfname(const PGresult *res, int field_num); +extern int PQfnumber(const PGresult *res, const char *field_name); +extern Oid PQftable(const PGresult *res, int field_num); +extern int PQftablecol(const PGresult *res, int field_num); +extern int PQfformat(const PGresult *res, int field_num); +extern Oid PQftype(const PGresult *res, int field_num); +extern int PQfsize(const PGresult *res, int field_num); +extern int PQfmod(const PGresult *res, int field_num); +extern char *PQcmdStatus(PGresult *res); +extern char *PQoidStatus(const PGresult *res); /* old and ugly */ +extern Oid PQoidValue(const PGresult *res); /* new and improved */ +extern char *PQcmdTuples(PGresult *res); +extern char *PQgetvalue(const PGresult *res, int tup_num, int field_num); +extern int PQgetlength(const PGresult *res, int tup_num, int field_num); +extern int PQgetisnull(const PGresult *res, int tup_num, int field_num); +extern int PQnparams(const PGresult *res); +extern Oid PQparamtype(const PGresult *res, int param_num); + +/* Describe prepared statements and portals */ +extern PGresult *PQdescribePrepared(PGconn *conn, const char *stmt); +extern PGresult *PQdescribePortal(PGconn *conn, const char *portal); +extern int PQsendDescribePrepared(PGconn *conn, const char *stmt); +extern int PQsendDescribePortal(PGconn *conn, const char *portal); + +/* Delete a PGresult */ +extern void PQclear(PGresult *res); + +/* For freeing other alloc'd results, such as PGnotify structs */ +extern void PQfreemem(void *ptr); + +/* Exists for backward compatibility. bjm 2003-03-24 */ +#define PQfreeNotify(ptr) PQfreemem(ptr) + +/* Define the string so all uses are consistent. */ +#define PQnoPasswordSupplied "fe_sendauth: no password supplied\n" + +/* + * Make an empty PGresult with given status (some apps find this + * useful). If conn is not NULL and status indicates an error, the + * conn's errorMessage is copied. + */ +extern PGresult *PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status); + + +/* Quoting strings before inclusion in queries. */ +extern size_t PQescapeStringConn(PGconn *conn, + char *to, const char *from, size_t length, + int *error); +extern unsigned char *PQescapeByteaConn(PGconn *conn, + const unsigned char *from, size_t from_length, + size_t *to_length); +extern unsigned char *PQunescapeBytea(const unsigned char *strtext, + size_t *retbuflen); + +/* These forms are deprecated! */ +extern size_t PQescapeString(char *to, const char *from, size_t length); +extern unsigned char *PQescapeBytea(const unsigned char *from, size_t from_length, + size_t *to_length); + + + +/* === in fe-print.c === */ + +extern void +PQprint(FILE *fout, /* output stream */ + const PGresult *res, + const PQprintOpt *ps); /* option structure */ + +/* + * really old printing routines + */ +extern void +PQdisplayTuples(const PGresult *res, + FILE *fp, /* where to send the output */ + int fillAlign, /* pad the fields with spaces */ + const char *fieldSep, /* field separator */ + int printHeader, /* display headers? */ + int quiet); + +extern void +PQprintTuples(const PGresult *res, + FILE *fout, /* output stream */ + int printAttName, /* print attribute names */ + int terseOutput, /* delimiter bars */ + int width); /* width of column, if 0, use variable width */ + + +/* === in fe-lobj.c === */ + +/* Large-object access routines */ +extern int lo_open(PGconn *conn, Oid lobjId, int mode); +extern int lo_close(PGconn *conn, int fd); +extern int lo_read(PGconn *conn, int fd, char *buf, size_t len); +extern int lo_write(PGconn *conn, int fd, const char *buf, size_t len); +extern int lo_lseek(PGconn *conn, int fd, int offset, int whence); +extern Oid lo_creat(PGconn *conn, int mode); +extern Oid lo_create(PGconn *conn, Oid lobjId); +extern int lo_tell(PGconn *conn, int fd); +extern int lo_unlink(PGconn *conn, Oid lobjId); +extern Oid lo_import(PGconn *conn, const char *filename); +extern int lo_export(PGconn *conn, Oid lobjId, const char *filename); + +/* === in fe-misc.c === */ + +/* Determine length of multibyte encoded char at *s */ +extern int PQmblen(const char *s, int encoding); + +/* Determine display length of multibyte encoded char at *s */ +extern int PQdsplen(const char *s, int encoding); + +/* Get encoding id from environment variable PGCLIENTENCODING */ +extern int PQenv2encoding(void); + +/* === in fe-auth.c === */ + +extern char *PQencryptPassword(const char *passwd, const char *user); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBPQ_FE_H */ Added: trunk/octave-forge/main/database/src/mysql.i =================================================================== --- trunk/octave-forge/main/database/src/mysql.i (rev 0) +++ trunk/octave-forge/main/database/src/mysql.i 2008-03-15 18:45:29 UTC (rev 4753) @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2008, Xavier Delacour <xav...@gm...> + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the BSD License. For details see the COPYING + * file included as part of this distribution. + */ + +%module mysql + +#pragma SWIG nowarn=451 + +%{ +#include <mysql/mysql.h> +#include "generic_db.h" +#undef max_allowed_packet +#undef net_buffer_length +%} + +struct MYSQL_ROW {}; +%extend MYSQL_ROW { + const char* __paren(int i) const { + return (*$self)[i]; + } +} + +// taken from mysql_com.h +enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY, + MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG, + MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE, + MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP, + MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24, + MYSQL_TYPE_DATE, MYSQL_TYPE_TIME, + MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR, + MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR, + MYSQL_TYPE_BIT, + MYSQL_TYPE_NEWDECIMAL=246, + MYSQL_TYPE_ENUM=247, + MYSQL_TYPE_SET=248, + MYSQL_TYPE_TINY_BLOB=249, + MYSQL_TYPE_MEDIUM_BLOB=250, + MYSQL_TYPE_LONG_BLOB=251, + MYSQL_TYPE_BLOB=252, + MYSQL_TYPE_VAR_STRING=253, + MYSQL_TYPE_STRING=254, + MYSQL_TYPE_GEOMETRY=255 }; + +%include "mysql_filtered.h" +%include "generic_db.h" + +// ***************************************************************************** +// * simplified api + +%typemap(out,noblock=1) Cell {$result=$1;} + +%inline { + struct mysql_db : generic_db { + MYSQL* db; + mysql_db(const char* host, + const char* user, + const char* password, + const char* db_name) { + db=mysql_init(0); + if (!db) { + error("failed to create MYSQL structure"); + return; + } + if (!mysql_real_connect(db,"localhost","root","secret","testdb",0,0,0)) { + error("connect to database failed: error %i: %s", + mysql_errno(db),mysql_error(db)); + return; + } + } + ~mysql_db() { + if (db) + mysql_close(db); + } + virtual Cell sql(const char* query) { + if (!db) { + error("invalid state"); + return Cell(); + } + + if (mysql_query(db,query)) { + error("query failed: error %i: %s", + mysql_errno(db),mysql_error(db)); + return Cell(); + } + + MYSQL_RES* res=mysql_store_result(db); + if (!res) + return Cell(); + + unsigned int nc=mysql_field_count(db); + unsigned int nr=(unsigned int)(mysql_num_rows(res)); + + std::vector<MYSQL_FIELD*> fields(nc); + for (unsigned int j=0;j<nc;++j) + fields[j]=mysql_fetch_field_direct(res,j); + + Cell c(nr,nc); + octave_value ov; + for (unsigned int j=0;j<nr;++j) { + MYSQL_ROW row=mysql_fetch_row(res); + for (unsigned int k=0;k<nc;++k) { + switch (fields[k]->type) { + case MYSQL_TYPE_DECIMAL: + case MYSQL_TYPE_SHORT: + case MYSQL_TYPE_TINY: + case MYSQL_TYPE_LONG: + case MYSQL_TYPE_INT24: + ov=octave_value(atol(row[k])); + break; + case MYSQL_TYPE_FLOAT: + case MYSQL_TYPE_DOUBLE: + ov=octave_value(atof(row[k])); + break; + case MYSQL_TYPE_LONGLONG: + ov=octave_value(octave_int64(atoll(row[k]))); + break; + case MYSQL_TYPE_NULL: + ov=SWIG_NewPointerObj(0,SWIGTYPE_p_void,0); + break; + default: + ov=octave_value(std::string(row[k])); + } + c(j,k)=ov; + } + } + + mysql_free_result(res); + return c; + } + }; +} Added: trunk/octave-forge/main/database/src/mysql_filtered.h =================================================================== --- trunk/octave-forge/main/database/src/mysql_filtered.h (rev 0) +++ trunk/octave-forge/main/database/src/mysql_filtered.h 2008-03-15 18:45:29 UTC (rev 4753) @@ -0,0 +1,879 @@ +/* Copyright (C) 2000-2003 MySQL AB + + 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; version 2 of the License. + + 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 */ + +/* + This file defines the client API to MySQL and also the ABI of the + dynamically linked libmysqlclient. + + The ABI should never be changed in a released product of MySQL + thus you need to take great care when changing the file. In case + the file is changed so the ABI is broken, you must also + update the SHAREDLIB_MAJOR_VERSION in configure.in . + +*/ + +#ifndef _mysql_h +#define _mysql_h + +#ifdef SWIG +#define STDCALL +#endif // SWIG + +#ifdef __CYGWIN__ /* CYGWIN implements a UNIX API */ +#undef WIN +#undef _WIN +#undef _WIN32 +#undef _WIN64 +#undef __WIN__ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef SWIG +#ifndef _global_h /* If not standard header */ +#include <sys/types.h> +#ifdef __LCC__ +#include <winsock.h> /* For windows */ +#endif +typedef char my_bool; +#if (defined(_WIN32) || defined(_WIN64)) && !defined(__WIN__) +#define __WIN__ +#endif +#if !defined(__WIN__) +#define STDCALL +#else +#define STDCALL __stdcall +#endif +typedef char * gptr; + +#ifndef my_socket_defined +#ifdef __WIN__ +#define my_socket SOCKET +#else +typedef int my_socket; +#endif /* __WIN__ */ +#endif /* my_socket_defined */ +#endif /* _global_h */ + +#include "mysql_version.h" +#include "mysql_com.h" +#include "mysql_time.h" +#include "typelib.h" + +#include "my_list.h" /* for LISTs used in 'MYSQL' and 'MYSQL_STMT' */ + +extern unsigned int mysql_port; +extern char *mysql_unix_port; + +#define CLIENT_NET_READ_TIMEOUT 365*24*3600 /* Timeout on read */ +#define CLIENT_NET_WRITE_TIMEOUT 365*24*3600 /* Timeout on write */ + +#ifdef __NETWARE__ +#pragma pack(push, 8) /* 8 byte alignment */ +#endif +#endif // SWIG + +#define IS_PRI_KEY(n) ((n) & PRI_KEY_FLAG) +#define IS_NOT_NULL(n) ((n) & NOT_NULL_FLAG) +#define IS_BLOB(n) ((n) & BLOB_FLAG) +#define IS_NUM(t) ((t) <= FIELD_TYPE_INT24 || (t) == FIELD_TYPE_YEAR || (t) == FIELD_TYPE_NEWDECIMAL) +#define IS_NUM_FIELD(f) ((f)->flags & NUM_FLAG) +#define INTERNAL_NUM_FIELD(f) (((f)->type <= FIELD_TYPE_INT24 && ((f)->type != FIELD_TYPE_TIMESTAMP || (f)->length == 14 || (f)->length == 8)) || (f)->type == FIELD_TYPE_YEAR) +#define IS_LONGDATA(t) ((t) >= MYSQL_TYPE_TINY_BLOB && (t) <= MYSQL_TYPE_STRING) + +typedef struct st_mysql_field { + char *name; /* Name of column */ + char *org_name; /* Original column name, if an alias */ + char *table; /* Table of column if column was a field */ + char *org_table; /* Org table name, if table was an alias */ + char *db; /* Database for table */ + char *catalog; /* Catalog for table */ + char *def; /* Default value (set by mysql_list_fields) */ + unsigned long length; /* Width of column (create length) */ + unsigned long max_length; /* Max width for selected set */ + unsigned int name_length; + unsigned int org_name_length; + unsigned int table_length; + unsigned int org_table_length; + unsigned int db_length; + unsigned int catalog_length; + unsigned int def_length; + unsigned int flags; /* Div flags */ + unsigned int decimals; /* Number of decimals in field */ + unsigned int charsetnr; /* Character set */ + enum enum_field_types type; /* Type of field. See mysql_com.h for types */ +} MYSQL_FIELD; + +#ifndef SWIG +typedef char **MYSQL_ROW; /* return data as array of strings */ +typedef unsigned int MYSQL_FIELD_OFFSET; /* offset to current field */ +#endif // SWIG + +#ifndef _global_h +#if defined(NO_CLIENT_LONG_LONG) +typedef unsigned long my_ulonglong; +#elif defined (__WIN__) +typedef unsigned __int64 my_ulonglong; +#else +typedef unsigned long long my_ulonglong; +#endif +#endif + +#define MYSQL_COUNT_ERROR (~(my_ulonglong) 0) + +/* backward compatibility define - to be removed eventually */ +#define ER_WARN_DATA_TRUNCATED WARN_DATA_TRUNCATED + +typedef struct st_mysql_rows { + struct st_mysql_rows *next; /* list of rows */ + MYSQL_ROW data; + unsigned long length; +} MYSQL_ROWS; + +#ifndef SWIG +typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; /* offset to current row */ + +#include "my_alloc.h" +#endif // SWIG + +typedef struct embedded_query_result EMBEDDED_QUERY_RESULT; +typedef struct st_mysql_data { + my_ulonglong rows; + unsigned int fields; + MYSQL_ROWS *data; + MEM_ROOT alloc; + /* extra info for embedded library */ + struct embedded_query_result *embedded_info; +} MYSQL_DATA; + +enum mysql_option +{ + MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE, + MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP, + MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE, + MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT, + MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT, + MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION, + MYSQL_OPT_GUESS_CONNECTION, MYSQL_SET_CLIENT_IP, MYSQL_SECURE_AUTH, + MYSQL_REPORT_DATA_TRUNCATION, MYSQL_OPT_RECONNECT, + MYSQL_OPT_SSL_VERIFY_SERVER_CERT +}; + +struct st_mysql_options { + unsigned int connect_timeout, read_timeout, write_timeout; + unsigned int port, protocol; + unsigned long client_flag; + char *host,*user,*password,*unix_socket,*db; + struct st_dynamic_array *init_commands; + char *my_cnf_file,*my_cnf_group, *charset_dir, *charset_name; + char *ssl_key; /* PEM key file */ + char *ssl_cert; /* PEM cert file */ + char *ssl_ca; /* PEM CA file */ + char *ssl_capath; /* PEM directory of CA-s? */ + char *ssl_cipher; /* cipher to use */ + char *shared_memory_base_name; + unsigned long max_allowed_packet; + my_bool use_ssl; /* if to use SSL or not */ + my_bool compress,named_pipe; + /* + On connect, find out the replication role of the server, and + establish connections to all the peers + */ + my_bool rpl_probe; + /* + Each call to mysql_real_query() will parse it to tell if it is a read + or a write, and direct it to the slave or the master + */ + my_bool rpl_parse; + /* + If set, never read from a master, only from slave, when doing + a read that is replication-aware + */ + my_bool no_master_reads; +#if !defined(CHECK_EMBEDDED_DIFFERENCES) || defined(EMBEDDED_LIBRARY) + my_bool separate_thread; +#endif + enum mysql_option methods_to_use; + char *client_ip; + /* Refuse client connecting to server if it uses old (pre-4.1.1) protocol */ + my_bool secure_auth; + /* 0 - never report, 1 - always report (default) */ + my_bool report_data_truncation; + + /* function pointers for local infile support */ + int (*local_infile_init)(void **, const char *, void *); + int (*local_infile_read)(void *, char *, unsigned int); + void (*local_infile_end)(void *); + int (*local_infile_error)(void *, char *, unsigned int); + void *local_infile_userdata; +}; + +enum mysql_status +{ + MYSQL_STATUS_READY,MYSQL_STATUS_GET_RESULT,MYSQL_STATUS_USE_RESULT +}; + +enum mysql_protocol_type +{ + MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET, + MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY +}; +/* + There are three types of queries - the ones that have to go to + the master, the ones that go to a slave, and the adminstrative + type which must happen on the pivot connectioin +*/ +enum mysql_rpl_type +{ + MYSQL_RPL_MASTER, MYSQL_RPL_SLAVE, MYSQL_RPL_ADMIN +}; + +typedef struct character_set +{ + unsigned int number; /* character set number */ + unsigned int state; /* character set state */ + const char *csname; /* collation name */ + const char *name; /* character set name */ + const char *comment; /* comment */ + const char *dir; /* character set directory */ + unsigned int mbminlen; /* min. length for multibyte strings */ + unsigned int mbmaxlen; /* max. length for multibyte strings */ +} MY_CHARSET_INFO; + +struct st_mysql_methods; +struct st_mysql_stmt; + +typedef struct st_mysql +{ + NET net; /* Communication parameters */ + gptr connector_fd; /* ConnectorFd for SSL */ + char *host,*user,*passwd,*unix_socket,*server_version,*host_info,*info; + char *db; + struct charset_info_st *charset; + MYSQL_FIELD *fields; + MEM_ROOT field_alloc; + my_ulonglong affected_rows; + my_ulonglong insert_id; /* id if insert on table with NEXTNR */ + my_ulonglong extra_info; /* Not used */ + unsigned long thread_id; /* Id for connection in server */ + unsigned long packet_length; + unsigned int port; + unsigned long client_flag,server_capabilities; + unsigned int protocol_version; + unsigned int field_count; + unsigned int server_status; + unsigned int server_language; + unsigned int warning_count; + struct st_mysql_options options; + enum mysql_status status; + my_bool free_me; /* If free in mysql_close */ + my_bool reconnect; /* set to 1 if automatic reconnect */ + + /* session-wide random string */ + char scramble[SCRAMBLE_LENGTH+1]; + + /* + Set if this is the original connection, not a master or a slave we have + added though mysql_rpl_probe() or mysql_set_master()/ mysql_add_slave() + */ + my_bool rpl_pivot; + /* + Pointers to the master, and the next slave connections, points to + itself if lone connection. + */ + struct st_mysql* master, *next_slave; + + struct st_mysql* last_used_slave; /* needed for round-robin slave pick */ + /* needed for send/read/store/use result to work correctly with replication */ + struct st_mysql* last_used_con; + + LIST *stmts; /* list of all statements */ + const struct st_mysql_methods *methods; + void *thd; + /* + Points to boolean flag in MYSQL_RES or MYSQL_STMT. We set this flag + from mysql_stmt_close if close had to cancel result set of this object. + */ + my_bool *unbuffered_fetch_owner; +#if defined(EMBEDDED_LIBRARY) || defined(EMBEDDED_LIBRARY_COMPATIBLE) || MYSQL_VERSION_ID >= 50100 + /* needed for embedded server - no net buffer to store the 'info' */ + char *info_buffer; +#endif +} MYSQL; + +typedef struct st_mysql_res { + my_ulonglong row_count; + MYSQL_FIELD *fields; + MYSQL_DATA *data; + MYSQL_ROWS *data_cursor; + unsigned long *lengths; /* column lengths of current row */ + MYSQL *handle; /* for unbuffered reads */ + MEM_ROOT field_alloc; + unsigned int field_co... [truncated message content] |
From: <sla...@us...> - 2008-03-17 14:51:45
|
Revision: 4760 http://octave.svn.sourceforge.net/octave/?rev=4760&view=rev Author: slackydeb Date: 2008-03-17 07:51:42 -0700 (Mon, 17 Mar 2008) Log Message: ----------- Added Paths: ----------- trunk/octave-forge/main/ga/ trunk/octave-forge/main/ga/COPYING trunk/octave-forge/main/ga/DESCRIPTION trunk/octave-forge/main/ga/INDEX trunk/octave-forge/main/ga/doc/ trunk/octave-forge/main/ga/doc/todo.txt trunk/octave-forge/main/ga/inst/ trunk/octave-forge/main/ga/inst/__bin2hex__.m trunk/octave-forge/main/ga/inst/__bin2num__.m trunk/octave-forge/main/ga/inst/__ga_calcola_img_fitnessfcn__.m trunk/octave-forge/main/ga/inst/__ga_concatenated_bitstring2doubles__.m trunk/octave-forge/main/ga/inst/__ga_doubles2concatenated_bitstring__.m trunk/octave-forge/main/ga/inst/__ga_problem__.m trunk/octave-forge/main/ga/inst/__ga_sort_ascend_population__.m trunk/octave-forge/main/ga/inst/__ga_stop__.m trunk/octave-forge/main/ga/inst/__hex2bin__.m trunk/octave-forge/main/ga/inst/__num2bin__.m trunk/octave-forge/main/ga/inst/crossoverscattered.m trunk/octave-forge/main/ga/inst/crossoversinglepoint.m trunk/octave-forge/main/ga/inst/ga.m trunk/octave-forge/main/ga/inst/gacreationuniform.m trunk/octave-forge/main/ga/inst/gaoptimget.m trunk/octave-forge/main/ga/inst/gaoptimset.m trunk/octave-forge/main/ga/inst/mutationsinglepoint.m trunk/octave-forge/main/ga/inst/selectionroulette.m Added: trunk/octave-forge/main/ga/COPYING =================================================================== --- trunk/octave-forge/main/ga/COPYING (rev 0) +++ trunk/octave-forge/main/ga/COPYING 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,337 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. Added: trunk/octave-forge/main/ga/DESCRIPTION =================================================================== --- trunk/octave-forge/main/ga/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/ga/DESCRIPTION 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,12 @@ +Name: ga +Version: 0.1.1 +Date: 2008-03-17 +Author: Luca Favatella <sla...@gm...> +Maintainer: Luca Favatella <sla...@gm...> +Title: Genetic Algorithm and Direct Search +Description: Genetic optimization code +Categories: Optimization +Depends: octave (>= 2.9.7), miscellaneous +Autoload: yes +License: GPL version 2 or later +Url: http://octave.sf.net Added: trunk/octave-forge/main/ga/INDEX =================================================================== --- trunk/octave-forge/main/ga/INDEX (rev 0) +++ trunk/octave-forge/main/ga/INDEX 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,12 @@ +ga >> Genetic Algorithm +Genetic Algorithm + ga + gaoptimget + gaoptimset + +Utility + crossoverscattered + crossoversinglepoint + gacreationuniform + mutationsinglepoint + selectionroulette Added: trunk/octave-forge/main/ga/doc/todo.txt =================================================================== --- trunk/octave-forge/main/ga/doc/todo.txt (rev 0) +++ trunk/octave-forge/main/ga/doc/todo.txt 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,28 @@ +##### +fare gacreationuniform come matlab, ma non fare generalizzazione in gaoptimset e get perché octave non sa passare handle di funzione a funzione caricata con handle + +ricontrollare +##### + +##### +gaoptimset: + +StallGenLimit? +StallTimeLimit? +TimeLimit? //tic toc utile ma non nested + +NO InitialPopulation? //no, consentire solo intervallo +NO PopulationType? //no, solo vettori di double +NO PlotFcns? //no, plot non sono priorita' +NO PlotInterval? //no, solo alla fine +##### + + +##### +eventuale uscita con x,fval oltre che solo x? +##### + + +##### +forse matlab fissa pure la frazione di crossover e mutazione, cioè non sceglie l'operatore con probabilità +##### \ No newline at end of file Added: trunk/octave-forge/main/ga/inst/__bin2hex__.m =================================================================== --- trunk/octave-forge/main/ga/inst/__bin2hex__.m (rev 0) +++ trunk/octave-forge/main/ga/inst/__bin2hex__.m 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,44 @@ +## Copyright (C) 2008 Luca Favatella <sla...@gm...> +## +## +## 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, 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; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## -*- texinfo -*- +## @deftypefn {Function File} {} __bin2hex__ (@var{s}) +## Return the hexadecimal number corresponding to the binary number stored in the string @var{s}. For example, +## +## @example +## __bin2hex__ ("1101110") +## @result{} 6E +## @end example +## +## If @var{s} is a string matrix, returns a column vector of converted numbers, one per row of @var{s}. +## +## @example +## __bin2hex__ (["1101110"; "1110"]) +## @result{} [6E; 0E] +## @end example +## @seealso{__hex2bin__, bin2dec, dec2hex} +## @end deftypefn + +## Author: Luca Favatella <sla...@gm...> +## Version: 1.1 + +function h = __bin2hex__ (b) + + h = dec2hex (bin2dec (b)); + +endfunction \ No newline at end of file Added: trunk/octave-forge/main/ga/inst/__bin2num__.m =================================================================== --- trunk/octave-forge/main/ga/inst/__bin2num__.m (rev 0) +++ trunk/octave-forge/main/ga/inst/__bin2num__.m 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,44 @@ +## Copyright (C) 2008 Luca Favatella <sla...@gm...> +## +## +## 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, 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; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## -*- texinfo -*- +## @deftypefn {Function File} {} __bin2num__ (@var{b}) +## Return the IEEE 754 double precision number represented by the binary number stored in the string @var{b}. For example, +## +## @example +## __bin2num__ ("0011111111110000000000000000000000000000000000000000000000000000") +## @result{} 1 +## @end example +## +## If @var{b} is a string matrix, returns a column vector of converted numbers, one per row of @var{b}. +## +## @example +## __bin2num__ (["0011111111110000000000000000000000000000000000000000000000000000"; "1100000000001000000000000000000000000000000000000000000000000000"]) +## @result{} [1; -3] +## @end example +## @seealso{__num2bin__, __bin2hex__, hex2num} +## @end deftypefn + +## Author: Luca Favatella <sla...@gm...> +## Version: 1.0 + +function n = __bin2num__ (b) + + n = hex2num (__bin2hex__ (b)); + +endfunction \ No newline at end of file Added: trunk/octave-forge/main/ga/inst/__ga_calcola_img_fitnessfcn__.m =================================================================== --- trunk/octave-forge/main/ga/inst/__ga_calcola_img_fitnessfcn__.m (rev 0) +++ trunk/octave-forge/main/ga/inst/__ga_calcola_img_fitnessfcn__.m 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,31 @@ +## Copyright (C) 2008 Luca Favatella <sla...@gm...> +## +## +## 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, 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; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## Author: Luca Favatella <sla...@gm...> +## Version: 3.1 + +function retval = __ga_calcola_img_fitnessfcn__ (fitnessfcn, popolazione) + img_fitnessfcn = zeros (rows (popolazione), 1); + + %dentro questo for l'individuo e' fissato + for i = 1:rows (popolazione) + img_fitnessfcn (i) = fitnessfcn (popolazione (i, :)); + endfor + + retval = img_fitnessfcn; +endfunction \ No newline at end of file Added: trunk/octave-forge/main/ga/inst/__ga_concatenated_bitstring2doubles__.m =================================================================== --- trunk/octave-forge/main/ga/inst/__ga_concatenated_bitstring2doubles__.m (rev 0) +++ trunk/octave-forge/main/ga/inst/__ga_concatenated_bitstring2doubles__.m 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,38 @@ +## Copyright (C) 2008 Luca Favatella <sla...@gm...> +## +## +## 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, 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; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## Author: Luca Favatella <sla...@gm...> +## Version: 3.2 + +function doubles = __ga_concatenated_bitstring2doubles__ (concatenated_bitstring) + + %costanti + N_BIT_DOUBLE = 64; + + %una variabile d'appoggio + nvars = length (concatenated_bitstring) / N_BIT_DOUBLE; + + %ottengo il figlio dalla sua stringa di bit + tmp1 = zeros (1, nvars); + for i = 1:nvars + tmp_aux = (i - 1) * N_BIT_DOUBLE; + tmp1(i) = __bin2num__ (concatenated_bitstring((tmp_aux + 1):(tmp_aux + N_BIT_DOUBLE))); + endfor + + doubles = tmp1; +endfunction \ No newline at end of file Added: trunk/octave-forge/main/ga/inst/__ga_doubles2concatenated_bitstring__.m =================================================================== --- trunk/octave-forge/main/ga/inst/__ga_doubles2concatenated_bitstring__.m (rev 0) +++ trunk/octave-forge/main/ga/inst/__ga_doubles2concatenated_bitstring__.m 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,31 @@ +## Copyright (C) 2008 Luca Favatella <sla...@gm...> +## +## +## 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, 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; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## Author: Luca Favatella <sla...@gm...> +## Version: 3.2 + +function concatenated_bitstring = __ga_doubles2concatenated_bitstring__ (doubles) + + %stringhe di bit ottenuta concatenando le stringhe di bit delle singole variabili + tmp1 = __num2bin__ (doubles(1)); + for i = 2:length(doubles) %2:1 e' una matrice vuota in octave + tmp1 = strcat (tmp1, __num2bin__ (doubles(i))); + endfor + + concatenated_bitstring = tmp1; +endfunction \ No newline at end of file Added: trunk/octave-forge/main/ga/inst/__ga_problem__.m =================================================================== --- trunk/octave-forge/main/ga/inst/__ga_problem__.m (rev 0) +++ trunk/octave-forge/main/ga/inst/__ga_problem__.m 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,67 @@ +## Copyright (C) 2008 Luca Favatella <sla...@gm...> +## +## +## 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, 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; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## Author: Luca Favatella <sla...@gm...> +## Version: 3.1 + +function x = __ga_problem__ (problem) + + %statistica degli individui migliori + individui_migliori = []; + + popolazione = (gaoptimget (problem.options, 'CreationFcn')) (problem.nvars, problem.fitnessfcn, problem.options); + + %dentro questo while la generazione e' fissata + generazione = 1; + individui_migliori(generazione, :) = (__ga_sort_ascend_population__ (problem.fitnessfcn, popolazione))(1, :); + while (! __ga_stop__ (problem, popolazione, generazione)) + + %faccio questa inizializzazione qui per rendere la variabile popolazione_futura visibile alla fine del prossimo while + popolazione_futura = zeros (gaoptimget (problem.options, 'PopulationSize'), problem.nvars); + + %elitismo + for i = 1:(gaoptimget (problem.options, 'EliteCount')) + popolazione_futura(i, :) = (__ga_sort_ascend_population__ (problem.fitnessfcn, popolazione))(i, :); + endfor + + %dentro questo while l'individuo della nuova generazione e' fissato + for i = (1 + (gaoptimget (problem.options, 'EliteCount'))):(gaoptimget (problem.options, 'PopulationSize')) + + %scelgo l'operatore genetico da applicare in modo probabilistico + aux_operatore = rand (); + + %cross_over + if (aux_operatore < gaoptimget (problem.options, 'CrossoverFraction')) + index_parents = (gaoptimget (problem.options, 'SelectionFcn')) (problem.fitnessfcn, popolazione); + parents = [popolazione(index_parents(1), :); popolazione(index_parents(2), :)]; + popolazione_futura(i, :) = gaoptimget (problem.options, 'CrossoverFcn') (parents); + + %mutazione + else + index_parent = (gaoptimget (problem.options, 'SelectionFcn')) (problem.fitnessfcn, popolazione); + popolazione_futura(i, :) = (gaoptimget (problem.options, 'MutationFcn')) (popolazione(index_parent(1), :)); + endif + endfor + + popolazione = popolazione_futura; + generazione++; + individui_migliori(generazione, :) = (__ga_sort_ascend_population__ (problem.fitnessfcn, popolazione))(1, :); + endwhile + + x = individui_migliori(generazione, :); +endfunction \ No newline at end of file Added: trunk/octave-forge/main/ga/inst/__ga_sort_ascend_population__.m =================================================================== --- trunk/octave-forge/main/ga/inst/__ga_sort_ascend_population__.m (rev 0) +++ trunk/octave-forge/main/ga/inst/__ga_sort_ascend_population__.m 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,28 @@ +## Copyright (C) 2008 Luca Favatella <sla...@gm...> +## +## +## 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, 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; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## Author: Luca Favatella <sla...@gm...> +## Version: 3.1 + +function sorted_population = __ga_sort_ascend_population__ (fitnessfcn, popolazione) + + %le immagini di fitnessfcn sulla popolazione ordinate in ordine crescente + [trash index] = sort (__ga_calcola_img_fitnessfcn__ (fitnessfcn, popolazione)); + + sorted_population = popolazione(index, :); +endfunction \ No newline at end of file Added: trunk/octave-forge/main/ga/inst/__ga_stop__.m =================================================================== --- trunk/octave-forge/main/ga/inst/__ga_stop__.m (rev 0) +++ trunk/octave-forge/main/ga/inst/__ga_stop__.m 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,30 @@ +## Copyright (C) 2008 Luca Favatella <sla...@gm...> +## +## +## 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, 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; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## Author: Luca Favatella <sla...@gm...> +## Version: 3.1 + +%ritorna true se è stata raggiunta la condizione di stop, false altrimenti +function retval = __ga_stop__ (problem, popolazione, generazione) + __ga_stop_aux1__ = (generazione >= gaoptimget (problem.options, 'Generations')); + + %in doc matlab e' previsto <= e non < + __ga_stop_aux2__ = (problem.fitnessfcn ((__ga_sort_ascend_population__ (problem.fitnessfcn, popolazione))(1, :)) <= gaoptimget (problem.options, 'FitnessLimit')); + + retval = (__ga_stop_aux1__ || __ga_stop_aux2__); +endfunction \ No newline at end of file Added: trunk/octave-forge/main/ga/inst/__hex2bin__.m =================================================================== --- trunk/octave-forge/main/ga/inst/__hex2bin__.m (rev 0) +++ trunk/octave-forge/main/ga/inst/__hex2bin__.m 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,44 @@ +## Copyright (C) 2008 Luca Favatella <sla...@gm...> +## +## +## 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, 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; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## -*- texinfo -*- +## @deftypefn {Function File} {} __hex2bin__ (@var{s}) +## Return the binary number corresponding to the hexadecimal number stored in the string @var{s}. For example, +## +## @example +## __hex2bin__ ("6E") +## @result{} 1101110 +## @end example +## +## If @var{s} is a string matrix, returns a column vector of converted numbers, one per row of @var{s}. +## +## @example +## __hex2bin__ (["6E"; "E"]) +## @result{} [1101110; 0001110] +## @end example +## @seealso{__bin2hex__, hex2dec, dec2bin} +## @end deftypefn + +## Author: Luca Favatella <sla...@gm...> +## Version: 1.1 + +function b = __hex2bin__ (h) + + b = dec2bin (hex2dec (h)); + +endfunction \ No newline at end of file Added: trunk/octave-forge/main/ga/inst/__num2bin__.m =================================================================== --- trunk/octave-forge/main/ga/inst/__num2bin__.m (rev 0) +++ trunk/octave-forge/main/ga/inst/__num2bin__.m 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,44 @@ +## Copyright (C) 2008 Luca Favatella <sla...@gm...> +## +## +## 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, 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; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## -*- texinfo -*- +## @deftypefn {Function File} {} __num2bin__ (@var{n}) +## Return the binary representation of the IEEE 754 double precision number @var{n}. For example, +## +## @example +## __num2bin__ (1) +## @result{} 0011111111110000000000000000000000000000000000000000000000000000 +## @end example +## +## If @var{n} is a number matrix, returns a column vector of converted numbers, one per row of @var{n}. +## +## @example +## __num2bin__ (["1"; "-3"]) +## @result{} [0011111111110000000000000000000000000000000000000000000000000000; 1100000000001000000000000000000000000000000000000000000000000000] +## @end example +## @seealso{__bin2num__, num2hex, __hex2bin__} +## @end deftypefn + +## Author: Luca Favatella <sla...@gm...> +## Version: 1.0 + +function b = __num2bin__ (n) + + b = __hex2bin__ (num2hex (n)); + +endfunction \ No newline at end of file Added: trunk/octave-forge/main/ga/inst/crossoverscattered.m =================================================================== --- trunk/octave-forge/main/ga/inst/crossoverscattered.m (rev 0) +++ trunk/octave-forge/main/ga/inst/crossoverscattered.m 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,43 @@ +## Copyright (C) 2008 Luca Favatella <sla...@gm...> +## +## +## 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, 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; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## -*- texinfo -*- +## @deftypefn{Function File} {@var{xoverKids} =} crossoverscattered (@var{parents}) +## Combine two individuals, or parents, to form a crossover child. +## +## @seealso{ga, gaoptimset} +## @end deftypefn + +## Author: Luca Favatella <sla...@gm...> +## Version: 3.1 + +%signature diversa da matlab per problema handle funzioni (comunque se piu' tempo da riprovare) +function xoverKids = crossoverscattered (parents) + concatenated_parents = [(__ga_doubles2concatenated_bitstring__ (parents(1, :))); (__ga_doubles2concatenated_bitstring__ (parents(2, :)))]; + + %crossover scattered + tmp = concatenated_parents(1, :); + for i = 1:length (tmp) + if (rand () < 0.5) + tmp(1, i) = concatenated_parents(2, i); + endif + endfor + concatenated_xoverKids = tmp; + + xoverKids = __ga_concatenated_bitstring2doubles__ (concatenated_xoverKids); +endfunction \ No newline at end of file Added: trunk/octave-forge/main/ga/inst/crossoversinglepoint.m =================================================================== --- trunk/octave-forge/main/ga/inst/crossoversinglepoint.m (rev 0) +++ trunk/octave-forge/main/ga/inst/crossoversinglepoint.m 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,48 @@ +## Copyright (C) 2008 Luca Favatella <sla...@gm...> +## +## +## 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, 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; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## -*- texinfo -*- +## @deftypefn{Function File} {@var{xoverKids} =} crossoversinglepoint (@var{parents}) +## Combine two individuals, or parents, to form a crossover child. +## +## @seealso{ga, gaoptimset} +## @end deftypefn + +## Author: Luca Favatella <sla...@gm...> +## Version: 3.1 + +%signature diversa da matlab per problema handle funzioni (comunque se piu' tempo da riprovare) +function xoverKids = crossoversinglepoint (parents) + + %costanti + N_BIT_DOUBLE = 64; + + %una variabile d'appoggio + nvars = columns (parents); + + concatenated_parents = [(__ga_doubles2concatenated_bitstring__ (parents(1, :))); (__ga_doubles2concatenated_bitstring__ (parents(2, :)))]; + + %n e' il singolo punto del crossover + %n potra' andare da 1 a ((N_BIT_DOUBLE * nvars) - 1) + n = double (uint64 ((((nvars * N_BIT_DOUBLE) - 2) * rand ()) + 1)); + + %crossover a singolo punto + concatenated_xoverKids = strcat (substr (concatenated_parents (1, :), 1, n), substr (concatenated_parents (2, :), (n + 1))); + + xoverKids = __ga_concatenated_bitstring2doubles__ (concatenated_xoverKids); +endfunction \ No newline at end of file Added: trunk/octave-forge/main/ga/inst/ga.m =================================================================== --- trunk/octave-forge/main/ga/inst/ga.m (rev 0) +++ trunk/octave-forge/main/ga/inst/ga.m 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,98 @@ +## Copyright (C) 2008 Luca Favatella <sla...@gm...> +## +## +## 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, 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; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## -*- texinfo -*- +## @deftypefn{Function File} {@var{x} =} ga (@var{fitnessfcn}, @var{nvars}) +## @deftypefnx{Function File} {@var{x} =} ga (@var{fitnessfcn}, @var{nvars}, @var{options}) +## @deftypefnx{Function File} {@var{x} =} ga (@var{problem}) +## Find minimum of function using genetic algorithm. +## +## @strong{Inputs} +## @table @var +## @item fitnessfcn +## The objective function to minimize. It accepts a vector @var{x} of size 1-by-@var{nvars}, and returns a scalar evaluated at @var{x}. +## @item nvars +## The number of variables of @var{fitnessfcn}. +## @item options +## The structure of the optimization parameters; can be created with using the @code{gaoptimset} function. If not specified, @code{ga} minimizes with the default optimization parameters. +## @item problem +## A structure containing the following fields: @var{fitnessfcn}, @var{nvars} and @var{options}. +## @end table +## +## @strong{Outputs} +## @table @var +## @item x +## The local unconstrained found minimum to the objective function. +## @end table +## +## @seealso{gaoptimset} +## @end deftypefn + +## Author: Luca Favatella <sla...@gm...> +## Version: 3.1 + +function x = ga (varargin) + if ((nargout > 1) || (length (varargin) <1) || (length (varargin) > 3)) + print_usage (); + else + switch (length (varargin)) + case (1) + problem = varargin{1}; + case (2) + problem.fitnessfcn = varargin{1}; + problem.nvars = varargin{2}; + problem.options = gaoptimset; + case (3) + problem.fitnessfcn = varargin{1}; + problem.nvars = varargin{2}; + problem.options = varargin{3}; + endswitch + + x = __ga_problem__ (problem); + endif +endfunction + +%!function retval = test_4_variabili (x) +%! retval = 0; +%! retval += 20 + (x(1) ** 2) + (x(2) ** 2) - 10 * (cos (2 * pi * x(1)) + cos (2 * pi * x(2))); +%! retval += (x(3) ** 2) - (cos (2 * pi * x(3))) + 1; +%! retval += x(4) ** 2; + +%!assert (ga (@test_4_variabili, 4, gaoptimset ('FitnessLimit', 0.001, 'PopInitRange', [-1; 1])), [0, 0, 0, 0], sqrt(0.001)) + +%!function retval = test_rastriginsfcn_traslato (t) +%! min = [1, 0]; +%! x = t - min; +%! retval = 20 + (x(1) ** 2) + (x(2) ** 2) - 10 * (cos (2 * pi * x(1)) + cos (2 * pi * x(2))); + +%!assert (ga (@test_rastriginsfcn_traslato, 2, gaoptimset ('FitnessLimit', 0.001, 'PopInitRange', [-2; 2], 'PopulationSize', 100)), [1, 0], sqrt(0.001)) + +%!function retval = test_rastriginsfcn (x) +%! retval = 20 + (x(1) ** 2) + (x(2) ** 2) - 10 * (cos (2 * pi * x(1)) + cos (2 * pi * x(2))); + +%!assert (ga (@test_rastriginsfcn, 2), [0, 0], 1e-6) + +%!function retval = test_f_con_inf_minimi_locali (x) +%! retval = (x ** 2) - (cos (2 * pi * x)) + 1; + +%!assert (ga (@test_f_con_inf_minimi_locali, 1, gaoptimset ('CrossoverFcn', @crossoversinglepoint, 'EliteCount', 1, 'FitnessLimit', 0.001, 'Generations', 25, 'PopInitRange', [-5; 5])), 0, sqrt(0.001)) + +%!function retval = test_parabola (x) +%! retval = x ** 2; + +%!assert (ga (@test_parabola, 1, gaoptimset ('CrossoverFcn', @crossoversinglepoint, 'EliteCount', 1, 'FitnessLimit', 0.001, 'Generations', 10, 'PopInitRange', [-1; 1])), 0, sqrt(0.001)) \ No newline at end of file Added: trunk/octave-forge/main/ga/inst/gacreationuniform.m =================================================================== --- trunk/octave-forge/main/ga/inst/gacreationuniform.m (rev 0) +++ trunk/octave-forge/main/ga/inst/gacreationuniform.m 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,54 @@ +## Copyright (C) 2008 Luca Favatella <sla...@gm...> +## +## +## 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, 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; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## -*- texinfo -*- +## @deftypefn{Function File} {@var{Population} =} gacreationuniform (@var{GenomeLength}, @var{FitnessFcn}, @var{options}) +## Create a random initial population with a uniform distribution. +## +## @strong{Inputs} +## @table @var +## @item GenomeLength +## The number of indipendent variables for the fitness function. +## @item FitnessFcn +## The fitness function. +## @item options +## The options structure. +## @end table +## +## @strong{Outputs} +## @table @var +## @item Population +## The initial population for the genetic algorithm. +## @end table +## +## @seealso{ga, gaoptimset} +## @end deftypefn + +## Author: Luca Favatella <sla...@gm...> +## Version: 3.0 + +function Population = gacreationuniform (GenomeLength, FitnessFcn, options) + + %variabili d'appoggio + tmp_aux = gaoptimget (options, 'PopInitRange'); + lb = min (tmp_aux(1, 1), tmp_aux(2, 1)); + ub = max (tmp_aux(1, 1), tmp_aux(2, 1)); + + n_rows_aux = gaoptimget (options, 'PopulationSize'); + Population = ((ub - lb) * rand (n_rows_aux, GenomeLength)) + (lb * ones (n_rows_aux, GenomeLength)); +endfunction \ No newline at end of file Added: trunk/octave-forge/main/ga/inst/gaoptimget.m =================================================================== --- trunk/octave-forge/main/ga/inst/gaoptimget.m (rev 0) +++ trunk/octave-forge/main/ga/inst/gaoptimget.m 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,56 @@ +## Copyright (C) 2008 Luca Favatella <sla...@gm...> +## +## +## 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, 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; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## -*- texinfo -*- +## @deftypefn{Function File} {@var{val} =} gaoptimget (@var{options}, '@var{name}'} +## Return the value of the parameter @var{name} from the genetic algorithm options structure. +## +## @seealso{gaoptimset} +## @end deftypefn + +## Author: Luca Favatella <sla...@gm...> +## Version: 3.0 + +function val = gaoptimget (options, name) + if (nargin != 2) + print_usage (); + else + switch (name) + case 'CreationFcn' + val = options.CreationFcn; + case 'CrossoverFcn' + val = options.CrossoverFcn; + case 'CrossoverFraction' + val = options.CrossoverFraction; + case 'EliteCount' + val = options.EliteCount; + case 'FitnessLimit' + val = options.FitnessLimit; + case 'Generations' + val = options.Generations; + case 'MutationFcn' + val = options.MutationFcn; + case 'PopInitRange' + val = options.PopInitRange; + case 'PopulationSize' + val = options.PopulationSize; + case 'SelectionFcn' + val = options.SelectionFcn; + endswitch + endif +endfunction \ No newline at end of file Added: trunk/octave-forge/main/ga/inst/gaoptimset.m =================================================================== --- trunk/octave-forge/main/ga/inst/gaoptimset.m (rev 0) +++ trunk/octave-forge/main/ga/inst/gaoptimset.m 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,142 @@ +## Copyright (C) 2008 Luca Favatella <sla...@gm...> +## +## +## 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, 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; see the file COPYING. If not, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## -*- texinfo -*- +## @deftypefn{Function File} gaoptimset +## @deftypefnx{Function File} {@var{options} =} gaoptimset +## @deftypefnx{Function File} {@var{options} =} gaoptimset ('@var{param1}', @var{value1}, '@var{param2}', @var{value2}, @dots{}) +## Create genetic algorithm options structure. +## +## @strong{Inputs} +## @table @var +## @item param +## Parameter to set. Any unspecified parameters are set to their default values. +## @item value +## Value of @var{param}. +## @end table +## +## @strong{Outputs} +## @table @var +## @item options +## The options structure. +## @end table +## +## @strong{Options} +## @table @code +## @item CreationFcn +## @item CrossoverFcn +## @item CrossoverFraction +## @item EliteCount +## @item FitnessLimit +## @item Generations +## @item MutationFcn +## @item PopInitRange +## @item PopulationSize +## @item SelectionFcn +## @end table +## +## @seealso{ga, gaoptimget} +## @end deftypefn + +## Author: Luca Favatella <sla...@gm...> +## Version: 3.0 + +function options = gaoptimset (varargin) + if (nargout == 0) + warning ("Dovrei mostrare una lista completa dei parametri con i loro argomenti."); + print_usage (); + elseif (nargout > 1) + print_usage (); + else + if (mod (length (varargin), 2) == 1) + print_usage (); + else + %definisco una struttura default_options con tutti i campi di default + default_options.CreationFcn = @gacreationuniform; + default_options.CrossoverFcn = @crossoverscattered; + default_options.CrossoverFraction = 0.8; + default_options.EliteCount = 2; + default_options.FitnessLimit = -Inf; + default_options.Generations = 100; + default_options.MutationFcn = @mutationsinglepoint; + default_options.PopInitRange = [0; 1]; + default_options.PopulationSize = 20; + default_options.SelectionFcn = @selectionroulette; + + %setto nella variabile di ritorno options i parametri specificati in ingresso alla funzione + i = 1; + while (length (varargin) >= (i + 1)) + switch (varargin{i}) + case 'CreationFcn' + options.CreationFcn = varargin{i + 1}; + case 'CrossoverFcn' + options.CrossoverFcn = varargin{i + 1}; + case 'CrossoverFraction' + options.CrossoverFraction = varargin{i + 1}; + case 'EliteCount' + options.EliteCount = varargin{i + 1}; + case 'FitnessLimit' + options.FitnessLimit = varargin{i + 1}; + case 'Generations' + options.Generations = varargin{i + 1}; + case 'MutationFcn' + options.MutationFcn = varargin{i + 1}; + case 'PopInitRange' + options.PopInitRange = varargin{i + 1}; + case 'PopulationSize' + options.PopulationSize = varargin{i + 1}; + case 'SelectionFcn' + options.SelectionFcn = varargin{i + 1}; + endswitch + i = i + 2; + endwhile + + %setto con i valori di default i parametri non settati + if ((! exist ('options', 'var')) || (! isfield (options, 'CreationFcn'))) + options.CreationFcn = default_options.CreationFcn; + endif + if ((! exist ('options', 'var')) || (! isfield (options, 'CrossoverFcn'))) + options.CrossoverFcn = default_options.CrossoverFcn; + endif + if ((! exist ('options', 'var')) || (! isfield (options, 'CrossoverFraction'))) + options.CrossoverFraction = default_options.CrossoverFraction; + endif + if ((! exist ('options', 'var')) || (! isfield (options, 'EliteCount'))) + options.EliteCount = default_options.EliteCount; + endif + if ((! exist ('options', 'var')) || (! isfield (options, 'FitnessLimit'))) + options.FitnessLimit = default_options.FitnessLimit; + endif + if ((! exist ('options', 'var')) || (! isfield (options, 'Generations'))) + options.Generations = default_options.Generations; + endif + if ((! exist ('options', 'var')) || (! isfield (options, 'MutationFcn'))) + options.MutationFcn = default_options.MutationFcn; + endif + if ((! exist ('options', 'var')) || (! isfield (options, 'PopInitRange'))) + options.PopInitRange = default_options.PopInitRange; + endif + if ((! exist ('options', 'var')) || (! isfield (options, 'PopulationSize'))) + options.PopulationSize = default_options.PopulationSize; + endif + if ((! exist ('options', 'var')) || (! isfield (options, 'SelectionFcn'))) + options.SelectionFcn = default_options.SelectionFcn; + endif + endif + endif +endfunction \ No newline at end of file Added: trunk/octave-forge/main/ga/inst/mutationsinglepoint.m =================================================================== --- trunk/octave-forge/main/ga/inst/mutationsinglepoint.m (rev 0) +++ trunk/octave-forge/main/ga/inst/mutationsinglepoint.m 2008-03-17 14:51:42 UTC (rev 4760) @@ -0,0 +1,50 @@ +## Copyright (C) 2008 Luca Favatella <sla...@gm...> +## +## +## 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, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, bu... [truncated message content] |
From: <xav...@us...> - 2008-03-24 21:04:29
|
Revision: 4800 http://octave.svn.sourceforge.net/octave/?rev=4800&view=rev Author: xavier98 Date: 2008-03-24 14:04:20 -0700 (Mon, 24 Mar 2008) Log Message: ----------- Initial commit of ftplib bindings. Implements: ascii binary ftp mget mput ftp_cd ftp_remove ftp_rename ftp_put ftp_get ftp_mkdir ftp_rmdir ftp_ls ftp_dir Added Paths: ----------- trunk/octave-forge/main/ftp/ trunk/octave-forge/main/ftp/COPYING trunk/octave-forge/main/ftp/DESCRIPTION trunk/octave-forge/main/ftp/INDEX trunk/octave-forge/main/ftp/Makefile trunk/octave-forge/main/ftp/PKG_ADD trunk/octave-forge/main/ftp/inst/ trunk/octave-forge/main/ftp/src/ trunk/octave-forge/main/ftp/src/Makeconf.in trunk/octave-forge/main/ftp/src/Makefile trunk/octave-forge/main/ftp/src/README trunk/octave-forge/main/ftp/src/autogen.sh trunk/octave-forge/main/ftp/src/configure.base trunk/octave-forge/main/ftp/src/ftp.i trunk/octave-forge/main/ftp/src/ftplib_filtered.h trunk/octave-forge/main/ftp/src/tests/ trunk/octave-forge/main/ftp/src/tests/basic.m trunk/octave-forge/main/ftp/src/tests/empty.m trunk/octave-forge/main/ftp/src/tests/twice.m Added: trunk/octave-forge/main/ftp/COPYING =================================================================== --- trunk/octave-forge/main/ftp/COPYING (rev 0) +++ trunk/octave-forge/main/ftp/COPYING 2008-03-24 21:04:20 UTC (rev 4800) @@ -0,0 +1,25 @@ +Copyright (c) 2008, Xavier Delacour <xav...@gm...> +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + * The names of its contributors may not be used to endorse or promote +products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + Added: trunk/octave-forge/main/ftp/DESCRIPTION =================================================================== --- trunk/octave-forge/main/ftp/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/ftp/DESCRIPTION 2008-03-24 21:04:20 UTC (rev 4800) @@ -0,0 +1,12 @@ +Name: ftp +Version: 1.0 +Date: 2008-03-23 +Author: Xavier Delacour +Maintainer: Xavier Delacour +Title: Bindings for ftplib. +Description: These are bindings for ftplib, and MATLAB compatible APIs. +Depends: octave (>= 2.9.12) +Autoload: yes +SystemRequirements: swig, ftplib-dev. +License: BSD +Url: http://octave.sf.net Added: trunk/octave-forge/main/ftp/INDEX =================================================================== --- trunk/octave-forge/main/ftp/INDEX (rev 0) +++ trunk/octave-forge/main/ftp/INDEX 2008-03-24 21:04:20 UTC (rev 4800) @@ -0,0 +1,16 @@ +ftp >> FTP +ascii +binary +ftp +mget +mput +ftp_cd +ftp_remove +ftp_rename +ftp_put +ftp_get +ftp_mkdir +ftp_rmdir +ftp_ls +ftp_dir + Added: trunk/octave-forge/main/ftp/Makefile =================================================================== --- trunk/octave-forge/main/ftp/Makefile (rev 0) +++ trunk/octave-forge/main/ftp/Makefile 2008-03-24 21:04:20 UTC (rev 4800) @@ -0,0 +1,4 @@ +sinclude ../../Makeconf + + +PKG_FILES = COPYING DESCRIPTION INDEX PKG_ADD $(wildcard inst/*) $(wildcard src/*) Added: trunk/octave-forge/main/ftp/PKG_ADD =================================================================== --- trunk/octave-forge/main/ftp/PKG_ADD (rev 0) +++ trunk/octave-forge/main/ftp/PKG_ADD 2008-03-24 21:04:20 UTC (rev 4800) @@ -0,0 +1,3 @@ +ftpobj; + + Added: trunk/octave-forge/main/ftp/src/Makeconf.in =================================================================== --- trunk/octave-forge/main/ftp/src/Makeconf.in (rev 0) +++ trunk/octave-forge/main/ftp/src/Makeconf.in 2008-03-24 21:04:20 UTC (rev 4800) @@ -0,0 +1,69 @@ + +## Makeconf is automatically generated from Makeconf.base and Makeconf.add +## in the various subdirectories. To regenerate, use ./autogen.sh to +## create a new ./Makeconf.in, then use ./configure to generate a new +## Makeconf. + +OCTAVE_FORGE = 1 + +SHELL = @SHELL@ + +canonical_host_type = @canonical_host_type@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ +bindir = @bindir@ +mandir = @mandir@ +libdir = @libdir@ +datadir = @datadir@ +infodir = @infodir@ +includedir = @includedir@ +datarootdir = @datarootdir@ +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALLOCT=octinst.sh + +DESTDIR = + +RANLIB = @RANLIB@ +STRIP = @STRIP@ +LN_S = @LN_S@ + +AWK = @AWK@ + +# Most octave programs will be compiled with $(MKOCTFILE). Those which +# cannot use mkoctfile directly can request the flags that mkoctfile +# would use as follows: +# FLAG = $(shell $(MKOCTFILE) -p FLAG) +# The following flags are for compiling programs that are independent +# of Octave. How confusing. +CC = @CC@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +CPICFLAG = @CPICFLAG@ +CXX = @CXX@ +CXXFLAGS = @CXXFLAGS@ +CXXPICFLAG = @CXXPICFLAG@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FPICFLAG = @FPICFLAG@ + +OCTAVE = @OCTAVE@ +OCTAVE_VERSION = @OCTAVE_VERSION@ +MKOCTFILE = @MKOCTFILE@ -DHAVE_OCTAVE_$(ver) -v +SHLEXT = @SHLEXT@ + +ver = @ver@ +MPATH = @mpath@ +OPATH = @opath@ +XPATH = @xpath@ +ALTMPATH = @altmpath@ +ALTOPATH = @altopath@ + +SWIG = @swigpath@ + +%.o: %.c ; $(MKOCTFILE) -c $< +%.o: %.f ; $(MKOCTFILE) -c $< +%.o: %.cc ; $(MKOCTFILE) -c $< +%.oct: %.cc ; $(MKOCTFILE) $< Added: trunk/octave-forge/main/ftp/src/Makefile =================================================================== --- trunk/octave-forge/main/ftp/src/Makefile (rev 0) +++ trunk/octave-forge/main/ftp/src/Makefile 2008-03-24 21:04:20 UTC (rev 4800) @@ -0,0 +1,31 @@ +sinclude Makeconf + +ifndef SWIG +SWIG=~/swig/preinst-swig +endif +ifndef MKOCTFILE +MKOCTFILE=g++ -g -shared +endif + +.PHONY: clean check + +all: ftpobj.oct + +ftpobj.oct: ftp.i ftplib_filtered.h + $(SWIG) -octave -c++ -o ftp_wrap.cpp ftp.i + $(MKOCTFILE) -o ftpobj.oct ftp_wrap.cpp -lftp + +clean: + -$(RM) *.o octave-core core *.oct *~ *_wrap.cpp + +TEST_CASES = \ + basic \ + empty \ + twice + +NOT_BROKEN_TEST_CASES = $(TEST_CASES:=.test) +.PHONY: check +check: all $(NOT_BROKEN_TEST_CASES) +%.test: + octave -q tests/$*.m > /dev/null + Added: trunk/octave-forge/main/ftp/src/README =================================================================== --- trunk/octave-forge/main/ftp/src/README (rev 0) +++ trunk/octave-forge/main/ftp/src/README 2008-03-24 21:04:20 UTC (rev 4800) @@ -0,0 +1,20 @@ + +As of this writing, the version of SWIG supporting Octave hasn't yet +been released. You'll need to go download and build it yourself from +SWIG's SVN repository. See +http://sourceforge.net/svn/?group_id=1645 +http://octave-swig.sourceforge.net/ + +To build the bindings, run: +make + +To run the tests, run: +make check + + +-------------------------------------------------------------------- +-- Maintainer Notes + +The *_filtered.h files are system headers w/ very minor changes (a few +#ifndef SWIG ... #endif), such that they are easy to keep current w/ +diff/patch/whatever. Added: trunk/octave-forge/main/ftp/src/autogen.sh =================================================================== --- trunk/octave-forge/main/ftp/src/autogen.sh (rev 0) +++ trunk/octave-forge/main/ftp/src/autogen.sh 2008-03-24 21:04:20 UTC (rev 4800) @@ -0,0 +1,27 @@ +#! /bin/sh + +## Generate ./configure +rm -f configure.in +echo "dnl --- DO NOT EDIT --- Automatically generated by autogen.sh" > configure.in +cat configure.base >> configure.in +cat <<EOF >> configure.in + AC_OUTPUT(\$CONFIGURE_OUTPUTS) + dnl XXX FIXME XXX chmod is not in autoconf's list of portable functions + + echo " " + echo " \"\\\$prefix\" is \$prefix" + echo " \"\\\$exec_prefix\" is \$exec_prefix" + AC_MSG_RESULT([\$STATUS_MSG + +find . -name NOINSTALL -print # shows which toolboxes won't be installed +]) +EOF + +autoconf configure.in > configure.tmp +if [ diff configure.tmp configure > /dev/null 2>&1 ]; then + rm -f configure.tmp; +else + mv -f configure.tmp configure + chmod 0755 configure +fi +rm -f configure.in Property changes on: trunk/octave-forge/main/ftp/src/autogen.sh ___________________________________________________________________ Name: svn:executable + * Added: trunk/octave-forge/main/ftp/src/configure.base =================================================================== --- trunk/octave-forge/main/ftp/src/configure.base (rev 0) +++ trunk/octave-forge/main/ftp/src/configure.base 2008-03-24 21:04:20 UTC (rev 4800) @@ -0,0 +1,357 @@ +dnl The configure script is generated by autogen.sh from configure.base +dnl and the various configure.add files in the source tree. Edit +dnl configure.base and reprocess rather than modifying ./configure. + +dnl autoconf 2.13 certainly doesn't work! What is the minimum requirement? +AC_PREREQ(2.2) + +AC_INIT(configure.base) + +PACKAGE=octave-forge +MAJOR_VERSION=0 +MINOR_VERSION=1 +PATCH_LEVEL=0 + +dnl Kill caching --- this ought to be the default +define([AC_CACHE_LOAD], )dnl +define([AC_CACHE_SAVE], )dnl + +dnl uncomment to put support files in another directory +dnl AC_CONFIG_AUX_DIR(admin) + +VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL +AC_SUBST(PACKAGE) +AC_SUBST(VERSION) + +dnl need to find admin files, so keep track of the top dir. +TOPDIR=`pwd` +AC_SUBST(TOPDIR) + +dnl if mkoctfile doesn't work, then we need the following: +dnl AC_PROG_CXX +dnl AC_PROG_F77 + +dnl Need C compiler regardless so define it in a way that +dnl makes autoconf happy and we can override whatever we +dnl need with mkoctfile -p. +dnl XXX FIXME XXX should use mkoctfile to get CC and CFLAGS +AC_PROG_CC + +dnl XXX FIXME XXX need tests for -p -c -s in mkoctfile. + +dnl ******************************************************************* +dnl Sort out mkoctfile version number and install paths + +dnl XXX FIXME XXX latest octave has octave-config so we don't +dnl need to discover things here. Doesn't have --exe-site-dir +dnl but defines --oct-site-dir and --m-site-dir + +dnl Check for mkoctfile +AC_CHECK_PROG(MKOCTFILE,mkoctfile,mkoctfile) +test -z "$MKOCTFILE" && AC_MSG_WARN([no mkoctfile found on path]) + +AC_SUBST(ver) +AC_SUBST(subver) +AC_SUBST(mpath) +AC_SUBST(opath) +AC_SUBST(xpath) +AC_SUBST(altpath) +AC_SUBST(altmpath) +AC_SUBST(altopath) + +AC_ARG_WITH(path, + [ --with-path install path prefix], + [ path=$withval ]) +AC_ARG_WITH(mpath, + [ --with-mpath override path for m-files], + [mpath=$withval]) +AC_ARG_WITH(opath, + [ --with-opath override path for oct-files], + [opath=$withval]) +AC_ARG_WITH(xpath, + [ --with-xpath override path for executables], + [xpath=$withval]) +AC_ARG_WITH(altpath, + [ --with-altpath alternative functions install path prefix], + [ altpath=$withval ]) +AC_ARG_WITH(altmpath, + [ --with-altmpath override path for alternative m-files], + [altmpath=$withval]) +AC_ARG_WITH(altopath, + [ --with-altopath override path for alternative oct-files], + [altopath=$withval]) + +if test -n "$path" ; then + test -z "$mpath" && mpath=$path + test -z "$opath" && opath=$path/oct + test -z "$xpath" && xpath=$path/bin + test -z "$altpath" && altpath=$path-alternatives +fi + +if test -n "$altpath" ; then + test -z "$altmpath" && altmpath=$altpath + test -z "$altopath" && altopath=$altpath/oct +fi + +dnl Don't query if path/ver are given in the configure environment +#if test -z "$mpath" || test -z "$opath" || test -z "$xpath" || test -z "$altmpath" || test -z "$altopath" || test -z "$ver" ; then +if test -z "$mpath" || test -z "$opath" || test -z "$xpath" || test -z "$ver" ; then + dnl Construct program to get mkoctfile version and local install paths + cat > conftest.cc <<EOF +#include <octave/config.h> +#include <octave/version.h> +#include <octave/defaults.h> + +#define INFOV "\nINFOV=" OCTAVE_VERSION "\n" + +#define INFOH "\nINFOH=" OCTAVE_CANONICAL_HOST_TYPE "\n" + +#ifdef OCTAVE_LOCALVERFCNFILEDIR +# define INFOM "\nINFOM=" OCTAVE_LOCALVERFCNFILEDIR "\n" +#else +# define INFOM "\nINFOM=" OCTAVE_LOCALFCNFILEPATH "\n" +#endif + +#ifdef OCTAVE_LOCALVEROCTFILEDIR +# define INFOO "\nINFOO=" OCTAVE_LOCALVEROCTFILEDIR "\n" +#else +# define INFOO "\nINFOO=" OCTAVE_LOCALOCTFILEPATH "\n" +#endif + +#ifdef OCTAVE_LOCALVERARCHLIBDIR +# define INFOX "\nINFOX=" OCTAVE_LOCALVERARCHLIBDIR "\n" +#else +# define INFOX "\nINFOX=" OCTAVE_LOCALARCHLIBDIR "\n" +#endif + +const char *infom = INFOM; +const char *infoo = INFOO; +const char *infox = INFOX; +const char *infoh = INFOH; +const char *infov = INFOV; +EOF + + dnl Compile program perhaps with a special version of mkoctfile + $MKOCTFILE conftest.cc || AC_MSG_ERROR(Could not run $MKOCTFILE) + + dnl Strip the config info from the compiled file + eval `strings conftest.o | grep "^INFO.=" | sed -e "s,//.*$,,"` + rm -rf conftest* + + dnl set the appropriate variables if they are not already set + ver=`echo $INFOV | sed -e "s/\.//" -e "s/\..*$//"` + subver=`echo $INFOV | sed -e "[s/^[^.]*[.][^.]*[.]//]"` + alt_mbase=`echo $INFOM | sed -e "[s,\/[^\/]*$,,]"` + alt_obase=`echo $INFOO | sed -e "[s,/site.*$,/site,]"` + test -z "$mpath" && mpath=$INFOM/octave-forge + test -z "$opath" && opath=$INFOO/octave-forge + test -z "$xpath" && xpath=$INFOX + test -z "$altmpath" && altmpath=$alt_mbase/octave-forge-alternatives/m + test -z "$altopath" && altopath=$alt_obase/octave-forge-alternatives/oct/$INFOH +fi + +dnl ******************************************************************* + +dnl XXX FIXME XXX Should we allow the user to override these? +dnl Do we even need them? The individual makefiles can call mkoctfile -p +dnl themselves, so the only reason to keep them is for configure, and +dnl for those things which are not built using mkoctfile (e.g., aurecord) +dnl but it is not clear we should be using octave compile flags for those. + +dnl C compiler and flags +AC_MSG_RESULT([retrieving compile and link flags from $MKOCTFILE]) +CC=`$MKOCTFILE -p CC` +CFLAGS=`$MKOCTFILE -p CFLAGS` +CPPFLAGS=`$MKOCTFILE -p CPPFLAGS` +CPICFLAG=`$MKOCTFILE -p CPICFLAG` +LDFLAGS=`$MKOCTFILE -p LDFLAGS` +LIBS=`$MKOCTFILE -p LIBS` +AC_SUBST(CC) +AC_SUBST(CFLAGS) +AC_SUBST(CPPFLAGS) +AC_SUBST(CPICFLAG) + +dnl Fortran compiler and flags +F77=`$MKOCTFILE -p F77` +FFLAGS=`$MKOCTFILE -p FFLAGS` +FPICFLAG=`$MKOCTFILE -p FPICFLAG` +AC_SUBST(F77) +AC_SUBST(FFLAGS) +AC_SUBST(FPICFLAG) + +dnl C++ compiler and flags +CXX=`$MKOCTFILE -p CXX` +CXXFLAGS=`$MKOCTFILE -p CXXFLAGS` +CXXPICFLAG=`$MKOCTFILE -p CXXPICFLAG` +AC_SUBST(CXX) +AC_SUBST(CXXFLAGS) +AC_SUBST(CXXPICFLAG) + +dnl ******************************************************************* + +dnl Check for features of your version of mkoctfile. +dnl All checks should be designed so that the default +dnl action if the tests are not performed is to do whatever +dnl is appropriate for the most recent version of Octave. + +dnl Define the following macro: +dnl OF_CHECK_LIB(lib,fn,true,false,helpers) +dnl This is just like AC_CHECK_LIB, but it doesn't update LIBS +AC_DEFUN(OF_CHECK_LIB, +[save_LIBS="$LIBS" +AC_CHECK_LIB($1,$2,$3,$4,$5) +LIBS="$save_LIBS" +]) + +dnl Define the following macro: +dnl TRY_MKOCTFILE(msg,program,action_if_true,action_if_false) +dnl +AC_DEFUN(TRY_MKOCTFILE, +[AC_MSG_CHECKING($1) +cat > conftest.cc << EOF +#include <octave/config.h> +$2 +EOF +ac_try="$MKOCTFILE -c conftest.cc" +if AC_TRY_EVAL(ac_try) ; then + AC_MSG_RESULT(yes) + $3 +else + AC_MSG_RESULT(no) + $4 +fi +]) + +dnl +dnl Check if F77_FUNC works with MKOCTFILE +dnl +TRY_MKOCTFILE([for F77_FUNC], +[int F77_FUNC (hello, HELLO) (const int &n);],, +[MKOCTFILE="$MKOCTFILE -DF77_FUNC=F77_FCN"]) + +dnl +dnl Check if octave still uses SLList.h +dnl +TRY_MKOCTFILE([for SLList.h],[#include <octave/SLList.h>], +[MKOCTFILE="$MKOCTFILE -DHAVE_SLLIST_H"],) + +dnl +dnl Check if octave has lo_ieee_nan_value +dnl +TRY_MKOCTFILE([for lo_ieee_nan_value], +[ #include <octave/lo-ieee.h> +int test(void) { lo_ieee_nan_value(); }],, +[MKOCTFILE="$MKOCTFILE -DUSE_OCTAVE_NAN"]) + +dnl +dnl Check if octave is needs octave_idx_type +dnl +TRY_MKOCTFILE([for octave_idx_type], +[#include <octave/oct-types.h> +octave_idx_type test(void) { octave_idx_type idx = 1; return idx; }],, +[MKOCTFILE="$MKOCTFILE -Doctave_idx_type=int"]) + +dnl +dnl Check if octave uses quit.h +dnl +TRY_MKOCTFILE([for quit.h],[#include <octave/quit.h>],, +[MKOCTFILE="$MKOCTFILE -DNEED_OCTAVE_QUIT"]) + +dnl ********************************************************** + +dnl Evaluate an expression in octave +dnl +dnl OCTAVE_EVAL(expr,var) -> var=expr +dnl +AC_DEFUN(OCTAVE_EVAL, +[AC_MSG_CHECKING([for $1 in Octave]) +$2=`echo "disp($1)" | $OCTAVE -qf` +AC_MSG_RESULT($$2) +AC_SUBST($2) +]) + +dnl Check status of an octave variable +dnl +dnl OCTAVE_CHECK_EXIST(variable,action_if_true,action_if_false) +dnl +AC_DEFUN(OCTAVE_CHECK_EXIST, +[AC_MSG_CHECKING([for $1 in Octave]) +if test `echo 'disp(exist("$1"))' | $OCTAVE -qf`X != 0X ; then + AC_MSG_RESULT(yes) + $2 +else + AC_MSG_RESULT(no) + $3 +fi +]) + +dnl should check that $(OCTAVE) --version matches $(MKOCTFILE) --version +AC_CHECK_PROG(OCTAVE,octave,octave) +OCTAVE_EVAL(OCTAVE_VERSION,OCTAVE_VERSION) + +dnl grab canonical host type so we can write system specific install stuff +OCTAVE_EVAL(octave_config_info('canonical_host_type'),canonical_host_type) + +dnl grab SHLEXT from octave config +OCTAVE_EVAL(octave_config_info('SHLEXT'),SHLEXT) + +AC_PROG_LN_S + +AC_PROG_RANLIB + +dnl Use $(COPY_FLAGS) to set options for cp when installing .oct files. +COPY_FLAGS="-Rfp" +case "$canonical_host_type" in + *-*-linux*) + COPY_FLAGS="-fdp" + ;; +esac +AC_SUBST(COPY_FLAGS) + +dnl Use $(STRIP) in the makefile to strip executables. If not found, +dnl STRIP expands to ':', which in the makefile does nothing. +dnl Don't need this for .oct files since mkoctfile handles them directly +STRIP=${STRIP-strip} +AC_CHECK_PROG(STRIP,$STRIP,$STRIP,:) + +dnl Strip on windows, don't strip on Mac OS/X or IRIX +dnl For the rest, you can force strip using MKOCTFILE="mkoctfile -s" +dnl or avoid strip using STRIP=: before ./configure +case "$canonical_host_type" in + powerpc-apple-darwin*|*-sgi-*) + STRIP=: + ;; + *-cygwin-*|*-mingw-*) + MKOCTFILE="$MKOCTFILE -s" + ;; +esac + +dnl check for swig and test that it supports octave +AC_PATH_PROG(swigpath,swig) +test -z "$swigpath" && AC_MSG_ERROR(swig not found on path) +cat > conftest.i <<EOF +%module conftest +EOF +$swigpath -c++ -octave conftest.i || AC_MSG_ERROR(swig doesn't support octave modules) +rm -f conftest.* + +CONFIGURE_OUTPUTS="Makeconf" +STATUS_MSG=" +octave commands will install into the following directories: + m-files: $mpath + oct-files: $opath + binaries: $xpath +alternatives: + m-files: $altmpath + oct-files: $altopath + +shell commands will install into the following directories: + binaries: $bindir + man pages: $mandir + libraries: $libdir + headers: $includedir + +octave-forge is configured with + octave: $OCTAVE (version $OCTAVE_VERSION) + mkoctfile: $MKOCTFILE for Octave $subver + swig: $swigpath" Added: trunk/octave-forge/main/ftp/src/ftp.i =================================================================== --- trunk/octave-forge/main/ftp/src/ftp.i (rev 0) +++ trunk/octave-forge/main/ftp/src/ftp.i 2008-03-24 21:04:20 UTC (rev 4800) @@ -0,0 +1,288 @@ +/* + * Copyright (c) 2008, Xavier Delacour <xav...@gm...> + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the BSD License. For details see the COPYING + * file included as part of this distribution. + */ + +// docs here: http://nbpfaus.net/~pfau/ftplib/ + +%module ftpobj + +%include <std_string.i> + +%{ +#include <ftplib.h> +#include <algorithm> +#include <sstream> +%} + +// * does host:port syntax work? + +// * are wildcards handled properly by ftplib (or the remote end?) +// * seems unlikely, given the interface + +// * mget: does output==path match matlab behavior? + +// * mget: this doesn't do recursive mget when given a directory + +// * mget: doesn't return the send or received paths correctly + +// * mput: doesn't handle wildcard or recursive directory uploading + +// * how to get docstring to not need to specify the function name? + +// ********************************************************************** +// C interface + +// return [netbuf *] in place of netbuf ** +%typemap(in,numinputs=0,noblock=1) netbuf **nControl (netbuf *tmp=0) { + $1=&tmp; +} +%typemap(argout,noblock=1) netbuf **nControl { + %append_output(SWIG_NewPointerObj(%as_voidptr(*$1), $descriptor(netbuf *), 1)); +} + +// take max and return a charMatrix in place of (void *buf, int max) +%typemap(in,numinputs=1,noblock=1) (void *buf, int max) (charMatrix tmp) { + if (!$input.is_integer_type()) { + error("max must be integer type"); + SWIG_fail; + } + $2=(int)$input.scalar_value();; + tmp=charMatrix(1,$2,0); + $1=&tmp(0); +} +%typemap(argout) (void *buf, int max) { + %append_output(tmp$argnum); +} + +// take a charMatrix in place of (void *buf, int len) +%typemap(in,numinputs=1,noblock=1) (void *buf, int len) (charMatrix tmp) { + if (!$input.is_matrix_type()) { + error("buffer must be vector type"); + SWIG_fail; + } + tmp=$input.char_matrix_value(); + $1=&tmp(0); + $2=tmp.numel(); +} + +// return [size] in place of (int *size) +%typemap(in,numinputs=0,noblock=1) int *size (int tmp) { + $1=&tmp; +} +%typemap(argout,noblock=1) int *size { + %append_output($1); +} + +// return a string 'YYYYMMDDHHMMSS' in place of (char *dt) +%typemap(in,numinputs=0,noblock=1) char *dt (char tmp[32]) { + $1=tmp; +} +%typemap(argout,noblock=1) char *dt { + tmp$argnum[strlen("YYYYMMDDHHMMSS")]=0; + %append_output(std::string(tmp$argnum)); +} + +// include the filtered header +#define _FTPLIB_NO_COMPAT +#define GLOBALREF + +%include "ftplib_filtered.h" + +// ********************************************************************** +// ftp object + +%inline { + class ftp { + std::string read_entire(const char* path,int type,int mode) { + netbuf *read_obj; + if (!FtpAccess(path,type,mode,obj,&read_obj)) { + error("failed to open %s for reading",path); + return std::string(); + } + std::string ret; + char buf[4096]; + for (;;) { + int rdlen=FtpRead(buf,sizeof(buf),read_obj); + if (rdlen<=0) + break; + ret.insert(ret.end(),buf,buf+rdlen); + } + if (!FtpClose(read_obj)) + error("failed to close %s",path); + return ret; + } + Cell read_dir(const char* path,int type) { + std::string s=read_entire(path,type,FTPLIB_ASCII); + std::stringstream sin(s); + std::vector<std::string> tmp; + std::string line; + while (getline(sin,line)) + tmp.push_back(line); + Cell c(1,tmp.size()); + for (int j=0;j<tmp.size();++j) + c(j)=tmp[j]; + return c; + } + + public: + netbuf *obj; + std::string host; + std::string user; + char mode; + +#define check_connected(ret) \ + if (!obj) { \ + error("not connected"); \ + return ret; \ + } + + ftp(const char* _host,const char* _user="anonymous",const char* pass="") + : obj(0),host(_host),user(_user),mode(FTPLIB_ASCII) { + FtpInit(); + if (!FtpConnect(host.c_str(),&obj)) + error("connection to %s failed",host.c_str()); + else if (!FtpLogin(user.c_str(),pass,obj)) + error("login to %s failed",host.c_str()); + } + + ~ftp() { + close(); + } + + void close() { + if (obj) + FtpQuit(obj); + obj=0; + } + + int cd(const char* path) { + check_connected(0); + if (!strcmp(path,"..")) + return FtpCDUp(obj); + return FtpChdir(path,obj); + } + + std::string pwd() { + check_connected(0); + char buf[512]={0}; + FtpPwd(&buf[0],sizeof(buf),obj); + return buf; + } + + Cell ls(const char* path=".") { + return nlst(path); + } + + Cell nlst(const char* path=".") { + check_connected(Cell()); + return read_dir(path,FTPLIB_DIR); + } + + Cell dir(const char* path=".") { + check_connected(Cell()); + return read_dir(path,FTPLIB_DIR_VERBOSE); + } + + int rmdir(const char* path) { + check_connected(0); + return FtpRmdir(path,obj); + } + + int mkdir(const char* path) { + check_connected(0); + return FtpMkdir(path,obj); + } + + int get(const char* output,const char* path) { + check_connected(0); + return FtpGet(output,path,mode,obj); + } + + int put(const char* input,const char* path) { + check_connected(0); + return FtpPut(input,path,mode,obj); + } + + int rename(const char* src,const char* dst) { + check_connected(0); + return FtpRename(src,dst,obj); + } + + int remove(const char* fn) { + check_connected(0); + return FtpDelete(fn,obj); + } + + void mget(const char* fn) { + if (!get(fn,fn)) + error("ftp mget failed"); + } + + void mget(const octave_value_list& varargs,...) { + for (int j=0;j<varargs.length();++j) + if (!varargs(j).is_string()) { + error("filenames and target must be strings"); + return; + } + + std::string target=varargs(varargs.length()-1).string_value(); + if (target.size()&&target.end()[-1]=='/') + target.erase(target.end()-1); + + for (int j=0;j<varargs.length()-1;++j) { + std::string src=varargs(j).string_value(); + std::string dst=target + "/" + varargs(j).string_value(); + if (!get(src.c_str(),dst.c_str())) { + error("ftp get of %s into %s failed",src.c_str(),dst.c_str()); + return; + } + } + } + + void mput(const char* fn) { + if (!put(fn,fn)) + error("ftp mput failed"); + } + + std::string __str() { + check_connected(0); + std::stringstream sout; + sout<<"FTP Object"<<std::endl; + sout<<" host: "<<host<<std::endl; + sout<<" user: "<<user<<std::endl; + sout<<" dir: "<<pwd()<<std::endl; + sout<<" mode: "<<(mode==FTPLIB_BINARY?"binary":"ascii")<<std::endl; + return sout.str(); + } + }; + + // ********************************************************************** + // MATLAB compatiable interface + + void ascii(ftp* f) { + f->mode=FTPLIB_ASCII; + } + + void binary(ftp* f) { + f->mode=FTPLIB_BINARY; + } + + void mget(ftp* f,const char* fn) { + f->mget(fn); + } + + void mget(ftp *f,const octave_value_list& varargs,...) { + f->mget(varargs); + } + + void mput(ftp* f,const char* fn) { + f->mput(fn); + } + +} Added: trunk/octave-forge/main/ftp/src/ftplib_filtered.h =================================================================== --- trunk/octave-forge/main/ftp/src/ftplib_filtered.h (rev 0) +++ trunk/octave-forge/main/ftp/src/ftplib_filtered.h 2008-03-24 21:04:20 UTC (rev 4800) @@ -0,0 +1,125 @@ +/***************************************************************************/ +/* */ +/* ftplib.h - header file for callable ftp access routines */ +/* Copyright (C) 1996, 1997 Thomas Pfau, pf...@cn... */ +/* 73 Catherine Street, South Bound Brook, NJ, 08880 */ +/* */ +/* This library is free software; you can redistribute it and/or */ +/* modify it under the terms of the GNU Library General Public */ +/* License as published by the Free Software Foundation; either */ +/* version 2 of the License, or (at your option) any later version. */ +/* */ +/* 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 */ +/* Library General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU Library General Public */ +/* License along with this progam; if not, write to the */ +/* Free Software Foundation, Inc., 59 Temple Place - Suite 330, */ +/* Boston, MA 02111-1307, USA. */ +/* */ +/***************************************************************************/ + +#if !defined(__FTPLIB_H) +#define __FTPLIB_H + +#if defined(__unix__) || defined(VMS) +#define GLOBALDEF +#define GLOBALREF extern +#elif defined(_WIN32) +#if defined BUILDING_LIBRARY +#define GLOBALDEF __declspec(dllexport) +#define GLOBALREF __declspec(dllexport) +#else +#define GLOBALREF __declspec(dllimport) +#endif +#endif + +/* FtpAccess() type codes */ +#define FTPLIB_DIR 1 +#define FTPLIB_DIR_VERBOSE 2 +#define FTPLIB_FILE_READ 3 +#define FTPLIB_FILE_WRITE 4 + +/* FtpAccess() mode codes */ +#define FTPLIB_ASCII 'A' +#define FTPLIB_IMAGE 'I' +#define FTPLIB_TEXT FTPLIB_ASCII +#define FTPLIB_BINARY FTPLIB_IMAGE + +/* connection modes */ +#define FTPLIB_PASSIVE 1 +#define FTPLIB_PORT 2 + +/* connection option names */ +#define FTPLIB_CONNMODE 1 +#define FTPLIB_CALLBACK 2 +#define FTPLIB_IDLETIME 3 +#define FTPLIB_CALLBACKARG 4 +#define FTPLIB_CALLBACKBYTES 5 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct NetBuf netbuf; +typedef int (*FtpCallback)(netbuf *nControl, int xfered, void *arg); + +/* v1 compatibility stuff */ +#if !defined(_FTPLIB_NO_COMPAT) +netbuf *DefaultNetbuf; + +#define ftplib_lastresp FtpLastResponse(DefaultNetbuf) +#define ftpInit FtpInit +#define ftpOpen(x) FtpConnect(x, &DefaultNetbuf) +#define ftpLogin(x,y) FtpLogin(x, y, DefaultNetbuf) +#define ftpSite(x) FtpSite(x, DefaultNetbuf) +#define ftpMkdir(x) FtpMkdir(x, DefaultNetbuf) +#define ftpChdir(x) FtpChdir(x, DefaultNetbuf) +#define ftpRmdir(x) FtpRmdir(x, DefaultNetbuf) +#define ftpNlst(x, y) FtpNlst(x, y, DefaultNetbuf) +#define ftpDir(x, y) FtpDir(x, y, DefaultNetbuf) +#define ftpGet(x, y, z) FtpGet(x, y, z, DefaultNetbuf) +#define ftpPut(x, y, z) FtpPut(x, y, z, DefaultNetbuf) +#define ftpRename(x, y) FtpRename(x, y, DefaultNetbuf) +#define ftpDelete(x) FtpDelete(x, DefaultNetbuf) +#define ftpQuit() FtpQuit(DefaultNetbuf) +#endif /* (_FTPLIB_NO_COMPAT) */ +/* end v1 compatibility stuff */ + +GLOBALREF int ftplib_debug; +GLOBALREF void FtpInit(void); +GLOBALREF char *FtpLastResponse(netbuf *nControl); +GLOBALREF int FtpConnect(const char *host, netbuf **nControl); +GLOBALREF int FtpOptions(int opt, long val, netbuf *nControl); +GLOBALREF int FtpLogin(const char *user, const char *pass, netbuf *nControl); +GLOBALREF int FtpAccess(const char *path, int typ, int mode, netbuf *nControl, + netbuf **nData); +GLOBALREF int FtpRead(void *buf, int max, netbuf *nData); +GLOBALREF int FtpWrite(void *buf, int len, netbuf *nData); +GLOBALREF int FtpClose(netbuf *nData); +GLOBALREF int FtpSite(const char *cmd, netbuf *nControl); +GLOBALREF int FtpSysType(char *buf, int max, netbuf *nControl); +GLOBALREF int FtpMkdir(const char *path, netbuf *nControl); +GLOBALREF int FtpChdir(const char *path, netbuf *nControl); +GLOBALREF int FtpCDUp(netbuf *nControl); +GLOBALREF int FtpRmdir(const char *path, netbuf *nControl); +GLOBALREF int FtpPwd(char *path, int max, netbuf *nControl); +GLOBALREF int FtpNlst(const char *output, const char *path, netbuf *nControl); +GLOBALREF int FtpDir(const char *output, const char *path, netbuf *nControl); +GLOBALREF int FtpSize(const char *path, int *size, char mode, netbuf *nControl); +GLOBALREF int FtpModDate(const char *path, char *dt, int max, netbuf *nControl); +GLOBALREF int FtpGet(const char *output, const char *path, char mode, + netbuf *nControl); +GLOBALREF int FtpPut(const char *input, const char *path, char mode, + netbuf *nControl); +GLOBALREF int FtpRename(const char *src, const char *dst, netbuf *nControl); +GLOBALREF int FtpDelete(const char *fnm, netbuf *nControl); +GLOBALREF void FtpQuit(netbuf *nControl); + +#ifdef __cplusplus +}; +#endif + +#endif /* __FTPLIB_H */ Added: trunk/octave-forge/main/ftp/src/tests/basic.m =================================================================== --- trunk/octave-forge/main/ftp/src/tests/basic.m (rev 0) +++ trunk/octave-forge/main/ftp/src/tests/basic.m 2008-03-24 21:04:20 UTC (rev 4800) @@ -0,0 +1,23 @@ +ftpobj + +f=ftp("ftp.gnu.org") + +f.dir() +f.ls() +f.cd("gnu") +f.ls() + + +f.cd("gcc/gcc-4.0.4") + +mget(f,"gcc-objc-4.0.4.tar.bz2","gcc-g++-4.0.4.tar.gz.sig",".") + +assert(stat("gcc-objc-4.0.4.tar.bz2").size==242757); +assert(stat("gcc-g++-4.0.4.tar.gz.sig").size==65); + +unlink("gcc-objc-4.0.4.tar.bz2"); +unlink("gcc-g++-4.0.4.tar.gz.sig"); + + + + Added: trunk/octave-forge/main/ftp/src/tests/empty.m =================================================================== --- trunk/octave-forge/main/ftp/src/tests/empty.m (rev 0) +++ trunk/octave-forge/main/ftp/src/tests/empty.m 2008-03-24 21:04:20 UTC (rev 4800) @@ -0,0 +1 @@ +ftpobj Added: trunk/octave-forge/main/ftp/src/tests/twice.m =================================================================== --- trunk/octave-forge/main/ftp/src/tests/twice.m (rev 0) +++ trunk/octave-forge/main/ftp/src/tests/twice.m 2008-03-24 21:04:20 UTC (rev 4800) @@ -0,0 +1,7 @@ +ftpobj + +a=ftp("ftp.gnu.org"); +b=ftp("ftp.gnu.org"); + +a.ls() +b.ls() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ws...@us...> - 2008-03-26 03:19:08
|
Revision: 4805 http://octave.svn.sourceforge.net/octave/?rev=4805&view=rev Author: wsloand Date: 2008-03-25 20:19:12 -0700 (Tue, 25 Mar 2008) Log Message: ----------- Missing functions: find functions missing from Octave Modified Paths: -------------- trunk/octave-forge/main/financial/DESCRIPTION Added Paths: ----------- trunk/octave-forge/main/missing-functions/ trunk/octave-forge/main/missing-functions/COPYING trunk/octave-forge/main/missing-functions/DESCRIPTION trunk/octave-forge/main/missing-functions/inst/ trunk/octave-forge/main/missing-functions/inst/__functionstatus__.m trunk/octave-forge/main/missing-functions/inst/__matlabfunctionlist__.m trunk/octave-forge/main/missing-functions/inst/__missingmatlab2txt__.m trunk/octave-forge/main/missing-functions/inst/missingfunctionstatus.m trunk/octave-forge/main/missing-functions/inst/missingmatlabfunctions.m trunk/octave-forge/main/missing-functions/missingmatlab.css Modified: trunk/octave-forge/main/financial/DESCRIPTION =================================================================== --- trunk/octave-forge/main/financial/DESCRIPTION 2008-03-25 21:24:40 UTC (rev 4804) +++ trunk/octave-forge/main/financial/DESCRIPTION 2008-03-26 03:19:12 UTC (rev 4805) @@ -1,12 +1,12 @@ Name: financial -Version: 0.1.0 +Version: 0.2.0 Date: 2007-02-02 Author: Bill Denney <bi...@de...> Maintainer: Bill Denney <bi...@de...> Title: Financial Description: Financial manipulation and plotting functions Categories: Financial -Depends: octave (>= 3.0.0) +Depends: octave (>= 3.0.0), time (>= 1.0.5) Autoload: yes License: GPL version 2 or later Url: http://octave.sf.net Added: trunk/octave-forge/main/missing-functions/COPYING =================================================================== --- trunk/octave-forge/main/missing-functions/COPYING (rev 0) +++ trunk/octave-forge/main/missing-functions/COPYING 2008-03-26 03:19:12 UTC (rev 4805) @@ -0,0 +1 @@ +This program is donated to the public domain Added: trunk/octave-forge/main/missing-functions/DESCRIPTION =================================================================== --- trunk/octave-forge/main/missing-functions/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/missing-functions/DESCRIPTION 2008-03-26 03:19:12 UTC (rev 4805) @@ -0,0 +1,12 @@ +Name: missing-functions +Version: 1.0.0 +Date: 2008-03-24 +Author: Bill Denney <bi...@de...> +Maintainer: Bill Denney <bi...@de...> +Title: Missing Functions +Description: Find functions that are in Matlab but not in Octave. +Categories: Missing +Depends: octave (>= 3.0.0) +Autoload: yes +License: GPL version 2 or later +Url: http://octave.sf.net Added: trunk/octave-forge/main/missing-functions/inst/__functionstatus__.m =================================================================== --- trunk/octave-forge/main/missing-functions/inst/__functionstatus__.m (rev 0) +++ trunk/octave-forge/main/missing-functions/inst/__functionstatus__.m 2008-03-26 03:19:12 UTC (rev 4805) @@ -0,0 +1,45 @@ +## Copyright (C) 2008 Bill Denney +## +## This software 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 3 of the License, or (at +## your option) any later version. +## +## This software 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 software; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{status} =} __functionstatus__ (@var{funname}) +## Return if a function is present in octave: -1 = not checked, 0 = +## missing, 1 = present +## @end deftypefn + +function status = __functionstatus__ (funname) + + if ischar (funname) + funname = {funname}; + elseif ~ iscellstr (funname) + print_usage (); + endif + + status = zeros (size (funname)); + for i = 1:numel (funname) + if any (! (isalpha (funname{i}) | isdigit (funname{i}))) + ## not checked + status(i) = -1; + elseif iskeyword (funname{i}) || which (funname{i}) + ## present + status(i) = 1; + else + ## missing + status(i) = 0; + endif + endfor + +endfunction Added: trunk/octave-forge/main/missing-functions/inst/__matlabfunctionlist__.m =================================================================== --- trunk/octave-forge/main/missing-functions/inst/__matlabfunctionlist__.m (rev 0) +++ trunk/octave-forge/main/missing-functions/inst/__matlabfunctionlist__.m 2008-03-26 03:19:12 UTC (rev 4805) @@ -0,0 +1,92 @@ +## Copyright (C) 2008 Bill Denney +## +## This software 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 3 of the License, or (at +## your option) any later version. +## +## This software 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 software; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {[@var{funlist}, @var{funloc}, @var{catlist}, @var{catloc}, @var{catlvl}] =} __matlabfunctionlist__ (@var{url}) +## Return a list of matlab functions, @var{funlist}, from the @var{url}. +## It will also return the list of locations of the functions within the +## file, the categories in the url (@var{catlist}), the location of the +## categories within the url (@var{catloc}), and the level of the +## categories (@var{catlvl}, 2 = h2, 3 = h3, ...). Note, the locations +## may not be sorted or unique. +## @end deftypefn + +function [funlist, funloc, catlist, catloc, catlvl] = __matlabfunctionlist__ (url = "http://www.mathworks.com/access/helpdesk/help/techdoc/ref/f16-6011.html") + + [raw, success, message] = urlread(url); + if (! success) + warning ("__matlabfunctionlist__:url", + "__matlabfunctionlist__: Could not read\n%s\n%s", url, message); + funlist = {}; + funloc = []; + catlist = {}; + catloc = []; + catlvl = []; + return + endif + ## Building up a really rough single-purpose XML parser + + ## Tags + tagopen = find (raw == "<"); + tagclose = find (raw == ">"); + ## categories + h2loc = findstr (raw, "<h2"); + ## sub-categories + h3loc = findstr (raw, "<h3"); + ## sub-sub categories (optional) + h4loc = findstr (raw, "<h4"); + + ## Find the names of each section + h2name = getname (raw, h2loc, tagopen, tagclose); + h3name = getname (raw, h3loc, tagopen, tagclose); + h4name = getname (raw, h4loc, tagopen, tagclose); + + catlist = [h2name(:);h3name(:);h4name(:)]; + catloc = [h2loc(:);h3loc(:);h4loc(:)]; + catlvl = [2*ones(numel(h2name),1); + 3*ones(numel(h3name),1); + 4*ones(numel(h4name),1)]; + + tmpfunloc = findstr (raw, "<tr valign=\"top\"><td width=\"150\"><a"); + ## this is not quite right, but it is the minimum size required. + funlist = cell (numel (tmpfunloc), 1); + funloc = zeros (numel (tmpfunloc), 1); + idx = 0; + for i = 1:numel (tmpfunloc) + tmpfunname = raw(tagclose(find (tagclose > tmpfunloc(i), 3)(3))+1: + tagopen(find (tagopen > tmpfunloc(i), 3)(3))-1); + ## convert all whitespace to actual spaces + tmpfunname(isspace (tmpfunname)) = " "; + if (numel (tmpfunname) > 2) + tmpfunname = split (tmpfunname, ", "); + endif + for j = 1:rows (tmpfunname) + idx++; + funlist{idx} = strtrim (tmpfunname(j,:)); + funloc(idx) = tmpfunloc(i); + endfor + endfor + +endfunction + +function name = getname (raw, loc, tagopen, tagclose) + + name = cell (size (loc)); + for i = 1:numel (loc) + name{i} = raw(tagclose(find (tagclose > loc(i), 1))+1:tagopen(find (tagopen > loc(i), 1))-1); + endfor + +endfunction Added: trunk/octave-forge/main/missing-functions/inst/__missingmatlab2txt__.m =================================================================== --- trunk/octave-forge/main/missing-functions/inst/__missingmatlab2txt__.m (rev 0) +++ trunk/octave-forge/main/missing-functions/inst/__missingmatlab2txt__.m 2008-03-26 03:19:12 UTC (rev 4805) @@ -0,0 +1,96 @@ +## Copyright (C) 2008 Bill Denney +## +## This software 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 3 of the License, or (at +## your option) any later version. +## +## This software 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 software; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} __missingmatlab2txt__ (@var{funlist}, @var{funloc}, @var{funstat}, @var{catlist}, @var{catloc}, @var{catlvl}, @var{outformat}) +## Convert the function and category information into text. The +## @var{outformat} can be one of "wiki" or "html". +## @end deftypefn + +function output = __missingmatlab2txt__ (funlist, funloc, funstat, catlist, catloc, catlvl, outformat = "wiki") + + ## this will be to keep track of what we are currently looking at, + ## functions will be considered at category level 99. + funlvl = 99; + statstr = {"Not Checked" "Missing" "Present"}; + + allloc = [catloc(:);funloc(:)]; + [alloc, sidx] = sort (allloc); + allname = [catlist(:);funlist(:)](sidx); + allstat = [zeros(numel(catlist), 1);funstat(:)](sidx); + alllvl = [catlvl(:);funlvl*ones(numel(funlist), 1)](sidx); + + switch lower (outformat) + case "wiki" + output = __towiki__ (alllvl, allname, allstat, funlvl, statstr); + case "html" + output = __tohtml__ (alllvl, allname, allstat, funlvl, statstr); + otherwise + error ("missingmatlab2txt: invalid outformat (%s)", outformat); + endswitch + +endfunction + +function output = __towiki__ (alllvl, allname, allstat, funlvl, statstr) + + output = cell (size (allname)); + for i = 1:numel (alllvl) + if (alllvl(i) == funlvl) + output{i} = sprintf ("||%s||%s||\n", allname{i}, statstr{allstat(i)+2}); + else + hstring = char ("="*ones (1, alllvl(i))); + output{i} = sprintf ("\n%s%s%s\n", hstring, allname{i}, hstring) + endif + endfor + +endfunction + +function output = __tohtml__ (alllvl, allname, allstat, funlvl, statstr) + + output = cell (size (allname)); + + lastwasfun = false (); + idx = 1; + output{idx} = "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>Matlab Functions Missing from Octave</title><link rel=\"stylesheet\" type=\"text/css\" href=\"missingmatlab.css\"/></head><body>\n"; + + for i = 1:numel (alllvl) + if (alllvl(i) == funlvl) + if (! lastwasfun) + output{++idx} = "<table>\n"; + endif + + thisclass = statstr{allstat(i)+2}; + thisclass(isspace (thisclass)) = []; + output{++idx} = sprintf ("<tr class=\"%s\"><td class=\"funname\">%s</td><td class=\"funstatus\">%s</td></tr>\n", + thisclass, allname{i}, statstr{allstat(i)+2}); + lastwasfun = true (); + else + if lastwasfun + output{++idx} = "</table>\n"; + endif + hstring = sprintf ("h%d", alllvl(i)); + output{++idx} = sprintf ("\n<%s>%s</%s>\n", hstring, allname{i}, hstring); + lastwasfun = false (); + endif + endfor + + if lastwasfun + output{++idx} = "</table>\n"; + endif + output{++idx} = "</body></html>"; + +endfunction + Added: trunk/octave-forge/main/missing-functions/inst/missingfunctionstatus.m =================================================================== --- trunk/octave-forge/main/missing-functions/inst/missingfunctionstatus.m (rev 0) +++ trunk/octave-forge/main/missing-functions/inst/missingfunctionstatus.m 2008-03-26 03:19:12 UTC (rev 4805) @@ -0,0 +1,88 @@ +## Copyright (C) 2008 Bill Denney +## +## This software 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 3 of the License, or (at +## your option) any later version. +## +## This software 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 software; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} missingfunctionstatus (@var{outdir}) +## Write out all the current Matlab functions and toolboxes to +## @var{outdir} in html format. +## @seealso{missingmatlabfunctions} +## @end deftypefn + +function missingfunctionstatus (outdir = ".") + + urlbase = "http://www.mathworks.com/access/helpdesk/help/"; + + toolboxes = {"Matlab" "techdoc/ref/f16-6011.html"; + "Aerospace" "toolbox/aerotbx/ug/bqj21qj.html"; + "Bioinformatics" "toolbox/bioinfo/ref/a1052308804.html"; + "Communications" "toolbox/comm/ug/a1037894415.html"; + "Control System" "toolbox/control/ref/f2-1014412.html"; + "Curve Fitting" "toolbox/curvefit/f2-17602.html"; + "Data Acquisition" "toolbox/daq/f14-17602.html"; + "Database" "toolbox/database/ug/f4-6010.html"; + "Datafeed" "toolbox/datafeed/bp_usto-1.html"; + "Filter Design" "toolbox/filterdesign/ref/f11-35125.html"; + "Financial" "toolbox/finance/f6-213137.html"; + "Financial Derivatives" "toolbox/finderiv/f0-23501.html"; + "Fixed-Income" "toolbox/finfixed/f5-6010.html"; + "Fixed-Point" "toolbox/fixedpoint/ref/f20333.html"; + "Fuzzy Logic" "toolbox/fuzzy/fp4856.html"; + "GARCH" "toolbox/garch/f9-21078.html"; + "Genetic Algorithm and Direct Search" "toolbox/gads/bqe0w5v.html"; + "Image Acquisition" "toolbox/imaq/f14-17602.html"; + "Image Processing" "toolbox/images/f3-23960.html"; + "Instrument Control" "toolbox/instrument/f9-42439.html"; + "Mapping" "toolbox/map/f3-12193.html"; + "Mapping (Projections)" "toolbox/map/f4-4154.html"; + "Model Predictive Control" "toolbox/mpc/chmpcrefintro.html"; + "Neural Network" "toolbox/nnet/function.html"; + "OPC" "toolbox/opc/ug/f7-6010.html"; + "Optimization" "toolbox/optim/ug/bqnk0r0.html"; + "Partial Differential Equation" "toolbox/pde/ug/f7498.html"; + "RF" "toolbox/rf/bq33b0t.html"; + "Robust Control" "toolbox/robust/refintro.html"; + "Signal Processing" "toolbox/signal/f9-131178c.html"; + "Spline" "toolbox/splines/refer1_html.html"; + "Spreadsheet Link EX" "toolbox/exlink/f4-6010.html"; + "Statistics" "toolbox/stats/bq_w_hm.html"; + "Symbolic Math" "toolbox/symbolic/f3-157665.html"; + "System Identification" "toolbox/ident/ref/f3-8911.html"; + "Virtual Reality" "toolbox/vr/f0-6010.html"; + "Wavelet" "toolbox/wavelet/ref_open.html"}; + + filenames = cell (rows (toolboxes), 1); + for i = 1:rows (toolboxes) + basename = toolboxes{i,1}; + basename(isspace (basename)) = "_"; + filenames{i} = [basename ".html"]; + missingmatlabfunctions (fullfile (outdir, filenames{i}), "", + [urlbase toolboxes{i,2}]) + endfor + + ## make the index page + [fid msg] = fopen (fullfile (outdir, "index.html"), "wt"); + if (fid < 0) + error ("missingfunctionstatus: could not open index.html, %s", msg) + endif + fprintf (fid, "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>Matlab Functions Missing from Octave</title><link rel=\"stylesheet\" type=\"text/css\" href=\"missingmatlab.css\"/></head><body>\n"); + for i = 1:rows (toolboxes) + fprintf (fid, "<a href=\"%s\">%s</a><br/>", + filenames{i}, toolboxes{i,1}); + endfor + fprintf (fid, "</body></html>") + fclose (fid); + +endfunction Added: trunk/octave-forge/main/missing-functions/inst/missingmatlabfunctions.m =================================================================== --- trunk/octave-forge/main/missing-functions/inst/missingmatlabfunctions.m (rev 0) +++ trunk/octave-forge/main/missing-functions/inst/missingmatlabfunctions.m 2008-03-26 03:19:12 UTC (rev 4805) @@ -0,0 +1,57 @@ +## Copyright (C) 2008 Bill Denney +## +## This software 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 3 of the License, or (at +## your option) any later version. +## +## This software 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 software; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} matlabfunctionlist (@var{outfile}, @var{outformat}, @var{url}) +## Show or write to @var{outfile} the missing Matlab functions listed at +## the category index @var{url}. @var{outformat} is the output format +## to show or write and it may be one of "wiki" (default) or "html". +## @seealso{missingfunctionstatus} +## @end deftypefn + +function missingmatlabfunctions (outfile = "", outformat = "", url = "http://www.mathworks.com/access/helpdesk/help/techdoc/ref/f16-6011.html") + + [funlist, funloc, catlist, catloc, catlvl] = __matlabfunctionlist__ (url); + funstat = __functionstatus__ (funlist); + + ## guess the output format defaulting to wiki. + if isempty (outformat) + if isempty (outfile) + outformat = "wiki"; + else + [dirname, filename, ext] = fileparts (outfile); + if (! isempty (findstr (ext, "htm"))) + outformat = "html"; + else + outformat = "wiki"; + endif + endif + endif + + output = __missingmatlab2txt__ (funlist, funloc, funstat, + catlist, catloc, catlvl, outformat); + if isempty (outfile) + printf ("%s", output{:}); + else + [fid msg] = fopen (outfile, "wt"); + if (fid < 0) + error ("missingmatlabfunctions: error opening %s, %s", outfile, msg); + endif + fprintf (fid, "%s", output{:}); + fclose (fid); + endif + +endfunction Added: trunk/octave-forge/main/missing-functions/missingmatlab.css =================================================================== --- trunk/octave-forge/main/missing-functions/missingmatlab.css (rev 0) +++ trunk/octave-forge/main/missing-functions/missingmatlab.css 2008-03-26 03:19:12 UTC (rev 4805) @@ -0,0 +1,12 @@ +.Present { + display: none; +} + +.NotChecked { + background-color: yellow; +} + +.Missing { + background-color: red; + text-color: white; +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2008-03-27 15:45:21
|
Revision: 4820 http://octave.svn.sourceforge.net/octave/?rev=4820&view=rev Author: adb014 Date: 2008-03-27 08:45:25 -0700 (Thu, 27 Mar 2008) Log Message: ----------- more build simplications Modified Paths: -------------- trunk/octave-forge/main/comm/src/Makeconf.in trunk/octave-forge/main/comm/src/Makefile trunk/octave-forge/main/comm/src/autogen.sh trunk/octave-forge/main/comm/src/configure.base trunk/octave-forge/main/fixed/src/Makeconf.in Modified: trunk/octave-forge/main/comm/src/Makeconf.in =================================================================== --- trunk/octave-forge/main/comm/src/Makeconf.in 2008-03-27 15:24:57 UTC (rev 4819) +++ trunk/octave-forge/main/comm/src/Makeconf.in 2008-03-27 15:45:25 UTC (rev 4820) @@ -5,59 +5,14 @@ ## Makeconf. OCTAVE_FORGE = 1 - SHELL = @SHELL@ - canonical_host_type = @canonical_host_type@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ -bindir = @bindir@ -mandir = @mandir@ -libdir = @libdir@ -datadir = @datadir@ -infodir = @infodir@ -includedir = @includedir@ -datarootdir = @datarootdir@ -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALLOCT=octinst.sh - DESTDIR = - -RANLIB = @RANLIB@ -STRIP = @STRIP@ -AWK = @AWK@ - -# Most octave programs will be compiled with $(MKOCTFILE). Those which -# cannot use mkoctfile directly can request the flags that mkoctfile -# would use as follows: -# FLAG = $(shell $(MKOCTFILE) -p FLAG) -# The following flags are for compiling programs that are independent -# of Octave. How confusing. -CC = @CC@ -CFLAGS = @CFLAGS@ -CPPFLAGS = @CPPFLAGS@ -CPICFLAG = @CPICFLAG@ -CXX = @CXX@ -CXXFLAGS = @CXXFLAGS@ -CXXPICFLAG = @CXXPICFLAG@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -FPICFLAG = @FPICFLAG@ - OCTAVE = @OCTAVE@ OCTAVE_VERSION = @OCTAVE_VERSION@ MKOCTFILE = @MKOCTFILE@ -DHAVE_OCTAVE_$(ver) -v -SHLEXT = @SHLEXT@ ver = @ver@ -MPATH = @mpath@ -OPATH = @opath@ -XPATH = @xpath@ -ALTMPATH = @altmpath@ -ALTOPATH = @altopath@ %.o: %.c ; $(MKOCTFILE) -c $< %.o: %.f ; $(MKOCTFILE) -c $< Modified: trunk/octave-forge/main/comm/src/Makefile =================================================================== --- trunk/octave-forge/main/comm/src/Makefile 2008-03-27 15:24:57 UTC (rev 4819) +++ trunk/octave-forge/main/comm/src/Makefile 2008-03-27 15:45:25 UTC (rev 4820) @@ -62,7 +62,7 @@ realclean: @echo "Cleaning..."; \ - $(RM) -f $(DELETES) + $(RM) -f $(DELETES) Makeconf config.log config.status dist: Modified: trunk/octave-forge/main/comm/src/autogen.sh =================================================================== --- trunk/octave-forge/main/comm/src/autogen.sh 2008-03-27 15:24:57 UTC (rev 4819) +++ trunk/octave-forge/main/comm/src/autogen.sh 2008-03-27 15:45:25 UTC (rev 4820) @@ -9,12 +9,8 @@ dnl XXX FIXME XXX chmod is not in autoconf's list of portable functions echo " " - echo " \"\\\$prefix\" is \$prefix" - echo " \"\\\$exec_prefix\" is \$exec_prefix" - AC_MSG_RESULT([\$STATUS_MSG - -find . -name NOINSTALL -print # shows which toolboxes won't be installed -]) + AC_MSG_RESULT([\$STATUS_MSG]) + echo " " EOF autoconf configure.in > configure.tmp Modified: trunk/octave-forge/main/comm/src/configure.base =================================================================== --- trunk/octave-forge/main/comm/src/configure.base 2008-03-27 15:24:57 UTC (rev 4819) +++ trunk/octave-forge/main/comm/src/configure.base 2008-03-27 15:45:25 UTC (rev 4820) @@ -7,228 +7,9 @@ AC_INIT(configure.base) -PACKAGE=octave-forge -MAJOR_VERSION=0 -MINOR_VERSION=1 -PATCH_LEVEL=0 - -dnl Kill caching --- this ought to be the default -define([AC_CACHE_LOAD], )dnl -define([AC_CACHE_SAVE], )dnl - -dnl uncomment to put support files in another directory -dnl AC_CONFIG_AUX_DIR(admin) - -VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL -AC_SUBST(PACKAGE) -AC_SUBST(VERSION) - -dnl need to find admin files, so keep track of the top dir. -TOPDIR=`pwd` -AC_SUBST(TOPDIR) - -dnl if mkoctfile doesn't work, then we need the following: -dnl AC_PROG_CXX -dnl AC_PROG_F77 - -dnl Need C compiler regardless so define it in a way that -dnl makes autoconf happy and we can override whatever we -dnl need with mkoctfile -p. -dnl XXX FIXME XXX should use mkoctfile to get CC and CFLAGS -AC_PROG_CC - -dnl XXX FIXME XXX need tests for -p -c -s in mkoctfile. - -dnl ******************************************************************* -dnl Sort out mkoctfile version number and install paths - -dnl XXX FIXME XXX latest octave has octave-config so we don't -dnl need to discover things here. Doesn't have --exe-site-dir -dnl but defines --oct-site-dir and --m-site-dir - -dnl Check for mkoctfile AC_CHECK_PROG(MKOCTFILE,mkoctfile,mkoctfile) test -z "$MKOCTFILE" && AC_MSG_WARN([no mkoctfile found on path]) -AC_SUBST(ver) -AC_SUBST(subver) -AC_SUBST(mpath) -AC_SUBST(opath) -AC_SUBST(xpath) -AC_SUBST(altpath) -AC_SUBST(altmpath) -AC_SUBST(altopath) - -AC_ARG_WITH(path, - [ --with-path install path prefix], - [ path=$withval ]) -AC_ARG_WITH(mpath, - [ --with-mpath override path for m-files], - [mpath=$withval]) -AC_ARG_WITH(opath, - [ --with-opath override path for oct-files], - [opath=$withval]) -AC_ARG_WITH(xpath, - [ --with-xpath override path for executables], - [xpath=$withval]) -AC_ARG_WITH(altpath, - [ --with-altpath alternative functions install path prefix], - [ altpath=$withval ]) -AC_ARG_WITH(altmpath, - [ --with-altmpath override path for alternative m-files], - [altmpath=$withval]) -AC_ARG_WITH(altopath, - [ --with-altopath override path for alternative oct-files], - [altopath=$withval]) - -if test -n "$path" ; then - test -z "$mpath" && mpath=$path - test -z "$opath" && opath=$path/oct - test -z "$xpath" && xpath=$path/bin - test -z "$altpath" && altpath=$path-alternatives -fi - -if test -n "$altpath" ; then - test -z "$altmpath" && altmpath=$altpath - test -z "$altopath" && altopath=$altpath/oct -fi - -dnl Don't query if path/ver are given in the configure environment -#if test -z "$mpath" || test -z "$opath" || test -z "$xpath" || test -z "$altmpath" || test -z "$altopath" || test -z "$ver" ; then -if test -z "$mpath" || test -z "$opath" || test -z "$xpath" || test -z "$ver" ; then - dnl Construct program to get mkoctfile version and local install paths - cat > conftest.cc <<EOF -#include <octave/config.h> -#include <octave/version.h> -#include <octave/defaults.h> - -#define INFOV "\nINFOV=" OCTAVE_VERSION "\n" - -#define INFOH "\nINFOH=" OCTAVE_CANONICAL_HOST_TYPE "\n" - -#ifdef OCTAVE_LOCALVERFCNFILEDIR -# define INFOM "\nINFOM=" OCTAVE_LOCALVERFCNFILEDIR "\n" -#else -# define INFOM "\nINFOM=" OCTAVE_LOCALFCNFILEPATH "\n" -#endif - -#ifdef OCTAVE_LOCALVEROCTFILEDIR -# define INFOO "\nINFOO=" OCTAVE_LOCALVEROCTFILEDIR "\n" -#else -# define INFOO "\nINFOO=" OCTAVE_LOCALOCTFILEPATH "\n" -#endif - -#ifdef OCTAVE_LOCALVERARCHLIBDIR -# define INFOX "\nINFOX=" OCTAVE_LOCALVERARCHLIBDIR "\n" -#else -# define INFOX "\nINFOX=" OCTAVE_LOCALARCHLIBDIR "\n" -#endif - -const char *infom = INFOM; -const char *infoo = INFOO; -const char *infox = INFOX; -const char *infoh = INFOH; -const char *infov = INFOV; -EOF - - dnl Compile program perhaps with a special version of mkoctfile - $MKOCTFILE conftest.cc || AC_MSG_ERROR(Could not run $MKOCTFILE) - - dnl Strip the config info from the compiled file - eval `strings conftest.o | grep "^INFO.=" | sed -e "s,//.*$,,"` - rm -rf conftest* - - dnl set the appropriate variables if they are not already set - ver=`echo $INFOV | sed -e "s/\.//" -e "s/\..*$//"` - subver=`echo $INFOV | sed -e "[s/^[^.]*[.][^.]*[.]//]"` - alt_mbase=`echo $INFOM | sed -e "[s,\/[^\/]*$,,]"` - alt_obase=`echo $INFOO | sed -e "[s,/site.*$,/site,]"` - test -z "$mpath" && mpath=$INFOM/octave-forge - test -z "$opath" && opath=$INFOO/octave-forge - test -z "$xpath" && xpath=$INFOX - test -z "$altmpath" && altmpath=$alt_mbase/octave-forge-alternatives/m - test -z "$altopath" && altopath=$alt_obase/octave-forge-alternatives/oct/$INFOH -fi - -dnl ******************************************************************* - -dnl XXX FIXME XXX Should we allow the user to override these? -dnl Do we even need them? The individual makefiles can call mkoctfile -p -dnl themselves, so the only reason to keep them is for configure, and -dnl for those things which are not built using mkoctfile (e.g., aurecord) -dnl but it is not clear we should be using octave compile flags for those. - -dnl C compiler and flags -AC_MSG_RESULT([retrieving compile and link flags from $MKOCTFILE]) -CC=`$MKOCTFILE -p CC` -CFLAGS=`$MKOCTFILE -p CFLAGS` -CPPFLAGS=`$MKOCTFILE -p CPPFLAGS` -CPICFLAG=`$MKOCTFILE -p CPICFLAG` -LDFLAGS=`$MKOCTFILE -p LDFLAGS` -LIBS=`$MKOCTFILE -p LIBS` -AC_SUBST(CC) -AC_SUBST(CFLAGS) -AC_SUBST(CPPFLAGS) -AC_SUBST(CPICFLAG) - -dnl Fortran compiler and flags -F77=`$MKOCTFILE -p F77` -FFLAGS=`$MKOCTFILE -p FFLAGS` -FPICFLAG=`$MKOCTFILE -p FPICFLAG` -AC_SUBST(F77) -AC_SUBST(FFLAGS) -AC_SUBST(FPICFLAG) - -dnl C++ compiler and flags -CXX=`$MKOCTFILE -p CXX` -CXXFLAGS=`$MKOCTFILE -p CXXFLAGS` -CXXPICFLAG=`$MKOCTFILE -p CXXPICFLAG` -AC_SUBST(CXX) -AC_SUBST(CXXFLAGS) -AC_SUBST(CXXPICFLAG) - -dnl ******************************************************************* - -dnl Check for features of your version of mkoctfile. -dnl All checks should be designed so that the default -dnl action if the tests are not performed is to do whatever -dnl is appropriate for the most recent version of Octave. - -dnl Define the following macro: -dnl OF_CHECK_LIB(lib,fn,true,false,helpers) -dnl This is just like AC_CHECK_LIB, but it doesn't update LIBS -AC_DEFUN(OF_CHECK_LIB, -[save_LIBS="$LIBS" -AC_CHECK_LIB($1,$2,$3,$4,$5) -LIBS="$save_LIBS" -]) - -dnl Define the following macro: -dnl TRY_MKOCTFILE(msg,program,action_if_true,action_if_false) -dnl -AC_DEFUN(TRY_MKOCTFILE, -[AC_MSG_CHECKING($1) -cat > conftest.cc << EOF -#include <octave/config.h> -$2 -EOF -ac_try="$MKOCTFILE -c conftest.cc" -if AC_TRY_EVAL(ac_try) ; then - AC_MSG_RESULT(yes) - $3 -else - AC_MSG_RESULT(no) - $4 -fi -]) - -dnl -dnl Check if F77_FUNC works with MKOCTFILE -dnl -TRY_MKOCTFILE([for F77_FUNC], -[int F77_FUNC (hello, HELLO) (const int &n);],, -[MKOCTFILE="$MKOCTFILE -DF77_FUNC=F77_FCN"]) - dnl ********************************************************** dnl Evaluate an expression in octave @@ -237,54 +18,26 @@ dnl AC_DEFUN(OCTAVE_EVAL, [AC_MSG_CHECKING([for $1 in Octave]) -$2=`echo "disp($1)" | $OCTAVE -qf` +$2=`unset TERM; echo "disp($1)" | $OCTAVE -qf` AC_MSG_RESULT($$2) AC_SUBST($2) ]) -dnl Check status of an octave variable -dnl -dnl OCTAVE_CHECK_EXIST(variable,action_if_true,action_if_false) -dnl -AC_DEFUN(OCTAVE_CHECK_EXIST, -[AC_MSG_CHECKING([for $1 in Octave]) -if test `echo 'disp(exist("$1"))' | $OCTAVE -qf`X != 0X ; then - AC_MSG_RESULT(yes) - $2 -else - AC_MSG_RESULT(no) - $3 -fi -]) +dnl ********************************************************** dnl should check that $(OCTAVE) --version matches $(MKOCTFILE) --version AC_CHECK_PROG(OCTAVE,octave,octave) OCTAVE_EVAL(OCTAVE_VERSION,OCTAVE_VERSION) +dnl grab the major and minor version numbers. +AC_SUBST(ver) +ver=`echo $OCTAVE_VERSION | sed -e "s/\.//" -e "s/\..*$//"` + dnl grab canonical host type so we can write system specific install stuff OCTAVE_EVAL(octave_config_info('canonical_host_type'),canonical_host_type) -dnl grab SHLEXT from octave config -OCTAVE_EVAL(octave_config_info('SHLEXT'),SHLEXT) - AC_PROG_LN_S -AC_PROG_RANLIB -dnl Use $(COPY_FLAGS) to set options for cp when installing .oct files. -COPY_FLAGS="-Rfp" -case "$canonical_host_type" in - *-*-linux*) - COPY_FLAGS="-fdp" - ;; -esac -AC_SUBST(COPY_FLAGS) - -dnl Use $(STRIP) in the makefile to strip executables. If not found, -dnl STRIP expands to ':', which in the makefile does nothing. -dnl Don't need this for .oct files since mkoctfile handles them directly -STRIP=${STRIP-strip} -AC_CHECK_PROG(STRIP,$STRIP,$STRIP,:) - dnl Strip on windows, don't strip on Mac OS/X or IRIX dnl For the rest, you can force strip using MKOCTFILE="mkoctfile -s" dnl or avoid strip using STRIP=: before ./configure @@ -297,107 +50,10 @@ ;; esac -dnl Test for the makeinfo program -AC_CHECK_PROG(MAKEINFO,makeinfo,makeinfo) -if [ test -n "$MAKEINFO" ]; then - dnl Check whether the makeinfo command accepts the - dnl "--no-split" option - touch conftest.texi - AC_MSG_CHECKING([for makeinfo --no-split]) - ac_try="$MAKEINFO --no-split conftest.texi" - if AC_TRY_EVAL(ac_try) ; then - MAKEINFO="$MAKEINFO --no-split" - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - fi - rm -f conftest.* -fi - -dnl Test for the texi2dvi program -AC_CHECK_PROG(TEXI2DVI,texi2dvi,texi2dvi) -if [ test -n "$TEXI2DVI" ]; then - dnl Check whether the texi2dvi command accepts the - dnl "--clean" option - cat > conftest.texi <<EOF -\input texinfo -@bye -EOF - AC_MSG_CHECKING([that texi2dvi runs]) - ac_try="$TEXI2DVI conftest.texi > /dev/null" - if AC_TRY_EVAL(ac_try) ; then - AC_MSG_RESULT(yes) - AC_MSG_CHECKING([for texi2dvi --clean]) - ac_try="$TEXI2DVI --clean conftest.texi > /dev/null" - if AC_TRY_EVAL(ac_try) ; then - TEXI2DVI="$TEXI2DVI --clean" - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - fi - else - TEXI2DVI="" - AC_MSG_RESULT(no) - fi - rm -f conftest.* -fi - -dnl Test for the texi2html program -AC_CHECK_PROG(TEXI2HTML,texi2html,texi2html) -if [ test -n "$TEXI2HTML" ]; then - STATUS="yes" - dnl Check whether the texi2html command accepts the - dnl "-split_chapter -number" option - touch conftest.texi - AC_MSG_CHECKING([for texi2html --clean]) - ac_try="$TEXI2HTML -split_chapter -number conftest.texi" - if AC_TRY_EVAL(ac_try) ; then - TEXI2HTML="$TEXI2HTML -split_chapter -number" - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - fi - rm -f conftest.* - dnl TeTex 3.0 on Suse is leaving a conftest directory - rm -rf conftest -fi - -dnl Test for the dvipdf program -AC_CHECK_PROG(DVIPDF,dvipdf,dvipdf) - -dnl Test for the dvips program -AC_CHECK_PROG(DVIPS,dvips,dvips) - -MKDOC=$TOPDIR/admin/mkdoc -AC_SUBST(MKDOC) - -MKTEXI=$TOPDIR/admin/mktexi -AC_SUBST(MKTEXI) - CONFIGURE_OUTPUTS="Makeconf" STATUS_MSG=" -octave commands will install into the following directories: - m-files: $mpath - oct-files: $opath - binaries: $xpath -alternatives: - m-files: $altmpath - oct-files: $altopath - -shell commands will install into the following directories: - binaries: $bindir - man pages: $mandir - libraries: $libdir - headers: $includedir - octave-forge is configured with octave: $OCTAVE (version $OCTAVE_VERSION) mkoctfile: $MKOCTFILE for Octave $subver - X11 support: $XSTATUS - makeinfo: $MAKEINFO - texi2dvi: $TEXI2DVI - texi2html: $TEXI2HTML - mkdoc: $MKDOC - mktexi: $MKTEXI - dvips: $DVIPS - dvipdf: $DVIPDF" + +Building communication package version" Modified: trunk/octave-forge/main/fixed/src/Makeconf.in =================================================================== --- trunk/octave-forge/main/fixed/src/Makeconf.in 2008-03-27 15:24:57 UTC (rev 4819) +++ trunk/octave-forge/main/fixed/src/Makeconf.in 2008-03-27 15:45:25 UTC (rev 4820) @@ -9,22 +9,12 @@ canonical_host_type = @canonical_host_type@ DESTDIR = LN_S = @LN_S@ - OCTAVE = @OCTAVE@ OCTAVE_VERSION = @OCTAVE_VERSION@ MKOCTFILE = @MKOCTFILE@ -DHAVE_OCTAVE_$(ver) -v -SHLEXT = @SHLEXT@ ver = @ver@ -MAKEINFO = @MAKEINFO@ -TEXI2DVI = @TEXI2DVI@ -TEXI2HTML = @TEXI2HTML@ -DVIPDF = @DVIPDF@ -DVIPS = @DVIPS@ - -MKDOC = @MKDOC@ -MKTEXI = @MKTEXI@ OCTAVEFIXEDVERSION = @OCTAVEFIXEDVERSION@ %.o: %.c ; $(MKOCTFILE) -c $< This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <xav...@us...> - 2008-03-28 13:37:26
|
Revision: 4822 http://octave.svn.sourceforge.net/octave/?rev=4822&view=rev Author: xavier98 Date: 2008-03-28 06:37:06 -0700 (Fri, 28 Mar 2008) Log Message: ----------- octave-forgify video functions found at http://mentat.za.net/. Implements: addframe, avifile, aviinfo, aviread Added Paths: ----------- trunk/octave-forge/main/video/ trunk/octave-forge/main/video/COPYING trunk/octave-forge/main/video/DESCRIPTION trunk/octave-forge/main/video/INDEX trunk/octave-forge/main/video/Makefile trunk/octave-forge/main/video/README trunk/octave-forge/main/video/inst/ trunk/octave-forge/main/video/src/ trunk/octave-forge/main/video/src/AVHandler.cc trunk/octave-forge/main/video/src/AVHandler.h trunk/octave-forge/main/video/src/Makeconf.in trunk/octave-forge/main/video/src/Makefile.in trunk/octave-forge/main/video/src/addframe.cc trunk/octave-forge/main/video/src/autogen.sh trunk/octave-forge/main/video/src/avctest.cc trunk/octave-forge/main/video/src/avifile.cc trunk/octave-forge/main/video/src/aviinfo.cc trunk/octave-forge/main/video/src/aviread.cc trunk/octave-forge/main/video/src/configure.base trunk/octave-forge/main/video/src/oct-avifile.cc trunk/octave-forge/main/video/src/oct-avifile.h trunk/octave-forge/main/video/src/tests/ trunk/octave-forge/main/video/src/tests/avitest.m Added: trunk/octave-forge/main/video/COPYING =================================================================== --- trunk/octave-forge/main/video/COPYING (rev 0) +++ trunk/octave-forge/main/video/COPYING 2008-03-28 13:37:06 UTC (rev 4822) @@ -0,0 +1,25 @@ +Octave-Avifile : An Octave interface for handling AVI videos + +Copyright (C) 2004 Stefan van der Walt <st...@su...> + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Added: trunk/octave-forge/main/video/DESCRIPTION =================================================================== --- trunk/octave-forge/main/video/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/video/DESCRIPTION 2008-03-28 13:37:06 UTC (rev 4822) @@ -0,0 +1,12 @@ +Name: video +Version: 1.0 +Date: 2008-03-28 +Author: Stefan van der Walt, Roman Stanchak +Maintainer: Xavier Delacour +Title: Video functions +Description: Implements addframe, avifile, aviinfo, and aviread, using ffmpeg. (and approximately conforms to Matlab interface) +Depends: octave (>= 2.9.12) +Autoload: yes +SystemRequirements: ffmpeg +License: BSD +Url: http://octave.sf.net Added: trunk/octave-forge/main/video/INDEX =================================================================== --- trunk/octave-forge/main/video/INDEX (rev 0) +++ trunk/octave-forge/main/video/INDEX 2008-03-28 13:37:06 UTC (rev 4822) @@ -0,0 +1,6 @@ +video >> Video +addframe +avifile +aviinfo +aviread + Added: trunk/octave-forge/main/video/Makefile =================================================================== --- trunk/octave-forge/main/video/Makefile (rev 0) +++ trunk/octave-forge/main/video/Makefile 2008-03-28 13:37:06 UTC (rev 4822) @@ -0,0 +1,4 @@ +sinclude ../../Makeconf + + +PKG_FILES = COPYING DESCRIPTION INDEX $(wildcard inst/*) $(wildcard src/*) Added: trunk/octave-forge/main/video/README =================================================================== --- trunk/octave-forge/main/video/README (rev 0) +++ trunk/octave-forge/main/video/README 2008-03-28 13:37:06 UTC (rev 4822) @@ -0,0 +1,59 @@ +Octave-Avifile +============== + +Description +----------- +A wrapper for FFMpeg's libavformat and libavcodec, allowing Octave to read +and write fixed-framerate AVI (Audio/Video Interleaved) files. + +Author +------ +Stefan van der Walt <st...@su...> +http://mentat.za.net + +Contributors +------------ +Roman Stanchak + +Dependencies +------------ +You'll need the FFMpeg libraries and header files. Note that FFMpeg is +released under the LGPL. It can be downloaded from + +http://ffmpeg.sf.net, + +but your distribution may already have packages available. + +Debian: libavformat-dev libavcodec-dev +Mandrake: libffmpeg0-devel libffmpeg0 + +Compiling +--------- +$ ./configure +$ make + +The commands `avifile' and `addframe' should then be available in Octave. + +Usage Notes +----------- +- If FFMpeg complains about "too many threads", increase the frame height + and width. For some obscure reason, they do a comparison between the number + of threads and the frame dimensions. + +- Remember to `clear' a movie after adding the last frame. This gives + `avifile' a chance to write some headers and close the file, i.e. + + octave:1> x = avifile("test.avi", "msmpeg4v2"); + octave:2> addframe(x, zeros(100,100)); + octave:3> clear x + +- If `aviinfo' crashes, you might have run into a libstdc++ memory allocation + bug. Work around the problem by executing + + $ export GLIBCXX_FORCE_NEW=1 + + before running Octave. + +Licence +------- +See the file `COPYING'. Added: trunk/octave-forge/main/video/src/AVHandler.cc =================================================================== --- trunk/octave-forge/main/video/src/AVHandler.cc (rev 0) +++ trunk/octave-forge/main/video/src/AVHandler.cc 2008-03-28 13:37:06 UTC (rev 4822) @@ -0,0 +1,450 @@ +/* Copyright (c) 2005 Stefan van der Walt <st...@su...> + * + * Based in part on the libavformat example, which is + * Copyright (c) 2003 Fabrice Bellard + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "AVHandler.h" + +std::ostream *AVHandler::out = &std::cout; + +AVHandler::~AVHandler(void) { + if (frame) { + av_free(frame->data[0]); + av_free(frame); + frame = NULL; + } + + if (rgbframe) { + av_free(rgbframe->data[0]); + av_free(rgbframe); + rgbframe = NULL; + } + + // we can use FFMpeg's `av_close_input_file` for input files, but + // output files must be closed manually + + // flush buffers, write headers and close output file + if (av_output) { + if (av_output->pb.buf_ptr) { + while (write_frame() > 0) {} + av_write_trailer(av_output); + if (url_fclose( &(av_output->pb) ) < 0) + (*out) << "AVHandler: cannot close output file" << std::endl; + } + av_free(av_output); + } + + // close codec + if (vstream) { + if (vstream->codec->codec) { + avcodec_close( vstream->codec ); + } + } + + if (av_input) { + av_close_input_file(av_input); + } else { + // close output stream + if (vstream) av_freep(&vstream); + } + + if (video_outbuf) { + av_free(video_outbuf); + } + +} + +int +AVHandler::setup_write() { + av_register_all(); + + AVOutputFormat *avifmt; + for (avifmt = first_oformat; avifmt != NULL; avifmt = avifmt->next) { + if (std::string(avifmt->name) == "avi") { + break; + } + } + + if (!avifmt) { + (*out) << "AVHandler: Error finding AVI output format" << std::endl; + return -1; + } + + av_output = av_alloc_format_context(); + if (!av_output) { + (*out) << "AVHandler: Memory error allocating format context" << std::endl; + return -1; + } + + // use AVI encoding + av_output->oformat = avifmt; + av_output->oformat->audio_codec = CODEC_ID_NONE; + + if (avifmt->video_codec != CODEC_ID_NONE) { + if (add_video_stream() != 0) return -1; + } + + /* av_set_parameters is mandatory */ + if (av_set_parameters(av_output, NULL) < 0) { + (*out) << "AVHandler: Error setting output format parameters" << std::endl; + return -1; + } + + snprintf(av_output->filename, sizeof(av_output->filename), "%s", filename.c_str()); + snprintf(av_output->title, sizeof(av_output->title), "%s", title.c_str()); + snprintf(av_output->author, sizeof(av_output->author), "%s", author.c_str()); + snprintf(av_output->comment, sizeof(av_output->comment), "%s", comment.c_str()); + + if (url_fopen(&av_output->pb, filename.c_str(), URL_WRONLY) < 0) { + (*out) << "AVHandler: Could not open \"" << filename << "\" for output" << std::endl; + return -1; + } + + if (init_video_codecs() != 0) return -1; + + frame = create_frame(vstream->codec->pix_fmt); + rgbframe = create_frame(PIX_FMT_RGB24); + if (!frame || !rgbframe) return -1; + + av_write_header(av_output); + + return 0; +} + +int +AVHandler::setup_read() { + av_register_all(); + + if (av_open_input_file(&av_input, filename.c_str(), NULL, 0, NULL) != 0) { + (*out) << "AVHandler: Could not open \"" << filename << "\" for reading" << std::endl; + return -1; + } + + if (av_find_stream_info(av_input) < 0) { + (*out) << "AVHandler: No stream information available" << std::endl; + return -1; + } + + for (int i=0; i < av_input->nb_streams; i++) { + if (av_input->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO) { + vstream = av_input->streams[i]; + break; + } + } + if (!vstream) { + (*out) << "AVHandler: No video streams found" << std::endl; + return -1; + } + + for (int i=0; i < av_input->nb_streams; i++) { + if (av_input->streams[i]->codec->codec_type == CODEC_TYPE_AUDIO) { + astream = av_input->streams[i]; + break; + } + } + + AVCodec *codec; + codec = avcodec_find_decoder(vstream->codec->codec_id); + + if (!codec) { + (*out) << "AVHandler: Cannot find codec used in stream" << std::endl; + return -1; + } + codec_name = codec->name; + + // We can handle truncated bitstreams + if (codec->capabilities & CODEC_CAP_TRUNCATED) + vstream->codec->flags |= CODEC_FLAG_TRUNCATED; + + if (avcodec_open(vstream->codec, codec) < 0) { + (*out) << "AVHandler: Cannot open codec " << codec_name << std::endl; + vstream->codec->codec = NULL; + return -1; + } + + /// XXX TODO XXX Verify that this calculation is correct + AVRational av_fr = vstream->r_frame_rate; + framerate = (double)av_fr.num / (double)av_fr.den; + width = vstream->codec->width; + height = vstream->codec->height; + + title = av_input->title; + author = av_input->author; + comment = av_input->comment; + + rgbframe = create_frame(PIX_FMT_RGB24); + if (!rgbframe) return -1; + + return 0; +} + +void +AVHandler::draw_background(unsigned char r, unsigned char g, unsigned char b) { + int x, y; + for (y = 0; y < vstream->codec->height; y++) { + for (x = 0; x < vstream->codec->width; x++) { + rgbframe->data[0][y * rgbframe->linesize[0] + 3*x] = r; + rgbframe->data[0][y * rgbframe->linesize[0] + 3*x+1] = g; + rgbframe->data[0][y * rgbframe->linesize[0] + 3*x+2] = b; + } + } +} + +int +AVHandler::write_frame() { + if (video_outbuf == NULL) { + return 0; + } + + lock_parameters = true; + + AVCodecContext *c = vstream->codec; + + if (frame && rgbframe) { + if (img_convert((AVPicture *)frame, c->pix_fmt, + (AVPicture *)rgbframe, PIX_FMT_RGB24, + c->width, c->height) < 0) { + (*out) << "AVHandler: error converting RGB image to output format" << std::endl; + return -1; + } + } + + int out_size = avcodec_encode_video(c, video_outbuf, + VIDEO_OUTBUF_SIZE, + frame); + if (out_size > 0) { + AVPacket pkt; + av_init_packet(&pkt); + + pkt.stream_index = vstream->index; + pkt.data = video_outbuf; + pkt.size = out_size; + + if (c->coded_frame) + pkt.pts = c->coded_frame->pts; + if (c->coded_frame && c->coded_frame->key_frame) + pkt.flags |= PKT_FLAG_KEY; + /// XXX FIXME XXX does this ensure that the first frame is always a key frame? + + if (av_write_frame(av_output, &pkt) != 0) { + (*out) << "AVHandler: error writing video frame" << std::endl; + return -1; + } + + } + + frame_nr++; + return out_size; +} + +int +AVHandler::read_frame(unsigned int nr) { + nr--; // zero-based calculations + + AVCodecContext *cc = vstream->codec; + + // Calculate timestamp of target frame + uint64_t start_time = 0; + if ((uint64_t)vstream->start_time != AV_NOPTS_VALUE) { + start_time = vstream->start_time; + } + uint64_t target_timestamp = start_time + nr*(uint64_t)(AV_TIME_BASE / framerate); + + if (((target_timestamp - start_time) < 0) || + ((target_timestamp - start_time) >= (uint64_t)av_input->duration)) { + (*out) << "AVHandler: Invalid frame requested" << std::endl; + return -1; + } + + // Seek to closest keyframe + if (av_seek_frame(av_input, -1, target_timestamp, AVSEEK_FLAG_BACKWARD) < 0) { + (*out) << "AVHandler: Error seeking to " << target_timestamp << std::endl; + return -1; + } + cc->hurry_up = 1; + + // Flush stream buffers after seek + avcodec_flush_buffers(cc); + + // Calculate stream time base + double stream_time_base = 1; + if (vstream->time_base.den != 0) { + stream_time_base = (double)vstream->time_base.num / vstream->time_base.den; + } + + frame = avcodec_alloc_frame(); + + uint64_t current_timestamp = 0; + AVPacket packet; + + while (current_timestamp <= target_timestamp) { + + // Read until we find a packet from the video stream + packet.stream_index = -1; + while (packet.stream_index != vstream->index) { + if (av_read_frame(av_input, &packet)) { + (*out) << "AVHandler: Error reading packet after timestamp " << current_timestamp << std::endl; + av_free_packet(&packet); + av_free(frame); frame = NULL; + return -1; + } + + if (url_feof(&(av_input->pb))) { + (*out) << "AVHandler: EOF reached" << std::endl; + } + } + + // Decode the packet into a frame + int frameFinished; + if (avcodec_decode_video(cc, frame, &frameFinished, packet.data, packet.size) < 0) { + (*out) << "AVHandler: Error decoding video stream" << std::endl; + av_free_packet(&packet); + av_free(frame); frame = NULL; + return -1; + } + + if (frameFinished) { + current_timestamp = (uint64_t)(vstream->cur_dts * AV_TIME_BASE * (long double)stream_time_base); + } + } + cc->hurry_up = 0; + + img_convert((AVPicture *)rgbframe, PIX_FMT_RGB24, + (AVPicture *)frame, cc->pix_fmt, + cc->width, cc->height); + + av_free_packet(&packet); + av_free(frame); frame = NULL; + + return 0; +} + +void +AVHandler::print_file_formats() { + (*out) << "Supported file formats:" << std::endl; + av_register_all(); + + AVOutputFormat *ofmt; + for (ofmt = first_oformat; ofmt != NULL; ofmt = ofmt->next) { + (*out) << ofmt->name << " "; + } + (*out) << std::endl << std::endl; +} + +void +AVHandler::print_codecs() { + (*out) << "Supported video codecs:" << std::endl; + av_register_all(); + + AVCodec *codec; + for (codec = first_avcodec; codec != NULL; codec = codec->next) { + if ((codec->type == CODEC_TYPE_VIDEO) && + (codec->encode)) { + (*out) << codec->name << " "; + } + } + (*out) << std::endl; +} + +int +AVHandler::add_video_stream() { + AVCodecContext *cc; + + vstream = av_new_stream(av_output, 0); + if (!vstream) { + (*out) << "AVHandler: error opening video output stream" << std::endl; + return -1; + } + + cc = vstream->codec; + + cc->codec_type = CODEC_TYPE_VIDEO; + + cc->bit_rate = bitrate; + cc->width = width; + cc->height = height; + + // XXX TODO XXX Make sure this calculation is correct // + cc->time_base.num = 1; + cc->time_base.den = (int)(framerate); + cc->pix_fmt = PIX_FMT_YUV420P; + + cc->gop_size = gop_size; + + return 0; +} + +int +AVHandler::init_video_codecs() { + AVCodec *codec; + AVCodecContext *cc; + + cc = vstream->codec; + + //codec = avcodec_find_encoder(cc->codec_id); + codec = avcodec_find_encoder_by_name(codec_name.c_str()); + + if (!codec) { + (*out) << "AVHandler: cannot find codec " << codec_name << std::endl; + return -1; + } + + if (avcodec_open(cc, codec) < 0) { + (*out) << "AVHandler: cannot open codec" << std::endl; + cc->codec = NULL; + return -1; + } + + // XXX FIXME XXX What is the best size for video_outbuf? + video_outbuf = (uint8_t *)malloc(VIDEO_OUTBUF_SIZE); + + return 0; +} + +AVFrame* +AVHandler::create_frame(PixelFormat fmt) { + AVFrame *frame; + uint8_t *frame_buf; + + frame = avcodec_alloc_frame(); + if (!frame) { + (*out) << "AVHandler: cannot allocate frame" << std::endl; + return NULL; + } + + int size = avpicture_get_size(fmt, + vstream->codec->width, + vstream->codec->height); + + frame_buf = (uint8_t *)malloc(size); + if (!frame_buf) { + av_free(frame); + (*out) << "AVHandler: error initialising frame" << std::endl; + return NULL; + } + + avpicture_fill((AVPicture *)frame, frame_buf, fmt, + vstream->codec->width, vstream->codec->height); + + return frame; +} + Added: trunk/octave-forge/main/video/src/AVHandler.h =================================================================== --- trunk/octave-forge/main/video/src/AVHandler.h (rev 0) +++ trunk/octave-forge/main/video/src/AVHandler.h 2008-03-28 13:37:06 UTC (rev 4822) @@ -0,0 +1,243 @@ +/* Copyright (C) 2005 Stefan van der Walt <st...@su...> + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#ifndef _AVHANDLER_H +#define _AVHANDLER_H + +#define VIDEO_OUTBUF_SIZE 200000 + +#define INT64_C +#define __STDC_CONSTANT_MACROS +#include <errno.h> +#include <ffmpeg/avformat.h> +#include <iostream> + +class AVHandler { + public: + AVHandler() { + av_output = NULL; + av_input = NULL; + vstream = NULL; + astream = NULL; + frame = NULL; + rgbframe = NULL; + video_outbuf = NULL; + filename = ""; + frame_nr = 0; + + bitrate = 400000; + framerate = 25; + gop_size = 10; + width = 352; + height = 288; + codec_name = "msmpeg4v2"; + + title = ""; + author = ""; + comment = ""; + + lock_parameters = false; + } + + ~AVHandler(void); + + int setup_write(); + + int setup_read(); + + void draw_background(unsigned char r, unsigned char g, unsigned char b); + + // write rgbframe to file + int write_frame(); + + // read frame nr from file into rgbframe + int read_frame(unsigned int nr); + + static void print_file_formats(); + + static void print_codecs(); + + // The following routines can be used before `setup_write' + + void set_filename(const std::string &filename) { + this->filename = filename; + } + + std::string get_filename() const { + return filename; + } + + void set_codec(const std::string &codec) { + codec_name = codec; + } + + std::string get_codec() const { + return codec_name; + } + + std::string get_audio_codec() const { + if (!astream) return ""; + + AVCodec *codec; + codec = avcodec_find_decoder(astream->codec->codec_id); + if (!codec) { + return ""; + } + return std::string(codec->name); + } + + unsigned int get_audio_samplerate() const { + if (!astream) return 0; + + return astream->codec->sample_rate; + } + + unsigned int get_audio_channels() const { + if (!astream) return 0; + + return astream->codec->channels; + } + + void set_bitrate(const unsigned int br) { + bitrate = br; + } + + unsigned int get_bitrate() const { + return bitrate; + } + + void set_framerate(double fr) { + framerate = fr; + } + + void set_gop_size(int gop) { + gop_size = gop; + } + + double get_framerate() const { + return framerate; + } + + void set_width(unsigned int width) { + this->width = width; + } + + unsigned int get_width() const { + return width; + } + + void set_height(unsigned int height) { + this->height = height; + } + + unsigned int get_height() const { + return height; + } + + unsigned int get_total_frames() const { + if (vstream) { + return (unsigned int)((double)framerate * vstream->duration / AV_TIME_BASE); + } else { + return 0; + } + } + + unsigned int get_filesize() const { + if (av_input) { + return av_input->file_size; + } else { + return 0; + } + } + + void set_title(const std::string &t) { + title = t; + } + + std::string get_title() const { + return title; + } + + void set_author(const std::string &a) { + author = a; + } + + std::string get_author() const { + return author; + } + + void set_comment(const std::string &c) { + comment = c; + } + + std::string get_comment() const { + return comment; + } + + AVFrame *get_rgbframe() { + return rgbframe; + } + + static void set_log(std::ostream *log) { + AVHandler::out = log; } + + private: + static std::ostream *out; + + AVFormatContext *av_output; + AVFormatContext *av_input; + AVStream *vstream; + AVStream *astream; + + AVFrame *frame; + AVFrame *rgbframe; + + uint8_t *video_outbuf; + + std::string filename; + + int frame_nr; + + unsigned int bitrate; + double framerate; + int gop_size; + unsigned int width; + unsigned int height; + std::string codec_name; + + std::string title; + std::string author; + std::string comment; + + bool lock_parameters; + + int add_video_stream(); + + int init_video_codecs(); + + AVFrame *create_frame(PixelFormat fmt); + +}; + +#endif Added: trunk/octave-forge/main/video/src/Makeconf.in =================================================================== --- trunk/octave-forge/main/video/src/Makeconf.in (rev 0) +++ trunk/octave-forge/main/video/src/Makeconf.in 2008-03-28 13:37:06 UTC (rev 4822) @@ -0,0 +1,67 @@ + +## Makeconf is automatically generated from Makeconf.base and Makeconf.add +## in the various subdirectories. To regenerate, use ./autogen.sh to +## create a new ./Makeconf.in, then use ./configure to generate a new +## Makeconf. + +OCTAVE_FORGE = 1 + +SHELL = @SHELL@ + +canonical_host_type = @canonical_host_type@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ +bindir = @bindir@ +mandir = @mandir@ +libdir = @libdir@ +datadir = @datadir@ +infodir = @infodir@ +includedir = @includedir@ +datarootdir = @datarootdir@ +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALLOCT=octinst.sh + +DESTDIR = + +RANLIB = @RANLIB@ +STRIP = @STRIP@ +LN_S = @LN_S@ + +AWK = @AWK@ + +# Most octave programs will be compiled with $(MKOCTFILE). Those which +# cannot use mkoctfile directly can request the flags that mkoctfile +# would use as follows: +# FLAG = $(shell $(MKOCTFILE) -p FLAG) +# The following flags are for compiling programs that are independent +# of Octave. How confusing. +CC = @CC@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +CPICFLAG = @CPICFLAG@ +CXX = @CXX@ +CXXFLAGS = @CXXFLAGS@ +CXXPICFLAG = @CXXPICFLAG@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FPICFLAG = @FPICFLAG@ + +OCTAVE = @OCTAVE@ +OCTAVE_VERSION = @OCTAVE_VERSION@ +MKOCTFILE = @MKOCTFILE@ -DHAVE_OCTAVE_$(ver) -v +SHLEXT = @SHLEXT@ + +ver = @ver@ +MPATH = @mpath@ +OPATH = @opath@ +XPATH = @xpath@ +ALTMPATH = @altmpath@ +ALTOPATH = @altopath@ + +%.o: %.c ; $(MKOCTFILE) -c $< +%.o: %.f ; $(MKOCTFILE) -c $< +%.o: %.cc ; $(MKOCTFILE) -c $< +%.oct: %.cc ; $(MKOCTFILE) $< Added: trunk/octave-forge/main/video/src/Makefile.in =================================================================== --- trunk/octave-forge/main/video/src/Makefile.in (rev 0) +++ trunk/octave-forge/main/video/src/Makefile.in 2008-03-28 13:37:06 UTC (rev 4822) @@ -0,0 +1,48 @@ +sinclude Makeconf + +OCTFILES = avifile.oct aviread.oct aviinfo.oct addframe.oct + +FFMPEG_CONFIG = @FFMPEG_CONFIG@ +ifdef FFMPEG_CONFIG + FFMPEG_LIBS = $(shell pkg-config libavformat --libs) + FFMPEG_CFLAGS = $(shell pkg-config libavformat --cflags) +else + FFMPEG_LIBS = -lavformat -lavcodec -lz -lm + FFMPEG_CFLAGS = +endif + +AVOBJS = AVHandler.o oct-avifile.o + +.PHONY: all strip +all: ${OCTFILES} + +.PHONY: clean +clean: + rm -f *.o *.oct avctest *~ octave-core + +oct-avifile.o: AVHandler.o + +${AVOBJS}: %.o: %.cc + mkoctfile -v -c $(FFMPEG_CFLAGS) $< -o $@ + +${OCTFILES}: %.oct: %.cc AVHandler.o oct-avifile.o + mkoctfile -v $< $(filter %.o, $^) $(FFMPEG_LIBS) $(FFMPEG_CFLAGS) + +avctest.o: avctest.cc + g++ -Wall -c avctest.cc -o avctest.o + +avctest: AVHandler.o avctest.o + g++ $^ -Wall ${FFMPEG_OPTS} -o $@ + +.PHONY: strip +strip: all + strip $(shell find ./* -name "*.oct") avctest + +TEST_CASES = \ + avitest + +NOT_BROKEN_TEST_CASES = $(TEST_CASES:=.test) +.PHONY: check +check: $(NOT_BROKEN_TEST_CASES) +%.test: + octave -q tests/$*.m > /dev/null Added: trunk/octave-forge/main/video/src/addframe.cc =================================================================== --- trunk/octave-forge/main/video/src/addframe.cc (rev 0) +++ trunk/octave-forge/main/video/src/addframe.cc 2008-03-28 13:37:06 UTC (rev 4822) @@ -0,0 +1,77 @@ +/* Copyright (C) 2004 Stefan van der Walt <st...@su...> + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include <octave/oct.h> +#include "oct-avifile.h" + +DEFUN_DLD(addframe, args, nargout, +"-*- texinfo -*-\n\ +@deftypefn {Loadable Function} {} addframe (@var{avi}, @var{image})\n\ +Add a frame to an AVI file.\n\ +\n\ +@var{avi} is created using @code{avifile}. @var{image} must be \n\ +of class @code{double} and scaled to be in [0-1].\n\ +@end deftypefn\n\ +\n\ +@seealso{avifile, aviread, aviinfo}") +{ + octave_value_list retval; + + if (args.length() != 2) { + print_usage(); + return retval; + } + + if (args(0).type_id() != Avifile::static_type_id()) { + print_usage(); + return retval; + } + + NDArray f = args(1).array_value(); + if (error_state) { + error("addframe: frame should be a matrix"); + return retval; + } + + // Check if input image is in [0-1] + if (f.any_element_is_negative() || (1-f).any_element_is_negative()) { + error("addframe: input frame should be in [0-1]"); + return retval; + } + + Avifile *m = (Avifile*)args(0).internal_rep(); + m->addframe(f); + if (error_state) { + octave_stdout << "addframe: error adding frame to avifile" << std::endl; + } + + return retval; +} + +/* +%!test +%! m = avifile("test.avi") +%! addframe(m, zeros(2,2)) +%! +*/ Added: trunk/octave-forge/main/video/src/autogen.sh =================================================================== --- trunk/octave-forge/main/video/src/autogen.sh (rev 0) +++ trunk/octave-forge/main/video/src/autogen.sh 2008-03-28 13:37:06 UTC (rev 4822) @@ -0,0 +1,27 @@ +#! /bin/sh + +## Generate ./configure +rm -f configure.in +echo "dnl --- DO NOT EDIT --- Automatically generated by autogen.sh" > configure.in +cat configure.base >> configure.in +cat <<EOF >> configure.in + AC_OUTPUT(\$CONFIGURE_OUTPUTS) + dnl XXX FIXME XXX chmod is not in autoconf's list of portable functions + + echo " " + echo " \"\\\$prefix\" is \$prefix" + echo " \"\\\$exec_prefix\" is \$exec_prefix" + AC_MSG_RESULT([\$STATUS_MSG + +find . -name NOINSTALL -print # shows which toolboxes won't be installed +]) +EOF + +autoconf configure.in > configure.tmp +if [ diff configure.tmp configure > /dev/null 2>&1 ]; then + rm -f configure.tmp; +else + mv -f configure.tmp configure + chmod 0755 configure +fi +rm -f configure.in Property changes on: trunk/octave-forge/main/video/src/autogen.sh ___________________________________________________________________ Name: svn:executable + * Added: trunk/octave-forge/main/video/src/avctest.cc =================================================================== --- trunk/octave-forge/main/video/src/avctest.cc (rev 0) +++ trunk/octave-forge/main/video/src/avctest.cc 2008-03-28 13:37:06 UTC (rev 4822) @@ -0,0 +1,55 @@ +#include "AVHandler.h" +#include <cmath> + +#define FRAMES 255 + +int output_avi(std::string fn, std::string codec) +{ + AVHandler *av = new AVHandler(); + + av->set_filename(fn); + av->set_height(100); + av->set_width(300); + av->set_codec(codec); + + int err = av->setup_write(); + if (err != 0) { + delete av; + return err; + } + + std::cout << "starting..." << std::endl; + for (int i = 0; i < FRAMES; i++) { + std::cout << "\r" << i << std::flush; + av->draw_background((unsigned char)((1+sin(double(i)/1000*2*M_PI))*255/2), + (unsigned char)((1+cos(double(i)/1000*2*M_PI))*255/2), 200); + av->write_frame(); + } + + delete av; + return 0; +} + +int main() { +#if defined(HAVE_THREADS) + std::cout << "Warning: threads are active" << std::endl; +#endif + + std::cout << "Built for libavcodec " << LIBAVCODEC_BUILD; + std::cout << " (using version " << avcodec_build() << ")" << std::endl; + + if (output_avi("testc1.avi", "wmv1") != 0) + std::cout << "Error writing testc1.avi" << std::endl; + if (output_avi("testc2.avi", "wmv1") != 0) + std::cout << "Error writing testc2.avi" << std::endl; + + AVHandler av = AVHandler(); + av.set_filename("testc2.avi"); + av.setup_read(); + for (unsigned int i = 1; i < av.get_total_frames()+1; i++) { + std::cout << "Reading frame " << i << "...\r" << std::flush; + av.read_frame(i); + } + + return 0; +} Added: trunk/octave-forge/main/video/src/avifile.cc =================================================================== --- trunk/octave-forge/main/video/src/avifile.cc (rev 0) +++ trunk/octave-forge/main/video/src/avifile.cc 2008-03-28 13:37:06 UTC (rev 4822) @@ -0,0 +1,169 @@ +/* Copyright (C) 2005 Stefan van der Walt <st...@su...> + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include <octave/oct.h> +#include "oct-avifile.h" + +template <typename Num> +void setp(Num &p, Num v) { + if (!error_state) { + p = v; + } else { + error_state = 0; + } +} + +DEFUN_DLD(avifile, args, nargout, +"-*- texinfo -*-\n\ +@deftypefn {Loadable Function} {@var{f} =} avifile (@var{filename}, [@var{parameter}, @var{value}, ...])\n\ +@deftypefnx {Loadable Function} avifile (\"codecs\")\n\ +Create an AVI-format video file.\n\ +\n\ +The supported parameters are\n\ +\n\ +@table @asis\n\ +@item @code{\"compression\"} or @code{\"codec\"}\n\ +The type of encoder used (default: @code{\"msmpeg4v2\"})\n\ +\n\ +@item @code{\"fps\"}\n\ +Encoding frame rate per second (default: @code{25.0})\n\ +\n\ +@item @code{\"gop\"}\n\ +Group-of-pictures -- the number of frames after which a keyframe\n\ +is inserted (default: @code{10})\n\ +\n\ +@item @code{\"bitrate\"}\n\ +Encoding bitrate (default: @code{400000})\n\ +@end table\n\ +\n\ +To see a list of the available codecs, do @code{avifile(\"codecs\")}.\n\ +@end deftypefn\n\ +\n\ +@seealso{addframe, aviinfo, aviread}") +{ + octave_value_list retval; + + if ( (args.length() == 1) && (args(0).string_value() == "codecs") ) { + AVHandler::print_codecs(); + return retval; + } + + if ((args.length() == 0) || (args.length() % 2 != 1)) { + print_usage(); + return retval; + } + + std::string filename = args(0).string_value(); + if (error_state) { + print_usage(); + return retval; + } + + // Parse parameters + std::string codec = "msmpeg4v2"; + unsigned int bitrate = 400000; + int gop_size = 10; + double fps = 25; + std::string title = ""; + std::string author = ""; + std::string comment = "Created using Octave-Avifile"; + + for (unsigned int i = 1; i < args.length(); i++) { + std::string p = args(i).string_value(); + octave_value v = args(i+1); + if (!error_state) { + if ((p == "codec") || (p == "compression")) { setp(codec, v.string_value()); } + else if (p == "bitrate") { setp(bitrate, (unsigned int)v.int_value()); } + else if (p == "gop") { setp(gop_size, v.int_value()); } + else if (p == "fps") { setp(fps, v.double_value()); } + else if (p == "title") { setp(title, v.string_value()); } + else if (p == "author") { setp(author, v.string_value()); } + else if (p == "comment") { setp(comment, v.string_value()); } + else { + error("avifile: unknown parameter \"%s\"", p.c_str()); + return retval; + } + } + i++; + } + + Avifile *m = new Avifile(filename); + if (error_state) { + return retval; + } + m->av->set_codec(codec); + m->av->set_bitrate(bitrate); + m->av->set_gop_size(gop_size); + m->av->set_framerate(fps); + + // Doesn't look like these values are ever encoded + m->av->set_title(title); + m->av->set_author(author); + m->av->set_comment(comment); + + retval.append(octave_value(m)); + return retval; +} + +/* +%!test +%! avifile("codecs") + +%!test +%! m = avifile("test.avi", "codec", "msmpeg4v2") +%! for i = 1:100 +%! I = zeros(100,100); +%! I(i,:) = i; +%! I(:,i) = 200-i; +%! addframe(m, I/255) +%! printf(".") +%! endfor +%! printf("\n") +%! clear m + +%!test +%! m = avifile("test2.avi", "codec", "msmpeg4v2") +%! for i = 1:100 +%! I = zeros(100,100,3); +%! +%! for x = 1:100 +%! I(round(50+10*sin((x+i)/100*4*pi)), x, 1) = 40; +%! I(round(50+10*sin((x+i)/100*4*pi)), x, 2) = 40; +%! I(round(50+10*sin((x+i)/100*4*pi)), x, 3) = 180; +%! endfor +%! +%! I(i,:,1) = 0; +%! I(i,:,2) = 50 + i*2; +%! I(i,:,3) = 0; +%! I(:,i,1) = 200 - i*2; +%! I(:,i,2) = 0; +%! I(:,i,3) = i*2; +%! +%! addframe(m, I/255) +%! printf(".") +%! endfor +%! printf("\n") +%! clear m + +*/ Added: trunk/octave-forge/main/video/src/aviinfo.cc =================================================================== --- trunk/octave-forge/main/video/src/aviinfo.cc (rev 0) +++ trunk/octave-forge/main/video/src/aviinfo.cc 2008-03-28 13:37:06 UTC (rev 4822) @@ -0,0 +1,95 @@ +/* Copyright (C) 2004 Stefan van der Walt <st...@su...> + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include <octave/oct.h> +#include <octave/oct-map.h> + +#include <octave/file-stat.h> +#include <octave/oct-time.h> +#include <ctime> + +#include "AVHandler.h" + +std::string get_filedate(const std::string &fn) { + time_t file_mod = file_stat(fn).mtime().unix_time(); + + char *timestr = new char[30]; + strftime(timestr, 30, "%d-%b-%Y %H:%M:%S", localtime(&file_mod)); + + return std::string(timestr); +} + +DEFUN_DLD(aviinfo, args, , +"-*- texinfo -*-\n\ +@deftypefn {Loadable Function} {@var{info} =} aviinfo (@var{filename})\n\ +Return the properties of an AVI file.\n\ +@end deftypefn\n\ +\n\ +@seealso{avifile, aviread, addframe}") +{ + octave_value_list retval; + + if (args.length() != 1) { + print_usage(); + return retval; + } + + std::string filename = args(0).string_value(); + if (error_state) { + print_usage(); + return retval; + } + + AVHandler av = AVHandler(); + av.set_filename(filename); + av.set_log(&octave_stdout); + + if (av.setup_read() != 0) { + return retval; + } + + Octave_map m; + + m.assign("Filename", av.get_filename()); + m.assign("FileSize", av.get_filesize()); + m.assign("FileModDate", get_filedate(filename)); + m.assign("NumFrames", av.get_total_frames()); + m.assign("FramesPerSecond", av.get_framerate()); + m.assign("Width", av.get_width()); + m.assign("Height", av.get_height()); + m.assign("ImageType", "truecolor"); + m.assign("VideoCompression", av.get_codec()); + m.assign("Quality", 100); + m.assign("NumColormapEntries", 0); + m.assign("AudioFormat", av.get_audio_codec()); + m.assign("AudioRate", av.get_audio_samplerate()); + m.assign("NumAudioChannels", av.get_audio_channels()); + + // m.assign("Title", av.get_title()); + // m.assign("Author", av.get_author()); + // m.assign("Comment", av.get_comment()); + + retval.append(octave_value(m)); + return retval; +} Added: trunk/octave-forge/main/video/src/aviread.cc =================================================================== --- trunk/octave-forge/main/video/src/aviread.cc (rev 0) +++ trunk/octave-forge/main/video/src/aviread.cc 2008-03-28 13:37:06 UTC (rev 4822) @@ -0,0 +1,107 @@ +/* Copyright (C) 2005 Stefan van der Walt <st...@su...> + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include <octave/oct.h> +#include "AVHandler.h" + +DEFUN_DLD(aviread, args, , +"-*- texinfo -*-\n\ +@deftypefn {Loadable Function} {@var{image} =} aviread (@var{filename}, @var{N})\n\ +Load frame @var{N} from the AVI file @var{filename}.\n\ +@end deftypefn\n\ +\n\ +@seealso{avifile, aviinfo, addframe}") +{ + octave_value_list retval; + + if (args.length() != 2) { + print_usage(); + return retval; + } + + std::string filename = args(0).string_value(); + if (error_state) { + print_usage(); + return retval; + } + + unsigned int framenr = (unsigned int)args(1).scalar_value(); + if (error_state) { + print_usage(); + } + + AVHandler av = AVHandler(); + av.set_filename(filename); + av.set_log(&octave_stdout); + + if (av.setup_read() != 0) { + error("aviread: AVHandler setup failed"); + return retval; + } + + if (av.read_frame(framenr) != 0) { + error("aviread: cannot read frame %d", framenr); + return retval; + } + + AVFrame *frame = av.get_rgbframe(); + + dim_vector d = dim_vector(av.get_height(), av.get_width(), 3); + NDArray image = NDArray(d, 0); + for (unsigned int y = 0; y < av.get_height(); y++) { + for (unsigned int x = 0; x < av.get_width(); x++) { + for (short rgb = 0; rgb < 3; rgb++) { + image(y, x, rgb) = (double)frame->data[0][y * frame->linesize[0] + 3*x + rgb]/255; + } + } + } + + retval.append(octave_value(image)); + return retval; +} + +/* +%!demo +%! # Create an AVI with a low bitrate +%! x = avifile("test.avi"); +%! +%! # Generate some picture +%! I = repmat(0:255, 256, 1)/255; +%! I = cat(3, I, repmat([0:255]', 1, 256)/255); +%! I = cat(3, I, 0.3*ones(256,256)); +%! +%! # Display the picture +%! imshow(I(:,:,1), I(:,:,2), I(:,:,3)); +%! +%! # Write it to the AVI and close the AVI +%! addframe(x, I); +%! clear x +%! +%! # Read the first frame from the AVI +%! I = aviread("test.avi", 1); +%! +%! # Display the frame read +%! imshow(I(:,:,1), I(:,:,2), I(:,:,3)); + +*/ Added: trunk/octave-forge/main/video/src/configure.base =================================================================== --- trunk/octave-forge/main/video/src/configure.base (rev 0) +++ trunk/octave-forge/main/video/src/configure.base 2008-03-28 13:37:06 UTC (rev 4822) @@ -0,0 +1,376 @@ +dnl The configure script is generated by autogen.sh from configure.base +dnl and the various configure.add files in the source tree. Edit +dnl configure.base and reprocess rather than modifying ./configure. + +dnl autoconf 2.13 certainly doesn't work! What is the minimum requirement? +AC_PREREQ(2.2) + +AC_INIT(configure.base) + +PACKAGE=octave-forge +MAJOR_VERSION=0 +MINOR_VERSION=1 +PATCH_LEVEL=0 + +dnl Kill caching --- this ought to be the default +define([AC_CACHE_LOAD], )dnl +define([AC_CACHE_SAVE], )dnl + +dnl uncomment to put support files in another directory +dnl AC_CONFIG_AUX_DIR(admin) + +VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL +AC_SUBST(PACKAGE) +AC_SUBST(VERSION) + +dnl need to find admin files, so keep track of the top dir. +TOPDIR=`pwd` +AC_SUBST(TOPDIR) + +dnl if mkoctfile doesn't work, then we need the following: +dnl AC_PROG_CXX +dnl AC_PROG_F77 + +dnl Need C compiler regardless so define it in a way that +dnl makes autoconf happy and we can override whatever we +dnl need with mkoctfile -p. +dnl XXX FIXME XXX should use mkoctfile to get CC and CFLAGS +AC_PROG_CC + +dnl XXX FIXME XXX need tests for -p -c -s in mkoctfile. + +dnl ******************************************************************* +dnl Sort out mkoctfile version number and install paths + +dnl XXX FIXME XXX latest octave has octave-config so we don't +dnl need to discover things here. Doesn't have --exe-site-dir +dnl but defines --oct-site-dir and --m-site-dir + +dnl Check for mkoctfile +AC_CHECK_PROG(MKOCTFILE,mkoctfile,mkoctfile) +test -z "$MKOCTFILE" && AC_MSG_WARN([no mkoctfile found on path]) + +AC_SUBST(ver) +AC_SUBST(subver) +AC_SUBST(mpath) +AC_SUBST(opath) +AC_SUBST(xpath) +AC_SUBST(altpath) +AC_SUBST(altmpath) +AC_SUBST(altopath) + +AC_ARG_WITH(path, + [ --with-path install path prefix], + [ path=$withval ]) +AC_ARG_WITH(mpath, + [ --with-mpath override path for m-files], + [mpath=$withval]) +AC_ARG_WITH(opath, + [ --with-opath override path for oct-files], + [opath=$withval]) +AC_ARG_WITH(xpath, + [ --with-xpath override path for executables], + [xpath=$withval]) +AC_ARG_WITH(altpath, + [ --with-altpath alternative functions install path prefix], + [ altpath=$withval ]) +AC_ARG_WITH(altmpath, + [ --with-altmpath override path for alternative m-files], + [altmpath=$withval]) +AC_ARG_WITH(altopath, + [ --with-altopath override path for alternative oct-files], + [altopath=$withval]) + +if test -n "$path" ; then + test -z "$mpath" && mpath=$path + test -z "$opath" && opath=$path/oct + test -z "$xpath" && xpath=$path/bin + test -z "$altpath" && altpath=$path-alternatives +fi + +if test -n "$altpath" ; then + test -z "$altmpath" && altmpath=$altpath + test -z "$altopath" && altopath=$altpath/oct +fi + +dnl Don't query if path/ver are given in the configure environment +#if test -z "$mpath" || test -z "$opath" || test -z "$xpath" || test -z "$altmpath" || test -z "$altopath" || test -z "$ver" ; then +if test -z "$mpath" || test -z "$opath" || test -z "$xpath" || test -z "$ver" ; then + dnl Construct program to get mkoctfile version and local install paths + cat > conftest.cc <<EOF +#include <octave/config.h> +#include <octave/version.h> +#include <octave/defaults.h> + +#define INFOV "\nINFOV=" OCTAVE_VERSION "\n" + +#define INFOH "\nINFOH=" OCTAVE_CANONICAL_HOST_TYPE "\n" + +#ifdef OCTAVE_LOCALVERFCNFILEDIR +# define INFOM "\nINFOM=" OCTAVE_LOCALVERFCNFILEDIR "\n" +#else +# define INFOM "\nINFOM=" OCTAVE_LOCALFCNFILEPATH "\n" +#endif + +#ifdef OCTAVE_LOCALVEROCTFILEDIR +# define INFOO "\nINFOO=" OCTAVE_LOCALVEROCTFILEDIR "\n" +#else +# define INFOO "\nINFOO=" OCTAVE_LOCALOCTFILEPATH "\n" +#endif + +#ifdef OCTAVE_LOCALVERARCHLIBDIR +# define INFOX "\nINFOX=" OCTAVE_LOCALVERARCHLIBDIR "\n" +#else +# define INFOX "\nINFOX=" OCTAVE_LOCALARCHLIBDIR "\n" +#endif + +const char *infom = INFOM; +const char *infoo = INFOO; +const char *infox = INFOX; +const char *infoh = INFOH; +const char *infov = INFOV; +EOF + + dnl Compile program perhaps with a special version of mkoctfile + $MKOCTFILE conftest.cc || AC_MSG_ERROR(Could not run $MKOCTFILE) + + dnl Strip the config info from the compiled file + eval `strings conftest.o | grep "^INFO.=" | sed -e "s,//.*$,,"` + rm -rf conftest* + + dnl set the appropriate variables if they are not already set + ver=`echo $INFOV | sed -e "s/\.//" -e "s/\..*$//"` + subver=`echo $INFOV | sed -e "[s/^[^.]*[.][^.]*[.]//]"` + alt_mbase=`echo $INFOM | sed -e "[s,\/[^\/]*$,,]"` + alt_obase=`echo $INFOO | sed -e "[s,/site.*$,/site,]"` + test -z "$mpath" && mpath=$INFOM/octave-forge + test -z "$opath" && opath=$INFOO/octave-forge + test -z "$xpath" && xpath=$INFOX + test -z "$altmpath" && altmpath=$alt_mbase/octave-forge-alternatives/m + test -z "$altopath" && altopath=$alt_obase/octave-forge-alternatives/oct/$INFOH +fi + +dnl ******************************************************************* + +dnl XXX FIXME XXX Should we allow the user to override these? +dnl Do we even need them? The individual makefiles can call mkoctfile -p +dnl themselves, so the only reason to keep them is for configure, and +dnl for those things which are not built using mkoctfile (e.g., aurecord) +dnl but it is not clear we should be using octave compile flags for those. + +dnl C compiler and flags +AC_MSG_RESULT([retrieving compile and link flags from $MKOCTFILE]) +CC=`$MKOCTFILE -p CC` +CFLAGS=`$MKOCTFILE -p CFLAGS` +CPPFLAGS=`$MKOCTFILE -p CPPFLAGS` +CPICFLAG=`$MKOCTFILE -p CPICFLAG` +LDFLAGS=`$MKOCTFILE -p LDFLAGS` +LIBS=`$MKOCTFILE -p LIBS` +AC_SUBST(CC) +AC_SUBST(CFLAGS) +AC_SUBST(CPPFLAGS) +AC_SUBST(CPICFLAG) + +dnl Fortran compiler and flags +F77=`$MKOCTFILE -p F77` +FFLAGS=`$MKOCTFILE -p FFLAGS` +FPICFLAG=`$MKOCTFILE -p FPICFLAG` +AC_SUBST(F77) +AC_SUBST(FFLAGS) +AC_SUBST(FPICFLAG) + +dnl C++ compiler and flags +CXX=`$MKOCTFILE -p CXX` +CXXFLAGS=`$MKOCTFILE -p CXXFLAGS` +CXXPICFLAG=`$MKOCTFILE -p CXXPICFLAG` +AC_SUBST(CXX) +AC_SUBST(CXXFLAGS) +AC_SUBST(CXXPICFLAG) + +dnl ******************************************************************* + +dnl Check for features of your version of mkoctfile. +dnl All checks should be designed so that the default +dnl action if the tests are not performed is to do whatever +dnl is appropriate for the most recent version of Octave. + +dnl Define the following macro: +dnl OF_CHECK_LIB(lib,fn,true,false,helpers) +dnl This is just like AC_CHECK_LIB, but it doesn't update LIBS +AC_DEFUN(OF_CHECK_LIB, +[save_LIBS="$LIBS" +AC_CHECK_LIB($1,$2,$3,$4,$5) +LIBS="$save_LIBS" +]) + +dnl Define the following macro: +dnl TRY_MKOCTFILE(msg,program,action_if_true,action_if_false) +dnl +AC_DEFUN(TRY_MKOCTFILE, +[AC_MSG_CHECKING($1) +cat > conftest.cc << EOF +#include <octave/config.h> +$2 +EOF +ac_try="$MKOCTFILE -c conftest.cc" +if AC_TRY_EVAL(ac_try) ; then + AC_MSG_RESULT(yes) + $3 +else + AC_MSG_RESULT(no) + $4 +fi +]) + +dnl +dnl Check if F77_FUNC works with MKOCTFILE +dnl +TRY_MKOCTFILE([for F77_FUNC], +[int F77_FUNC (hello, HELLO) (const int &n);],, +[MKOCTFILE="$MKOCTFILE -DF77_FUNC=F77_FCN"]) + +dnl +dnl Check if octave still uses SLList.h +dnl +TRY_MKOCTFILE([for SLList.h],[#include <octave/SLList.h>], +[MKOCTFILE="$MKOCTFILE -DHAVE_SLLIST_H"],) + +dnl +dnl Check if octave has lo_ieee_nan_value +dnl +TRY_MKOCTFILE([for lo_ieee_nan_value], +[ #include <octave/lo-ieee.h> +int test(void) { lo_ieee_nan_value(); }],, +[MKOCTFILE="$MKOCTFILE -DUSE_OCTAVE_NAN"]) + +dnl +dnl Check if octave is needs octave_idx_type +dnl +TRY_MKOCTFILE([for octave_idx_type], +[#include <octave/oct-types.h> +octave_idx_type test(void) { octave_idx_type idx = 1; return idx; }],, +[MKOCTFILE="$MKOCTFILE -Doctave_idx_type=int"]) + +dnl +dnl Check if octave uses quit.h +dnl +TRY_MKOCTFILE([for quit.h],[#include <octave/quit.h>],, +[MKOCTFILE="$MKOCTFILE -DNEED_OCTAVE_QUIT"]) + +dnl ********************************************************** + +dnl Evaluate an expression in octave +dnl +dnl OCTAVE_EVAL(expr,var) -> var=expr +dnl +AC_DEFUN(OCTAVE_EVAL, +[AC_MSG_CHECKING([for $1 in Octave]) +$2=`echo "disp($1)" | $OCTAVE -qf` +AC_MSG_RESULT($$2) +AC_SUBST($2) +]) + +dnl Check status of an octave variable +dnl +dnl OCTAVE_CHECK_EXIST(variable,action_if_true,action_if_false) +dnl +AC_DEFUN(OCTAVE_CHECK_EXIST, +[AC_MSG_CHECKING([for $1 in Octave]) +if test `echo 'disp(exist("$1"))' | $OCTAVE -qf`X != 0X ; then + AC_MSG_RESULT(yes) + $2 +else + AC_MSG_RESULT(no) + $3 +fi +]) + +dnl should check that $(OCTAVE) --version matches $(MKOCTFILE) --version +AC_CHECK_PROG(OCTAVE,octave,octave) +OCTAVE_EVAL(OCTAVE_VERSION,OCTAVE_VERSION) + +dnl grab canonical host type so we can write system specific install stuff +OCTAVE_EVAL(octave_config_info('canonical_host_type'),canonical_host_type) + +dnl grab SHLEXT from octave config +OCTAVE_EVAL(octave_config_info('SHLEXT'),SHLEXT) + +AC_PROG_LN_S + +AC_PROG_RANLIB + +dnl Use $(COPY_FLAGS) to set options for cp when installing .oct files. +COPY_FLAGS="-Rfp" +case "$canonical_host_type" in + *-*-linux*) + COPY_FLAGS="-fdp" + ;; +esac +AC_SUBST(COPY_FLAGS) + +dnl Use $(STRIP) in the makefile to strip executables. If not found, +dnl STRIP expands to ':', which in the makefile does nothing. +dnl Don't need this for .oct files since mkoctfile handles them directly +STRIP=${STRIP-strip} +AC_CHECK_PROG(STRIP,$STRIP,$STRIP,:) + +dnl Strip on windows, don't strip on Mac OS/X or IRIX +dnl For the rest, you can force strip using MKOCTFILE="mkoctfile -s" +dnl or avoid strip using STRIP=: before ./configure +case "$canonical_host_type" in + powerpc-apple-darwin*|*-sgi-*) + STRIP=: + ;; + *-cygwin-*|*-mingw-*) + MKOCTFILE="$MKOCTFILE -s" + ;; +esac + +dnl Check for ffmpeg +AC_CHECK_PROG([FFMPEG_CONFIG], [pkg-config], [pkg-config]) +if test -z $FFMPEG_CONFIG ; then + AC_MSG_WARN([`pkg-config' not found -- using default configuration]) + FFMPEG_FLAGS="-lavcodec -lavutil -lm" + echo $FFMPEG_FLAGS +else + FFMPEG_FLAGS=`pkg-config libavformat --libs --cflags` +fi + +AC_CHECK_LIB([avformat], [av_write_frame], [], + [AC_MSG_ERROR([need libavformat from FFMpeg])], + [$FFMPEG_FLAGS]) +AC_CHECK_LIB([avcodec], [av_malloc], [], + [AC_MSG_ERROR([need libavcodec from FFMpeg])], + [$FFMPEG_FLAGS]) + +AC_CHECK_HEADERS([ffmpeg/avformat.h ffmpeg/avcodec.h], [], + AC_MSG_ERROR([FFMpeg header files not found])) +AC_CHECK_DECL(AVSEEK_FLAG_BACKWARD, [], + AC_MSG_ERROR([need a newer version of FFMpeg]), + [#include <ffmpeg/avformat.h>]) + +AC_CONFIG_FILES([Makefile]) +AC_SUBST([FFMPEG_CONFIG]) +AC_OUTPUT + + +CONFIGURE_OUTPUTS="Makeconf" +STATUS_MSG=" +octave commands will install into the following directories: + m-files: $mpath + oct-files: $opath + binaries: $xpath +alternatives: + m-files: $altmpath + oct-files: $altopath + +shell commands will install into the following directories: + binaries: $bindir + man pages: $mandir + libraries: $libdir + headers: $includedir + +octave-forge is configured with + octave: $OCTAVE (version $OCTAVE_VERSION) + mkoctfile: $MKOCTFILE for Octave $subver" + Added: trunk/octave-forge/main/video/src/oct-avifile.cc =================================================================== --- trunk/octave-forge/main/video/src/oct-avifile.cc (rev 0) +++ trunk/octave-forge/main/video/src/oct-avifile.cc 2008-03-28 13:37:06 UTC (rev 4822) @@ -0,0 +1,126 @@ +/* Copyright (C) 2005 Stefan van der Walt <st...@su...> + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include <octave/oct.h> +#include "oct-avifile.h" + +DEFINE_OCTAVE_ALLOCATOR(Avifile); +DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA(Avifile, "avifile", "avifile"); + +Avifile::Avifile(std::string fn) : octave_base_value(), + filename(fn), frames(0), frame_rows(0), frame_columns(0) { + + av = new AVHandler(); + av->set_filename(fn); + av->set_log(&octave_stdout); +} + +Avifile::Avifile(const Avifile& m) { + filename = m.filename; + frames = m.frames; + frame_rows = m.frame_rows; + frame_columns = m.frame_columns; + av = m.av; + + octave_stdout << "avifile: copy constructor shouldn't be called" << std::endl; +} + +void +Avifile::print(std::ostream& os, bool pr_as_read_syntax = false) const { + os << "AVI movie [" << filename << "][" << av->get_codec() << "]: " + << frames << " frame" << (frames != 1 ? "s" : "") << ", " + << frame_rows << "x" << frame_columns << "\n"; +} + +void +Avifile::addframe(const NDArray &f) { + if (frames == 0) { + if ( (f.columns() % 2 != 0) || (f.rows() % 2 != 0) ) { + error("avifile: matrix dimensions must be multiple of two"); + return; + } + + if ( (f.columns() == 0) || (f.rows() == 0) ) { + error("av... [truncated message content] |
From: <ws...@us...> - 2008-03-29 19:57:29
|
Revision: 4832 http://octave.svn.sourceforge.net/octave/?rev=4832&view=rev Author: wsloand Date: 2008-03-29 12:57:33 -0700 (Sat, 29 Mar 2008) Log Message: ----------- Bioinformatics package first commit Added Paths: ----------- trunk/octave-forge/main/bioinfo/ trunk/octave-forge/main/bioinfo/COPYING trunk/octave-forge/main/bioinfo/DESCRIPTION trunk/octave-forge/main/bioinfo/inst/ trunk/octave-forge/main/bioinfo/inst/aa2int.m trunk/octave-forge/main/bioinfo/inst/aminolookup.m trunk/octave-forge/main/bioinfo/inst/int2aa.m Added: trunk/octave-forge/main/bioinfo/COPYING =================================================================== --- trunk/octave-forge/main/bioinfo/COPYING (rev 0) +++ trunk/octave-forge/main/bioinfo/COPYING 2008-03-29 19:57:33 UTC (rev 4832) @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 19yy <name of author> + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. Added: trunk/octave-forge/main/bioinfo/DESCRIPTION =================================================================== --- trunk/octave-forge/main/bioinfo/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/bioinfo/DESCRIPTION 2008-03-29 19:57:33 UTC (rev 4832) @@ -0,0 +1,12 @@ +Name: bioinfo +Version: 0.1.0 +Date: 2007-03-28 +Author: Bill Denney <bi...@de...> +Maintainer: Bill Denney <bi...@de...> +Title: Bioinformatics +Description: Bioinformatics manipulation +Categories: Bioinformatics +Depends: octave (>= 3.0.0) +Autoload: yes +License: GPL version 2 or later +Url: http://octave.sf.net Added: trunk/octave-forge/main/bioinfo/inst/aa2int.m =================================================================== --- trunk/octave-forge/main/bioinfo/inst/aa2int.m (rev 0) +++ trunk/octave-forge/main/bioinfo/inst/aa2int.m 2008-03-29 19:57:33 UTC (rev 4832) @@ -0,0 +1,49 @@ +## Copyright (C) 2008 Bill Denney +## +## This software 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 3 of the License, or (at +## your option) any later version. +## +## This software 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 software; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{sequenceint} =} aa2int (@var{sequencechar}) +## Convert amino acid characters into integers. See @code{aminolookup} +## for the listing of numbers and their corresponding characters. +## @seealso{aminolookup,int2aa,int2nt,nt2int} +## @end deftypefn + +## Author: Bill Denney <bi...@de...> + +function seqi = aa2int (seqc=0) + + if (! ischar (seqc)) + print_usage (); + endif + sequences = aminolookup ("code", []); + + seqi = -ones (size (seqc)); + seqc = upper (seqc); + for i = 1:numel (sequences) + seqi(sequences(i) == seqc) = i; + endfor + if any (seqi(:) < 0) + idx = find (seqi(:) < 0, 1); + error ("aa2int: unrecognised character (%s) in sequence input at position (%d)", + seqc(idx), idx) + endif + +endfunction + +## Tests +%!assert (aa2int ("a"), 1) +%!assert (aa2int ("ar"), [1 2]) +%!assert (aa2int (["ar"]'), [1;2]) Added: trunk/octave-forge/main/bioinfo/inst/aminolookup.m =================================================================== --- trunk/octave-forge/main/bioinfo/inst/aminolookup.m (rev 0) +++ trunk/octave-forge/main/bioinfo/inst/aminolookup.m 2008-03-29 19:57:33 UTC (rev 4832) @@ -0,0 +1,223 @@ +## Copyright (C) 2008 Bill Denney +## +## This software 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 3 of the License, or (at +## your option) any later version. +## +## This software 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 software; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} aminolookup () +## @deftypefnx {Function File} {@var{aminodesc} =} aminolookup (@var{seq}) +## @deftypefnx {Function File} {@var{aminodesc} =} aminolookup (@var{searchtype}, @var{seq}) +## Convert between amino acid representations. The types of input are +## +## @itemize @bullet +## @item Name +## +## The amino acid name +## @item Code +## +## The amino acid single letter code +## @item Abbreviation +## +## The three letter abbreviation for the amino acid +## @item Integer +## +## The number representation of the amino acid +## @end itemize +## +## To see the full list of each of the above, run this function without +## any arguments or outputs. +## + +## If called without zero inputs, this will display the mapping between +## the above types. If called with one input, it will convert to code by default or + +## @seealso{aa2int,int2aa,int2nt,nt2int} +## @end deftypefn + +## Author: Bill Denney <bi...@de...> + +function result = aminolookup (varargin) + + persistent code num abbr name seq + + if isempty (code) + code = "ARNDCQEGHILKMFPSTWYVBZX*-"; + num = 1:25; + abbr = {"Ala" "Arg" "Asn" "Asp" "Cys" "Gln" "Glu" "Gly" "His" "Ile" \ + "Leu" "Lys" "Met" "Phe" "Pro" "Ser" "Thr" "Trp" "Tyr" "Val" \ + "Asx" "Glx" "Xaa" "END" "GAP"}; + + name = cell (numel (code), 3); + name = {"Alanine" "Arginine" "Asparagine" "Aspartic acid" "Cysteine" \ + "Glutamine" "Glutamic acid" "Glycine" "Histidine" \ + "Isoleucine" "Leucine" "Lysine" "Methionine" "Phenylalanine" \ + "Proline" "Serine" "Threonine" "Tryptophan" "Tyrosine" \ + "Valine" "Asparagine" "Glutamine" "Any amino acid" \ + "Termination codon (translation stop)" \ + "Gap of unknown length"}'; + ## Alternate names + name{4,2} = "Aspartate"; + name{7,2} = "Glutamate"; + name{21,2} = "Aspartic acid"; + name{22,2} = "Glutamic acid"; + name{21,3} = "Aspartate"; + name{22,3} = "Glutamate"; + for i = 1:numel (name) + if isempty (name{i}) + name{i} = ""; + endif + endfor + + seq = {"GCU GCC GCA GCG" "CGU CGC CGA CGG AGA AGG" "AAU AAC" "GAU GAC" \ + "UGU UGC" "CAA CAG" "GAA GAG" "GGU GGC GGA GGG" "CAU CAC" \ + "AUU AUC AUA" "UUA UUG CUU CUC CUA CUG" "AAA AAG" "AUG" \ + "UUU UUC" "CCU CCC CCA CCG" "UCU UCC UCA UCG AGU AGC" \ + "ACU ACC ACA ACG" "UGG" "UAU UAC" "GUU GUC GUA GUG" \ + "AAU AAC GAU GAC" "CAA CAG GAA GAG" "All codons" "UAA UAG UGA" \ + "NA"}; + endif + + searchtype = ""; + value = ""; + + if (nargin == 0) + n = cell (rows (name), 4); + n(:,1) = name(:,1); + for i = 1:rows (name) + for j = 2:columns (name) + if (! isempty (name{i,j})) + n{i,1} = sprintf ("%s or %s", n{i,1}, name{i,j}); + endif + endfor + n{i,2} = num2str (i); + n{i,3} = code(i); + n{i,4} = seq{i}; + endfor + s = max (cellfun (@numel, n)); + fmt = sprintf ("%%-%ds ", s(1), s(2), s(3), s(4)); + for i = 1:rows (n) + printf ([fmt "\n"], n{i,:}); + endfor + elseif (nargin == 1) + showmany = 1; + if isnumeric (varargin{1}) + ## this is an extension of the matlab options + searchtype = "integer"; + elseif ischar (varargin{1}) + if ((mod (numel (varargin{1}), 3) == 0) && + (find (isupper (varargin{1})) == 1:3:numel (varargin{1}))) + ## if the number of characters is divisible by 3 and exactly + ## every third character is upper case + searchtype = "abbreviation"; + else + searchtype = "code"; + endif + endif + value = varargin{1}; + else + showmany = 0; + searchtype = lower (varargin{1}); + value = varargin{2}; + endif + + if (rows (value) > 1) + error ("aminolookup: value may only be one row") + endif + + if (showmany == 1) + ## we need to convert many inputs into one output. First convert + ## the input value into the integer form. + switch lower (searchtype) + case "code" + value = upper (value); + newvalue = -ones (size (value)); + for i = 1:numel (code) + newvalue(value(:) == code(i)) = i; + endfor + outtype = "abbreviation"; + case "abbreviation" + newvalue = -ones (1, numel (value)/3); + for i = 1:3:numel (value) + newvalue((i-1)/3+1) = find (strcmp (value(i:i+2), abbr), 1); + endfor + outtype = "code"; + case "integer" + newvalue = value; + outtype = "code"; + otherwise + error (["aninolookup: cannot convert multiple arguments of any type\n" + "but code, abbreviation, or integer"]); + endswitch + if (any (newvalue(:)) < 0) + idx = find ((newvalue < 0) | (newvalue > numel (num)), 1); + error ("aminolookup: unrecognised symbol in input at position %d", idx); + endif + + switch outtype + case "code" + result = code(newvalue); + case "abbreviation" + result = strcat(abbr{newvalue}); + otherwise + error ("aminolookup: invalid output type") + endswitch + elseif (showmany == 0) + ## we're only showing one value + switch lower (searchtype) + case "integer" + if isempty (value) + result = ints; + else + result = sprintf ("%s %s %s", code(value), abbr(value), name(value)); + endif + case "code" + if isempty (value) + result = code; + else + idx = find (lower (value) == lower(code), 1); + result = sprintf ("%s %s", abbr{idx}, name{idx}); + endif + case "abbreviation" + if isempty (value) + result = abbr; + else + idx = find (strcmpi (value, abbr)); + result = sprintf ("%s %s", code(idx), name{idx}); + endif + case "name" + if isempty (value) + result = name; + else + [idx whocares] = find (strcmpi (value, name), 1); + result = sprintf ("%s %s", code(idx), abbr{idx}); + endif + otherwise + error ("aminolookup: invalid search type, %s", searchtype) + endswitch + endif + +endfunction + +## Tests +%!shared code, abbr, ints +%! code = "MWKQAEDIRDIYDF"; +%! abbr = "MetTrpLysGlnAlaGluAspIleArgAspIleTyrAspPhe"; +%! ints = [13 18 12 6 1 7 4 10 2 4 10 19 4 14]; +%!assert (aminolookup(code), abbr) +%!assert (aminolookup(abbr), code) +%!assert (aminolookup(ints), code) +%!assert (aminolookup("Code", "R"), "Arg Arginine") +%!assert (aminolookup("Integer", 1), "A Ala Alanine") +%!assert (aminolookup("Abbreviation", "asn"), "N Asparagine") +%!assert (aminolookup("Name", "proline"), "P Pro") Added: trunk/octave-forge/main/bioinfo/inst/int2aa.m =================================================================== --- trunk/octave-forge/main/bioinfo/inst/int2aa.m (rev 0) +++ trunk/octave-forge/main/bioinfo/inst/int2aa.m 2008-03-29 19:57:33 UTC (rev 4832) @@ -0,0 +1,38 @@ +## Copyright (C) 2008 Bill Denney +## +## This software 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 3 of the License, or (at +## your option) any later version. +## +## This software 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 software; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{sequencechar} =} int2aa (@var{sequenceint}) +## Convert amino acid integers into characters. See @code{aminolookup} +## for the listing of numbers and their corresponding characters. +## @seealso{aminolookup,aa2int,int2nt,nt2int} +## @end deftypefn + +## Author: Bill Denney <bi...@de...> + +function seqc = int2aa (seqi) + + if (! isnumeric (seqi)) + print_usage (); + endif + sequences = aminolookup ("code", []); + seqc = reshape (sequences(seqi), size (seqi)); +endfunction + +## Tests +%!assert (int2aa (1), "A") +%!assert (int2aa ([1 2]), "AR"); +%!assert (int2aa ([1;2]), ["A";"R"]) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <xav...@us...> - 2008-03-29 02:11:08
|
Revision: 4830 http://octave.svn.sourceforge.net/octave/?rev=4830&view=rev Author: xavier98 Date: 2008-03-28 19:11:12 -0700 (Fri, 28 Mar 2008) Log Message: ----------- Submit pre-generated SWIG targets, so having SWIG installed is not necessary to build/install packages that depend on it. One can regenerate wrappers via ./autogen.sh && PATH=/path/to/swig/bin:$PATH ./configure --with-swig && make Modified Paths: -------------- trunk/octave-forge/main/ann/src/Makeconf.in trunk/octave-forge/main/ann/src/ann/bindings/Makefile trunk/octave-forge/main/ann/src/configure.base trunk/octave-forge/main/database/src/Makeconf.in trunk/octave-forge/main/database/src/Makefile trunk/octave-forge/main/database/src/configure.base trunk/octave-forge/main/ftp/src/Makeconf.in trunk/octave-forge/main/ftp/src/Makefile trunk/octave-forge/main/ftp/src/configure.base Added Paths: ----------- trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp trunk/octave-forge/main/database/src/mysql_wrap.cpp trunk/octave-forge/main/database/src/odbc_wrap.cpp trunk/octave-forge/main/database/src/postgres_wrap.cpp trunk/octave-forge/main/database/src/sqlite3_wrap.cpp trunk/octave-forge/main/ftp/src/ftp_wrap.cpp Modified: trunk/octave-forge/main/ann/src/Makeconf.in =================================================================== --- trunk/octave-forge/main/ann/src/Makeconf.in 2008-03-28 20:59:50 UTC (rev 4829) +++ trunk/octave-forge/main/ann/src/Makeconf.in 2008-03-29 02:11:12 UTC (rev 4830) @@ -61,7 +61,7 @@ ALTMPATH = @altmpath@ ALTOPATH = @altopath@ -SWIG = @swigpath@ +SWIG = @SWIG@ %.o: %.c ; $(MKOCTFILE) -c $< %.o: %.f ; $(MKOCTFILE) -c $< Modified: trunk/octave-forge/main/ann/src/ann/bindings/Makefile =================================================================== --- trunk/octave-forge/main/ann/src/ann/bindings/Makefile 2008-03-28 20:59:50 UTC (rev 4829) +++ trunk/octave-forge/main/ann/src/ann/bindings/Makefile 2008-03-29 02:11:12 UTC (rev 4830) @@ -1,12 +1,15 @@ -#SWIG=~/swig/preinst-swig bindings-octave: ann.oct -ann.oct: ann.i ../include/ANN/ANN.h ../include/ANN/ANNperf.h ../include/ANN/ANNx.h - $(SWIG) -c++ -octave -o ann_wrap.cpp ann.i +ann.oct: ann_wrap.cpp ../include/ANN/ANN.h ../include/ANN/ANNperf.h ../include/ANN/ANNx.h $(MKOCTFILE) -o ann.oct -I../include -L../lib -lANN ann_wrap.cpp +ifdef SWIG +ann_wrap.cpp: ann.i + $(SWIG) -c++ -octave -o ann_wrap.cpp ann.i +endif + clean: - rm -f *.oct *.o *_wrap* *~ octave-core + rm -f *.oct *.o *~ octave-core OCTAVE_TEST_CASES = \ Added: trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp =================================================================== --- trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp (rev 0) +++ trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp 2008-03-29 02:11:12 UTC (rev 4830) @@ -0,0 +1,9485 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 1.3.34 + * + * This file is not intended to be easily readable and contains a number of + * coding conventions designed to improve portability and efficiency. Do not make + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. + * ----------------------------------------------------------------------------- */ + +#define SWIG_name_d "ann" +#define SWIG_name ann + +#ifdef __cplusplus +template<typename T> class SwigValueWrapper { + T *tt; +public: + SwigValueWrapper() : tt(0) { } + SwigValueWrapper(const SwigValueWrapper<T>& rhs) : tt(new T(*rhs.tt)) { } + SwigValueWrapper(const T& t) : tt(new T(t)) { } + ~SwigValueWrapper() { delete tt; } + SwigValueWrapper& operator=(const T& t) { delete tt; tt = new T(t); return *this; } + operator T&() const { return *tt; } + T *operator&() { return tt; } +private: + SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs); +}; + +template <typename T> T SwigValueInit() { + return T(); +} +#endif + +/* ----------------------------------------------------------------------------- + * This section contains generic SWIG labels for method/variable + * declarations/attributes, and other compiler dependent labels. + * ----------------------------------------------------------------------------- */ + +/* template workaround for compilers that cannot correctly implement the C++ standard */ +#ifndef SWIGTEMPLATEDISAMBIGUATOR +# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) +# define SWIGTEMPLATEDISAMBIGUATOR template +# elif defined(__HP_aCC) +/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ +/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ +# define SWIGTEMPLATEDISAMBIGUATOR template +# else +# define SWIGTEMPLATEDISAMBIGUATOR +# endif +#endif + +/* inline attribute */ +#ifndef SWIGINLINE +# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) +# define SWIGINLINE inline +# else +# define SWIGINLINE +# endif +#endif + +/* attribute recognised by some compilers to avoid 'unused' warnings */ +#ifndef SWIGUNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +# elif defined(__ICC) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +#endif + +#ifndef SWIGUNUSEDPARM +# ifdef __cplusplus +# define SWIGUNUSEDPARM(p) +# else +# define SWIGUNUSEDPARM(p) p SWIGUNUSED +# endif +#endif + +/* internal SWIG method */ +#ifndef SWIGINTERN +# define SWIGINTERN static SWIGUNUSED +#endif + +/* internal inline SWIG method */ +#ifndef SWIGINTERNINLINE +# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE +#endif + +/* exporting methods */ +#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) +# ifndef GCC_HASCLASSVISIBILITY +# define GCC_HASCLASSVISIBILITY +# endif +#endif + +#ifndef SWIGEXPORT +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# if defined(STATIC_LINKED) +# define SWIGEXPORT +# else +# define SWIGEXPORT __declspec(dllexport) +# endif +# else +# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) +# define SWIGEXPORT __attribute__ ((visibility("default"))) +# else +# define SWIGEXPORT +# endif +# endif +#endif + +/* calling conventions for Windows */ +#ifndef SWIGSTDCALL +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# define SWIGSTDCALL __stdcall +# else +# define SWIGSTDCALL +# endif +#endif + +/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ +#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) +# define _CRT_SECURE_NO_DEPRECATE +#endif + +/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ +#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) +# define _SCL_SECURE_NO_DEPRECATE +#endif + + + +#include <octave/oct.h> +#include <octave/parse.h> +#include <octave/ov-fcn-handle.h> +#include <octave/Cell.h> + +/* ----------------------------------------------------------------------------- + * swigrun.swg + * + * This file contains generic CAPI SWIG runtime support for pointer + * type checking. + * ----------------------------------------------------------------------------- */ + +/* This should only be incremented when either the layout of swig_type_info changes, + or for whatever reason, the runtime changes incompatibly */ +#define SWIG_RUNTIME_VERSION "4" + +/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */ +#ifdef SWIG_TYPE_TABLE +# define SWIG_QUOTE_STRING(x) #x +# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x) +# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE) +#else +# define SWIG_TYPE_TABLE_NAME +#endif + +/* + You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for + creating a static or dynamic library from the swig runtime code. + In 99.9% of the cases, swig just needs to declare them as 'static'. + + But only do this if is strictly necessary, ie, if you have problems + with your compiler or so. +*/ + +#ifndef SWIGRUNTIME +# define SWIGRUNTIME SWIGINTERN +#endif + +#ifndef SWIGRUNTIMEINLINE +# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE +#endif + +/* Generic buffer size */ +#ifndef SWIG_BUFFER_SIZE +# define SWIG_BUFFER_SIZE 1024 +#endif + +/* Flags for pointer conversions */ +#define SWIG_POINTER_DISOWN 0x1 +#define SWIG_CAST_NEW_MEMORY 0x2 + +/* Flags for new pointer objects */ +#define SWIG_POINTER_OWN 0x1 + + +/* + Flags/methods for returning states. + + The swig conversion methods, as ConvertPtr, return and integer + that tells if the conversion was successful or not. And if not, + an error code can be returned (see swigerrors.swg for the codes). + + Use the following macros/flags to set or process the returning + states. + + In old swig versions, you usually write code as: + + if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { + // success code + } else { + //fail code + } + + Now you can be more explicit as: + + int res = SWIG_ConvertPtr(obj,vptr,ty.flags); + if (SWIG_IsOK(res)) { + // success code + } else { + // fail code + } + + that seems to be the same, but now you can also do + + Type *ptr; + int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags); + if (SWIG_IsOK(res)) { + // success code + if (SWIG_IsNewObj(res) { + ... + delete *ptr; + } else { + ... + } + } else { + // fail code + } + + I.e., now SWIG_ConvertPtr can return new objects and you can + identify the case and take care of the deallocation. Of course that + requires also to SWIG_ConvertPtr to return new result values, as + + int SWIG_ConvertPtr(obj, ptr,...) { + if (<obj is ok>) { + if (<need new object>) { + *ptr = <ptr to new allocated object>; + return SWIG_NEWOBJ; + } else { + *ptr = <ptr to old object>; + return SWIG_OLDOBJ; + } + } else { + return SWIG_BADOBJ; + } + } + + Of course, returning the plain '0(success)/-1(fail)' still works, but you can be + more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the + swig errors code. + + Finally, if the SWIG_CASTRANK_MODE is enabled, the result code + allows to return the 'cast rank', for example, if you have this + + int food(double) + int fooi(int); + + and you call + + food(1) // cast rank '1' (1 -> 1.0) + fooi(1) // cast rank '0' + + just use the SWIG_AddCast()/SWIG_CheckState() + + + */ +#define SWIG_OK (0) +#define SWIG_ERROR (-1) +#define SWIG_IsOK(r) (r >= 0) +#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) + +/* The CastRankLimit says how many bits are used for the cast rank */ +#define SWIG_CASTRANKLIMIT (1 << 8) +/* The NewMask denotes the object was created (using new/malloc) */ +#define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1) +/* The TmpMask is for in/out typemaps that use temporal objects */ +#define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1) +/* Simple returning values */ +#define SWIG_BADOBJ (SWIG_ERROR) +#define SWIG_OLDOBJ (SWIG_OK) +#define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK) +#define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK) +/* Check, add and del mask methods */ +#define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r) +#define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r) +#define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK)) +#define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r) +#define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r) +#define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK)) + + +/* Cast-Rank Mode */ +#if defined(SWIG_CASTRANK_MODE) +# ifndef SWIG_TypeRank +# define SWIG_TypeRank unsigned long +# endif +# ifndef SWIG_MAXCASTRANK /* Default cast allowed */ +# define SWIG_MAXCASTRANK (2) +# endif +# define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1) +# define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK) +SWIGINTERNINLINE int SWIG_AddCast(int r) { + return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; +} +SWIGINTERNINLINE int SWIG_CheckState(int r) { + return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; +} +#else /* no cast-rank mode */ +# define SWIG_AddCast +# define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0) +#endif + + + + +#include <string.h> + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void *(*swig_converter_func)(void *, int *); +typedef struct swig_type_info *(*swig_dycast_func)(void **); + +/* Structure to store information on one type */ +typedef struct swig_type_info { + const char *name; /* mangled name of this type */ + const char *str; /* human readable name of this type */ + swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ + struct swig_cast_info *cast; /* linked list of types that can cast into this type */ + void *clientdata; /* language specific type data */ + int owndata; /* flag if the structure owns the clientdata */ +} swig_type_info; + +/* Structure to store a type and conversion function used for casting */ +typedef struct swig_cast_info { + swig_type_info *type; /* pointer to type that is equivalent to this type */ + swig_converter_func converter; /* function to cast the void pointers */ + struct swig_cast_info *next; /* pointer to next cast in linked list */ + struct swig_cast_info *prev; /* pointer to the previous cast */ +} swig_cast_info; + +/* Structure used to store module information + * Each module generates one structure like this, and the runtime collects + * all of these structures and stores them in a circularly linked list.*/ +typedef struct swig_module_info { + swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ + size_t size; /* Number of types in this module */ + struct swig_module_info *next; /* Pointer to next element in circularly linked list */ + swig_type_info **type_initial; /* Array of initially generated type structures */ + swig_cast_info **cast_initial; /* Array of initially generated casting structures */ + void *clientdata; /* Language specific module data */ +} swig_module_info; + +/* + Compare two type names skipping the space characters, therefore + "char*" == "char *" and "Class<int>" == "Class<int >", etc. + + Return 0 when the two name types are equivalent, as in + strncmp, but skipping ' '. +*/ +SWIGRUNTIME int +SWIG_TypeNameComp(const char *f1, const char *l1, + const char *f2, const char *l2) { + for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { + while ((*f1 == ' ') && (f1 != l1)) ++f1; + while ((*f2 == ' ') && (f2 != l2)) ++f2; + if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1; + } + return (int)((l1 - f1) - (l2 - f2)); +} + +/* + Check type equivalence in a name list like <name1>|<name2>|... + Return 0 if not equal, 1 if equal +*/ +SWIGRUNTIME int +SWIG_TypeEquiv(const char *nb, const char *tb) { + int equiv = 0; + const char* te = tb + strlen(tb); + const char* ne = nb; + while (!equiv && *ne) { + for (nb = ne; *ne; ++ne) { + if (*ne == '|') break; + } + equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; + if (*ne) ++ne; + } + return equiv; +} + +/* + Check type equivalence in a name list like <name1>|<name2>|... + Return 0 if equal, -1 if nb < tb, 1 if nb > tb +*/ +SWIGRUNTIME int +SWIG_TypeCompare(const char *nb, const char *tb) { + int equiv = 0; + const char* te = tb + strlen(tb); + const char* ne = nb; + while (!equiv && *ne) { + for (nb = ne; *ne; ++ne) { + if (*ne == '|') break; + } + equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; + if (*ne) ++ne; + } + return equiv; +} + + +/* think of this as a c++ template<> or a scheme macro */ +#define SWIG_TypeCheck_Template(comparison, ty) \ + if (ty) { \ + swig_cast_info *iter = ty->cast; \ + while (iter) { \ + if (comparison) { \ + if (iter == ty->cast) return iter; \ + /* Move iter to the top of the linked list */ \ + iter->prev->next = iter->next; \ + if (iter->next) \ + iter->next->prev = iter->prev; \ + iter->next = ty->cast; \ + iter->prev = 0; \ + if (ty->cast) ty->cast->prev = iter; \ + ty->cast = iter; \ + return iter; \ + } \ + iter = iter->next; \ + } \ + } \ + return 0 + +/* + Check the typename +*/ +SWIGRUNTIME swig_cast_info * +SWIG_TypeCheck(const char *c, swig_type_info *ty) { + SWIG_TypeCheck_Template(strcmp(iter->type->name, c) == 0, ty); +} + +/* Same as previous function, except strcmp is replaced with a pointer comparison */ +SWIGRUNTIME swig_cast_info * +SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *into) { + SWIG_TypeCheck_Template(iter->type == from, into); +} + +/* + Cast a pointer up an inheritance hierarchy +*/ +SWIGRUNTIMEINLINE void * +SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) { + return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory); +} + +/* + Dynamic pointer casting. Down an inheritance hierarchy +*/ +SWIGRUNTIME swig_type_info * +SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { + swig_type_info *lastty = ty; + if (!ty || !ty->dcast) return ty; + while (ty && (ty->dcast)) { + ty = (*ty->dcast)(ptr); + if (ty) lastty = ty; + } + return lastty; +} + +/* + Return the name associated with this type +*/ +SWIGRUNTIMEINLINE const char * +SWIG_TypeName(const swig_type_info *ty) { + return ty->name; +} + +/* + Return the pretty name associated with this type, + that is an unmangled type name in a form presentable to the user. +*/ +SWIGRUNTIME const char * +SWIG_TypePrettyName(const swig_type_info *type) { + /* The "str" field contains the equivalent pretty names of the + type, separated by vertical-bar characters. We choose + to print the last name, as it is often (?) the most + specific. */ + if (!type) return NULL; + if (type->str != NULL) { + const char *last_name = type->str; + const char *s; + for (s = type->str; *s; s++) + if (*s == '|') last_name = s+1; + return last_name; + } + else + return type->name; +} + +/* + Set the clientdata field for a type +*/ +SWIGRUNTIME void +SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { + swig_cast_info *cast = ti->cast; + /* if (ti->clientdata == clientdata) return; */ + ti->clientdata = clientdata; + + while (cast) { + if (!cast->converter) { + swig_type_info *tc = cast->type; + if (!tc->clientdata) { + SWIG_TypeClientData(tc, clientdata); + } + } + cast = cast->next; + } +} +SWIGRUNTIME void +SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) { + SWIG_TypeClientData(ti, clientdata); + ti->owndata = 1; +} + +/* + Search for a swig_type_info structure only by mangled name + Search is a O(log #types) + + We start searching at module start, and finish searching when start == end. + Note: if start == end at the beginning of the function, we go all the way around + the circular list. +*/ +SWIGRUNTIME swig_type_info * +SWIG_MangledTypeQueryModule(swig_module_info *start, + swig_module_info *end, + const char *name) { + swig_module_info *iter = start; + do { + if (iter->size) { + register size_t l = 0; + register size_t r = iter->size - 1; + do { + /* since l+r >= 0, we can (>> 1) instead (/ 2) */ + register size_t i = (l + r) >> 1; + const char *iname = iter->types[i]->name; + if (iname) { + register int compare = strcmp(name, iname); + if (compare == 0) { + return iter->types[i]; + } else if (compare < 0) { + if (i) { + r = i - 1; + } else { + break; + } + } else if (compare > 0) { + l = i + 1; + } + } else { + break; /* should never happen */ + } + } while (l <= r); + } + iter = iter->next; + } while (iter != end); + return 0; +} + +/* + Search for a swig_type_info structure for either a mangled name or a human readable name. + It first searches the mangled names of the types, which is a O(log #types) + If a type is not found it then searches the human readable names, which is O(#types). + + We start searching at module start, and finish searching when start == end. + Note: if start == end at the beginning of the function, we go all the way around + the circular list. +*/ +SWIGRUNTIME swig_type_info * +SWIG_TypeQueryModule(swig_module_info *start, + swig_module_info *end, + const char *name) { + /* STEP 1: Search the name field using binary search */ + swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); + if (ret) { + return ret; + } else { + /* STEP 2: If the type hasn't been found, do a complete search + of the str field (the human readable name) */ + swig_module_info *iter = start; + do { + register size_t i = 0; + for (; i < iter->size; ++i) { + if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) + return iter->types[i]; + } + iter = iter->next; + } while (iter != end); + } + + /* neither found a match */ + return 0; +} + +/* + Pack binary data into a string +*/ +SWIGRUNTIME char * +SWIG_PackData(char *c, void *ptr, size_t sz) { + static const char hex[17] = "0123456789abcdef"; + register const unsigned char *u = (unsigned char *) ptr; + register const unsigned char *eu = u + sz; + for (; u != eu; ++u) { + register unsigned char uu = *u; + *(c++) = hex[(uu & 0xf0) >> 4]; + *(c++) = hex[uu & 0xf]; + } + return c; +} + +/* + Unpack binary data from a string +*/ +SWIGRUNTIME const char * +SWIG_UnpackData(const char *c, void *ptr, size_t sz) { + register unsigned char *u = (unsigned char *) ptr; + register const unsigned char *eu = u + sz; + for (; u != eu; ++u) { + register char d = *(c++); + register unsigned char uu; + if ((d >= '0') && (d <= '9')) + uu = ((d - '0') << 4); + else if ((d >= 'a') && (d <= 'f')) + uu = ((d - ('a'-10)) << 4); + else + return (char *) 0; + d = *(c++); + if ((d >= '0') && (d <= '9')) + uu |= (d - '0'); + else if ((d >= 'a') && (d <= 'f')) + uu |= (d - ('a'-10)); + else + return (char *) 0; + *u = uu; + } + return c; +} + +/* + Pack 'void *' into a string buffer. +*/ +SWIGRUNTIME char * +SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { + char *r = buff; + if ((2*sizeof(void *) + 2) > bsz) return 0; + *(r++) = '_'; + r = SWIG_PackData(r,&ptr,sizeof(void *)); + if (strlen(name) + 1 > (bsz - (r - buff))) return 0; + strcpy(r,name); + return buff; +} + +SWIGRUNTIME const char * +SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { + if (*c != '_') { + if (strcmp(c,"NULL") == 0) { + *ptr = (void *) 0; + return name; + } else { + return 0; + } + } + return SWIG_UnpackData(++c,ptr,sizeof(void *)); +} + +SWIGRUNTIME char * +SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { + char *r = buff; + size_t lname = (name ? strlen(name) : 0); + if ((2*sz + 2 + lname) > bsz) return 0; + *(r++) = '_'; + r = SWIG_PackData(r,ptr,sz); + if (lname) { + strncpy(r,name,lname+1); + } else { + *r = 0; + } + return buff; +} + +SWIGRUNTIME const char * +SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { + if (*c != '_') { + if (strcmp(c,"NULL") == 0) { + memset(ptr,0,sz); + return name; + } else { + return 0; + } + } + return SWIG_UnpackData(++c,ptr,sz); +} + +#ifdef __cplusplus +} +#endif + +/* Errors in SWIG */ +#define SWIG_UnknownError -1 +#define SWIG_IOError -2 +#define SWIG_RuntimeError -3 +#define SWIG_IndexError -4 +#define SWIG_TypeError -5 +#define SWIG_DivisionByZero -6 +#define SWIG_OverflowError -7 +#define SWIG_SyntaxError -8 +#define SWIG_ValueError -9 +#define SWIG_SystemError -10 +#define SWIG_AttributeError -11 +#define SWIG_MemoryError -12 +#define SWIG_NullReferenceError -13 + + + + + +SWIGRUNTIME bool SWIG_check_num_args(const char *func_name, int num_args, int max_args, int min_args, int varargs) { + if (num_args > max_args && !varargs) + error("function %s takes at most %i arguments", func_name, max_args); + else if (num_args < min_args) + error("function %s requires at least %i arguments", func_name, max_args); + else + return true; + return false; +} + +SWIGRUNTIME octave_value_list *SWIG_Octave_AppendOutput(octave_value_list *ovl, const octave_value &ov) { + ovl->append(ov); + return ovl; +} + +SWIGRUNTIME octave_value SWIG_ErrorType(int code) { + switch (code) { + case SWIG_MemoryError: + return "SWIG_MemoryError"; + case SWIG_IOError: + return "SWIG_IOError"; + case SWIG_RuntimeError: + return "SWIG_RuntimeError"; + case SWIG_IndexError: + return "SWIG_IndexError"; + case SWIG_TypeError: + return "SWIG_TypeError"; + case SWIG_DivisionByZero: + return "SWIG_DivisionByZero"; + case SWIG_OverflowError: + return "SWIG_OverflowError"; + case SWIG_SyntaxError: + return "SWIG_SyntaxError"; + case SWIG_ValueError: + return "SWIG_ValueError"; + case SWIG_SystemError: + return "SWIG_SystemError"; + case SWIG_AttributeError: + return "SWIG_AttributeError"; + } + return "SWIG unknown error"; +} + +SWIGRUNTIME octave_value SWIG_Error(int code, const char *msg) { + octave_value type(SWIG_ErrorType(code)); + std::string r = msg; + r += " (" + type.string_value() + ")"; + error(r.c_str()); + return octave_value(r); +} + +#define SWIG_fail goto fail + +#define SWIG_Octave_ConvertPtr(obj, pptr, type, flags) SWIG_Octave_ConvertPtrAndOwn(obj, pptr, type, flags, 0) +#define SWIG_ConvertPtr(obj, pptr, type, flags) SWIG_Octave_ConvertPtr(obj, pptr, type, flags) +#define SWIG_ConvertPtrAndOwn(obj,pptr,type,flags,own) SWIG_Octave_ConvertPtrAndOwn(obj, pptr, type, flags, own) +#define SWIG_ConvertPtr(obj, pptr, type, flags) SWIG_Octave_ConvertPtr(obj, pptr, type, flags) +#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Octave_NewPointerObj(ptr, type, flags) +#define swig_owntype int + +#define SWIG_ConvertPacked(obj, ptr, sz, ty) SWIG_Octave_ConvertPacked(obj, ptr, sz, ty) +#define SWIG_NewPackedObj(ptr, sz, type) SWIG_Octave_NewPackedObj(ptr, sz, type) + +#define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_ConvertPtr(obj, pptr, type, 0) +#define SWIG_NewFunctionPtrObj(ptr, type) SWIG_NewPointerObj(ptr, type, 0) + +#define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_Octave_ConvertPacked(obj, ptr, sz, ty) +#define SWIG_NewMemberObj(ptr, sz, type) SWIG_Octave_NewPackedObj(ptr, sz, type) + +#define SWIG_GetModule(clientdata) SWIG_Octave_GetModule(clientdata) +#define SWIG_SetModule(clientdata, pointer) SWIG_Octave_SetModule(clientdata,pointer); +#define SWIG_MODULE_CLIENTDATA_TYPE void* + +#define Octave_Error_Occurred() 0 +#define SWIG_Octave_AddErrorMsg(msg) {;} + +// For backward compatibility only +#define SWIG_POINTER_EXCEPTION 0 +#define SWIG_arg_fail(arg) 0 + +SWIGRUNTIME swig_module_info *SWIG_Octave_GetModule(void *clientdata) { + octave_value tmp = get_global_value("__SWIG_MODULE__", true); + if (!tmp.is_defined() || !tmp.is_uint64_type()) + return 0; + unsigned long r = tmp.uint64_scalar_value().value(); + assert(sizeof(r) == sizeof(swig_module_info *)); + return (swig_module_info *) r; +} + +SWIGRUNTIME void SWIG_Octave_SetModule(void *clientdata, swig_module_info *pointer) { + unsigned long r = (unsigned long) pointer; + assert(sizeof(r) == sizeof(swig_module_info *)); + const char *module_var = "__SWIG_MODULE__"; + link_to_global_variable(curr_sym_tab->lookup(module_var, true)); + set_global_value(module_var, octave_uint64(r)); +} + +// Runtime API implementation + +#include <map> +#include <vector> +#include <string> +#include <ext/hash_map> + +namespace { + + typedef octave_value_list(*octave_func) (const octave_value_list &, int); + class octave_swig_type; + + namespace Swig { + class Director; + + void swig_register_director(octave_swig_type *self, void *ptr, Director *d); + void swig_director_destroyed(octave_swig_type *self, Director *d); + void swig_director_set_self(Director *d, octave_swig_type *self); + + octave_base_value *swig_value_ref(octave_swig_type *ost); + octave_swig_type *swig_value_deref(const octave_value &ov); + octave_swig_type *swig_value_deref(const octave_base_value &ov); + + struct hash_voidptr { + int operator() (void *p) const { + return (int) p; + } + }; + typedef __gnu_cxx::hash_map < void *, Director *, hash_voidptr > rtdir_map; + + using namespace __gnu_cxx; + SWIGINTERN rtdir_map &get_rtdir_map() { + static swig_module_info *module = 0; + if (!module) + module = SWIG_GetModule(0); + assert(module); + if (!module->clientdata) + module->clientdata = new rtdir_map; + return *(rtdir_map *) module->clientdata; + } + + SWIGINTERNINLINE void set_rtdir(void *vptr, Director *d) { + get_rtdir_map()[vptr] = d; + } + + SWIGINTERNINLINE void erase_rtdir(void *vptr) { + get_rtdir_map().erase(vptr); + } + + SWIGINTERNINLINE Director *get_rtdir(void *vptr) { + rtdir_map::const_iterator pos = get_rtdir_map().find(vptr); + Director *rtdir = (pos != get_rtdir_map().end())? pos->second : 0; + return rtdir; + } + } + + struct swig_octave_member { + const char *name; + octave_func method; + octave_func get_method; + octave_func set_method; + int flags; // 1 static, 2 global + const char *doc; + bool is_static() const { + return flags &1; + } bool is_global() const { + return flags &2; + } + }; + + struct swig_octave_class { + const char *name; + swig_type_info **type; + int director; + octave_func constructor; + octave_func destructor; + const swig_octave_member *members; + const char **base_names; + const swig_type_info **base; + }; + + // octave_swig_type plays the role of both the shadow class and the class + // representation within Octave, since there is no support for classes. + // + // These should really be decoupled, with the class support added to Octave + // and the shadow class given by an m-file script. That would dramatically + // reduce the runtime complexity, and be more in line w/ other modules. + + class octave_swig_type:public octave_base_value { + struct cpp_ptr { + void *ptr; + bool destroyed; + cpp_ptr(void *_ptr):ptr(_ptr), destroyed(false) { + }}; + typedef std::pair < const swig_type_info *, cpp_ptr > type_ptr_pair; + + swig_module_info *module; + + const swig_type_info *construct_type; // type of special type object + std::vector < type_ptr_pair > types; // our c++ base classes + int own; // whether we call c++ destructors when we die + + typedef std::pair < const swig_octave_member *, octave_value > member_value_pair; + typedef std::map < std::string, member_value_pair > member_map; + member_map members; + + const swig_octave_member *find_member(const swig_type_info *type, const std::string &name) { + if (!type->clientdata) + return 0; + swig_octave_class *c = (swig_octave_class *) type->clientdata; + const swig_octave_member *m; + for (m = c->members; m->name; ++m) + if (m->name == name) + return m; + for (int j = 0; c->base_names[j]; ++j) { + if (!c->base[j]) { + if (!module) + module = SWIG_GetModule(0); + assert(module); + c->base[j] = SWIG_MangledTypeQueryModule(module, module, c->base_names[j]); + } + if (!c->base[j]) + return 0; + if ((m = find_member(c->base[j], name))) + return m; + } + return 0; + } + + member_value_pair *find_member(const std::string &name, bool insert_if_not_found) { + member_map::iterator it = members.find(name); + if (it != members.end()) + return &it->second; + const swig_octave_member *m; + for (unsigned int j = 0; j < types.size(); ++j) + if ((m = find_member(types[j].first, name))) + return &members.insert(std::make_pair(name, std::make_pair(m, octave_value()))).first->second; + if (!insert_if_not_found) + return 0; + return &members[name]; + } + + const swig_type_info *find_base(const std::string &name, const swig_type_info *base) { + if (!base) { + for (unsigned int j = 0; j < types.size(); ++j) { + assert(types[j].first->clientdata); + swig_octave_class *cj = (swig_octave_class *) types[j].first->clientdata; + if (cj->name == name) + return types[j].first; + } + return 0; + } + assert(base->clientdata); + swig_octave_class *c = (swig_octave_class *) base->clientdata; + for (int j = 0; c->base_names[j]; ++j) { + if (!c->base[j]) { + if (!module) + module = SWIG_GetModule(0); + assert(module); + c->base[j] = SWIG_MangledTypeQueryModule(module, module, c->base_names[j]); + } + if (!c->base[j]) + return 0; + assert(c->base[j]->clientdata); + swig_octave_class *cj = (swig_octave_class *) c->base[j]->clientdata; + if (cj->name == name) + return c->base[j]; + } + return 0; + } + + octave_value_list member_invoke(member_value_pair *m, const octave_value_list &args, int nargout) { + if (m->second.is_defined()) + return m->second.subsref("(", std::list < octave_value_list > (1, args), nargout); + else if (m->first && m->first->method) + return m->first->method(args, nargout); + error("member not defined or not invocable"); + return octave_value_list(); + } + + bool dispatch_unary_op(const std::string &symbol, octave_value &ret) { + member_value_pair *m = find_member(symbol, false); + if (!m || m->first->is_static() || m->first->is_global()) + return false; + octave_value_list args; + args.append(as_value()); + octave_value_list argout(member_invoke(m, args, 1)); + if (argout.length() < 1) + return false; + ret = argout(0); + return true; + } + + bool dispatch_binary_op(const std::string &symbol, const octave_base_value &rhs, octave_value &ret) { + member_value_pair *m = find_member(symbol, false); + if (!m || m->first->is_static() || m->first->is_global()) + return false; + octave_value_list args; + args.append(as_value()); + args.append(make_value_hack(rhs)); + octave_value_list argout(member_invoke(m, args, 1)); + if (argout.length() < 1) + return false; + ret = argout(0); + return true; + } + + bool dispatch_index_op(const std::string &symbol, const octave_value_list &rhs, octave_value_list &ret) { + member_value_pair *m = find_member(symbol, false); + if (!m || m->first->is_static() || m->first->is_global()) + return false; + octave_value_list args; + args.append(as_value()); + args.append(rhs); + octave_value_list argout(member_invoke(m, args, 1)); + if (argout.length() >= 1) + ret = argout(0); + return true; + } + + octave_value_list member_deref(member_value_pair *m, const octave_value_list &args) { + if (m->second.is_defined()) + return m->second; + else if (m->first) { + if (m->first->get_method) + return m->first->get_method(args, 1); + else if (m->first->method) + return octave_value(new octave_builtin(m->first->method)); + } + error("undefined member"); + return octave_value_list(); + } + + static octave_value make_value_hack(const octave_base_value &x) { + ((octave_swig_type &) x).count++; + return octave_value((octave_base_value *) &x); + } + + octave_swig_type(const octave_swig_type &x); + octave_swig_type &operator=(const octave_swig_type &rhs); + public: + + octave_swig_type(void *_ptr = 0, const swig_type_info *_type = 0, int _own = 0) + : module(0), construct_type(_ptr ? 0 : _type), own(_own) { + if (_type || _ptr) + types.push_back(std::make_pair(_type, _ptr)); + if (_ptr) { + Swig::Director *d = Swig::get_rtdir(_ptr); + if (d) + Swig::swig_director_set_self(d, this); + } + } + + ~octave_swig_type() { + if (own) { + ++count; + for (unsigned int j = 0; j < types.size(); ++j) { + if (!types[j].first || !types[j].first->clientdata) + continue; + swig_octave_class *c = (swig_octave_class *) types[j].first->clientdata; + if (c->destructor && !types[j].second.destroyed && types[j].second.ptr) { + c->destructor(as_value(), 0); + } + } + } + for (unsigned int j = 0; j < types.size(); ++j) + Swig::erase_rtdir(types[j].second.ptr); + } + + octave_value as_value() { + ++count; + return Swig::swig_value_ref(this); + } + + void incref() { + ++count; + } + + void decref() { + if (!--count) + delete this; + } + + long swig_this() const { + if (!types.size()) + return (long) this; + return (long) types[0].second.ptr; + } + + std::string swig_type_name() const { + // * need some way to manually name subclasses. + // * eg optional first arg to subclass(), or named_subclass() + std::string ret; + for (unsigned int j = 0; j < types.size(); ++j) { + if (j) + ret += "_"; + if (types[j].first->clientdata) { + swig_octave_class *c = (swig_octave_class *) types[j].first->clientdata; + ret += c->name; + } else + ret += types[j].first->name; + } + return ret; + } + + void merge(octave_swig_type &rhs) { + rhs.own = 0; + for (unsigned int j = 0; j < rhs.types.size(); ++j) { + assert(!rhs.types[j].second.destroyed); + Swig::Director *d = Swig::get_rtdir(rhs.types[j].second.ptr); + if (d) + Swig::swig_director_set_self(d, this); + } + types.insert(types.end(), rhs.types.begin(), rhs.types.end()); + members.insert(rhs.members.begin(), rhs.members.end()); + rhs.types.clear(); + rhs.members.clear(); + } + + void install_global() { + for (member_map::const_iterator it = members.begin(); it != members.end(); ++it) { + if (it->second.first && it->second.first->method) + install_builtin_function(it->second.first->method, it->first, + /*it->second.first->doc?it->second.first->doc:*/std::string()); + else if (it->second.second.is_defined()) { + link_to_global_variable(curr_sym_tab->lookup(it->first, true)); + set_global_value(it->first, it->second.second); + } + } + } + + void *cast(swig_type_info *type, int *_own, int flags) { + if (_own) + *_own = own; + if (flags &SWIG_POINTER_DISOWN) + own = 0; + if (!type && types.size()) + return types[0].second.ptr; + for (unsigned int j = 0; j < types.size(); ++j) + if (type == types[j].first) + return types[j].second.ptr; + for (unsigned int j = 0; j < types.size(); ++j) { + swig_cast_info *tc = SWIG_TypeCheck(types[j].first->name, type); + if (!tc) + continue; + int newmemory = 0; + void *vptr = SWIG_TypeCast(tc, types[j].second.ptr, &newmemory); + assert(!newmemory); // newmemory handling not yet implemented + return vptr; + } + return 0; + } + + bool is_owned() const { + return own; + } + + void director_destroyed(Swig::Director *d) { + bool found = false; + for (unsigned int j = 0; j < types.size(); ++j) { + Swig::Director *dj = Swig::get_rtdir(types[j].second.ptr); + if (dj == d) { + types[j].second.destroyed = true; + found = true; + } + } + assert(found); + } + + void assign(const std::string &name, const octave_value &ov) { + members[name] = std::make_pair((const swig_octave_member *) 0, ov); + } + + void assign(const std::string &name, const swig_octave_member *m) { + members[name] = std::make_pair(m, octave_value()); + } + + octave_base_value *clone() const { + // pass-by-value is probably not desired, and is harder; + // requires calling copy constructors of contained types etc. + assert(0); + *(int *) 0 = 0; + return 0; + } + + octave_base_value *empty_clone() const { + return new octave_swig_type(); + } + + bool is_defined() const { + return true; + } + + virtual bool is_map() const { + return true; + } + + virtual octave_value subsref(const std::string &ops, const std::list < octave_value_list > &idx) { + octave_value_list ovl = subsref(ops, idx, 1); + return ovl.length()? ovl(0) : octave_value(); + } + + virtual octave_value_list subsref(const std::string &ops, const std::list < octave_value_list > &idx, int nargout) { + assert(ops.size() > 0); + assert(ops.size() == idx.size()); + + std::list < octave_value_list >::const_iterator idx_it = idx.begin(); + int skip = 0; + octave_value_list sub_ovl; + + // constructor invocation + if (ops[skip] == '(' && construct_type) { + assert(construct_type->clientdata); + swig_octave_class *c = (swig_octave_class *) construct_type->clientdata; + if (!c->constructor) { + error("cannot create instance"); + return octave_value_list(); + } + octave_value_list args; + if (c->director) + args.append(Swig::swig_value_ref(new octave_swig_type(this, 0, 0))); + args.append(*idx_it++); + ++skip; + sub_ovl = c->constructor(args, nargout); + } + // member dereference or invocation + else if (ops[skip] == '.') { + std::string subname; + const swig_type_info *base = 0; // eg, a.base.base_cpp_mem + for (;;) { + octave_value_list subname_ovl(*idx_it++); + ++skip; + assert(subname_ovl.length() == 1 && subname_ovl(0).is_string()); + subname = subname_ovl(0).string_value(); + + const swig_type_info *next_base = find_base(subname, base); + if (!next_base || skip >= (int) ops.size() || ops[skip] != '.') + break; + base = next_base; + } + + member_value_pair tmp, *m = &tmp; + if (!base || !(m->first = find_member(base, subname))) + m = find_member(subname, false); + if (!m) { + error("member not found"); + return octave_value_list(); + } + + octave_value_list args; + if (!m->first || (!m->first->is_static() && !m->first->is_global())) + args.append(as_value()); + if (skip < (int) ops.size() && ops[skip] == '(' && ((m->first && m->first->method) || m->second.is_function() || m->second.is_function_handle())) { + args.append(*idx_it++); + ++skip; + sub_ovl = member_invoke(m, args, nargout); + } else { + sub_ovl = member_deref(m, args); + } + } + // index operator + else { + if (ops[skip] == '(' || ops[skip] == '{') { + const char *op_name = ops[skip] == '(' ? "__paren" : "__brace"; + octave_value_list args; + args.append(*idx_it++); + ++skip; + if (!dispatch_index_op(op_name, args, sub_ovl)) { + error("error evaluating index operator"); + return octave_value_list(); + } + } else { + error("unsupported subsref"); + return octave_value_list(); + } + } + + if (skip >= (int) ops.size()) + return sub_ovl; + if (sub_ovl.length() < 1) { + error("bad subs ref"); + return octave_value_list(); + } + return sub_ovl(0).next_subsref(nargout, ops, idx, skip); + } + + octave_value subsasgn(const std::string &ops, const std::list < octave_value_list > &idx, const octave_value &rhs) { + assert(ops.size() > 0); + assert(ops.size() == idx.size()); + + std::list < octave_value_list >::const_iterator idx_it = idx.begin(); + int skip = 0; + + if (ops.size() > 1) { + std::list < octave_value_list >::const_iterator last = idx.end(); + --last; + std::list < octave_value_list > next_idx(idx.begin(), last); + octave_value next_ov = subsref(ops.substr(0, ops.size() - 1), next_idx); + next_ov.subsasgn(ops.substr(ops.size() - 1), std::list < octave_value_list > (1, *last), rhs); + } + + else if (ops[skip] == '(' || ops[skip] == '{') { + const char *op_name = ops[skip] == '(' ? "__paren_asgn" : "__brace_asgn"; + member_value_pair *m = find_member(op_name, false); + if (m) { + octave_value_list args; + args.append(as_value()); + args.append(*idx_it); + args.append(rhs); + member_invoke(m, args, 1); + } else + error("%s member not found", op_name); + } + + else if (ops[skip] == '.') { + octave_value_list subname_ovl(*idx_it++); + ++skip; + assert(subname_ovl.length() == 1 &&subname_ovl(0).is_string()); + std::string subname = subname_ovl(0).string_value(); + + member_value_pair *m = find_member(subname, true); + if (!m->first || !m->first->set_method) { + m->first = 0; + m->second = rhs; + } else if (m->first->set_method) { + octave_value_list args; + if (!m->first->is_static() && !m->first->is_global()) + args.append(as_value()); + args.append(rhs); + m->first->set_method(args, 1); + } else + error("member not assignable"); + } else + error("unsupported subsasgn"); + + return as_value(); + } + + virtual bool is_string() const { + octave_swig_type *nc_this = const_cast < octave_swig_type *>(this); + return !!nc_this->find_member("__str", false); + } + + virtual std::string string_value(bool force = false) const { + octave_swig_type *nc_this = const_cast < octave_swig_type *>(this); + member_value_pair *m = nc_this->find_member("__str", false); + if (!m) { + error("__str method not defined"); + return std::string(); + } + octave_value_list outarg = nc_this->member_invoke(m, octave_value_list(nc_this->as_value()), 1); + if (outarg.length() < 1 || !outarg(0).is_string()) { + error("__str method did not return a string"); + return std::string(); + } + return outarg(0).string_value(); + } + + virtual octave_value convert_to_str(bool pad = false, bool force = false, char type = '"') const { + return string_value(); + } + + virtual octave_value convert_to_str_internal(bool pad, bool force, char type) const { + return string_value(); + } + + static bool dispatch_global_op(const std::string &symbol, const octave_value_list &args, octave_value &ret) { + // we assume that "op_"-prefixed functions are installed in global namespace + // (rather than any module namespace). + + octave_value fcn = get_global_value(symbol, true); + if (!fcn.is_function() && !fcn.is_function_handle()) + return false; + ret = fcn.subsref("(", std::list < octave_value_list > (1, args)); + return true; + } + + static octave_value dispatch_unary_op(const octave_base_value &x, const char *op_name) { + octave_swig_type *ost = Swig::swig_value_deref(x); + assert(ost); + + octave_value ret; + if (ost->dispatch_unary_op(std::string("__") + op_name, ret)) + return ret; + std::string symbol = "op_" + ost->swig_type_name() + "_" + op_name; + octave_value_list args; + args.append(make_value_hack(x)); + if (dispatch_global_op(symbol, args, ret)) + return ret; + + error("could not dispatch unary operator"); + return octave_value(); + } + + static octave_value dispatch_binary_op(const octave_base_value &lhs, const octave_base_value &rhs, const char *op_name) { + octave_swig_type *lhs_ost = Swig::swig_value_deref(lhs); + octave_swig_type *rhs_ost = Swig::swig_value_deref(rhs); + + octave_value ret; + if (lhs_ost && lhs_ost->dispatch_binary_op(std::string("__") + op_name, rhs, ret)) + return ret; + + std::string symbol; + octave_value_list args; + args.append(make_value_hack(lhs)); + args.append(make_value_hack(rhs)); + + symbol = "op_"; + symbol += lhs_ost ? lhs_ost->swig_type_name() : lhs.type_name(); + symbol += "_"; + symbol += op_name; + symbol += "_"; + symbol += rhs_ost ? rhs_ost->swig_type_name() : rhs.type_name(); + if (dispatch_global_op(symbol, args, ret)) + return ret; + + symbol = "op_"; + symbol += lhs_ost ? lhs_ost->swig_type_name() : lhs.type_name(); + symbol += "_"; + symbol += op_name; + symbol += "_"; + symbol += "any"; + if (dispatch_global_op(symbol, args, ret)) + return ret; + + symbol = "op_"; + symbol += "any"; + symbol += "_"; + symbol += op_name; + symbol += "_"; + symbol += rhs_ost ? rhs_ost->swig_type_name() : rhs.type_name(); + if (dispatch_global_op(symbol, args, ret)) + return ret; + + error("could not dispatch binary operator"); + return octave_value(); + } + + void print(std::ostream &os, bool pr_as_read_syntax = false) const { + if (is_string()) { + os << string_value(); + return; + } + + os << "{" << std::endl; + for (unsigned int j = 0; j < types.size(); ++j) { + if (types[j].first->clientdata) { + const swig_octave_class *c = (const swig_octave_class *) types[j].first->clientdata; + os << " " << c->name << ", ptr = " << types[j].second.ptr << std::endl; + } else { + os << " " << types[j].first->name << ", ptr = " << types[j].second.ptr << std::endl; + } + } + for (member_map::const_iterator it = members.begin(); it != members.end(); ++it) { + if (it->second.first) { + const char *objtype = it->second.first->method ? "method" : "variable"; + const char *modifier = (it->second.first->flags &1) ? "static" : (it->second.first->flags &2) ? "global" : ""; + os << it->second.first->name << " (c++ " << modifier << " " << objtype << ")" << std::endl; + assert(it->second.first->name == it->first); + } else { + os << it->first << " (octave value)" << std::endl; + } + } + os << "}" << std::endl; + } + }; + + // Octave tries hard to preserve pass-by-value semantics. Eg, assignments + // will call clone() via make_unique() if there is more than one outstanding + // reference to the lhs, and forces the clone's reference count to 1 + // (so you can't just increment your own count and return this). + // + // One way to fix this (without modifying Octave) is to add a level of + // indirection such that clone copies ref-counted pointer and we keep + // pass-by-ref semantics (which are more natural/expected for C++ bindings). + // + // Supporting both pass-by-{ref,value} and toggling via %feature/option + // might be nice. + + class octave_swig_ref:public octave_base_value { + octave_swig_type *ptr; + public: + octave_swig_ref(octave_swig_type *_ptr = 0) + :ptr(_ptr) { } + + ~octave_swig_ref() + { if (ptr) ptr->decref(); } + + octave_swig_type *get_ptr() const + { return ptr; } + + octave_base_value *clone() const + { if (ptr) ptr->incref(); return new octave_swig_ref(ptr); } + + octave_base_value *empty_clone() const + { return new octave_swig_ref(0); } + + bool is_defined() const + { return ptr->is_defined(); } + + virtual bool is_map() const + { return ptr->is_map(); } + + virtual octave_value subsref(const std::string &ops, const std::list < octave_value_list > &idx) + { return ptr->subsref(ops, idx); } + + virtual octave_value_list subsref(const std::string &ops, const std::list < octave_value_list > &idx, int nargout) + { return ptr->subsref(ops, idx, nargout); } + + octave_value subsasgn(const std::string &ops, const std::list < octave_value_list > &idx, const octave_value &rhs) + { return ptr->subsasgn(ops, idx, rhs); } + + virtual bool is_string() const + { return ptr->is_string(); } + + virtual std::string string_value(bool force = false) const + { return ptr->string_value(force); } + + virtual octave_value convert_to_str(bool pad = false, bool force = false, char type = '"') const + { return ptr->convert_to_str(pad, force, type); } + + virtual octave_value convert_to_str_internal(bool pad, bool force, char type) const + { return ptr->convert_to_str_internal(pad, force, type); } + + void print(std::ostream &os, bool pr_as_read_syntax = false) const + { return ptr->print(os, pr_as_read_syntax); } + + private: + DECLARE_OCTAVE_ALLOCATOR; + DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA; + }; + DEFINE_OCTAVE_ALLOCATOR(octave_swig_ref); + DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA(octave_swig_ref, "swig_ref", "swig_ref"); + + class octave_swig_packed:public octave_base_value { + swig_type_info *type; + std::vector < char > buf; + public: + + octave_swig_packed(swig_type_info *_type = 0, const char *_buf = 0, size_t _buf_len = 0) + : type(_type), buf(_buf, _buf + _buf_len) { + } + + bool copy(swig_type_info *outtype, char *ptr, size_t sz) { + if (outtype && outtype != type) + return false; + assert(sz <= buf.size()); + std::copy(&buf[0], &buf[sz], ptr); + return true; + } + + octave_base_value *clone() const { + return new octave_swig_packed(*this); + } + + octave_base_value *empty_clone() const { + return new octave_swig_packed(); + } + + bool is_defined() const { + return true; + } + + void print(std::ostream &os, bool pr_as_read_syntax = false) const { + os << "swig packed type: name = " << type->name << ", len = " << buf.size() << std::endl; + } + private: + DECLARE_OCTAVE_ALLOCATOR; + DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA; + }; + DEFINE_OCTAVE_ALLOCATOR(octave_swig_packed); + DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA(octave_swig_packed, "swig_packed", "swig_packed"); + + static octave_value_list octave_set_immutable(const octave_value_list &args, int nargout) { + error("attempt to set immutable member variable"); + return octave_value_list(); + } + + struct octave_value_ref { + const octave_value_list &ovl; + int j; + + octave_value_ref(const octave_value_list &_ovl, int _j) + :ovl(_ovl), j(_j) { } + + operator octave_value() const { + return ovl(j); + } + + octave_value operator*() const { + return ovl(j); + } + }; + + octave_value_list swig_subclass(const octave_value_list &args, int nargout) { + octave_swig_type *top = new octave_swig_type; + for (int j = 0; j < args.length(); ++j) { + if (args(j).type_id() == octave_swig_ref::static_type_id()) { + octave_swig_ref *osr = static_cast < octave_swig_ref *>(args(j).internal_rep()); + octave_swig_type *ost = osr->get_ptr(); + if (!ost->is_owned()) { + error("cannot subclass object not constructed on octave side"); + return octave_value_list(); + } + top->merge(*ost); + } else if (args(j).is_function_handle()) { + top->assign(args(j).fcn_handle_value()->fcn_name(), args(j)); + } else if (args(j).is_string()) { + if (j + 1 >= args.length()) { + error("member assignments must be of string,value form"); + return octave_value_list(); + } + top->assign(args(j).string_value(), args(j + 1)); + ++j; + } else { + error("invalid arguments to subclass"); + return octave_value_list(); + } + } + return octave_value(Swig::swig_value_ref(top)); + } + + octave_value_list swig_type(const octave_value_list &args, int nargout) { + if (args.length() != 1) { + error("swig_typeinfo must be called with only a single object"); + return octave_value_list(); + } + octave_swig_type *ost = Swig::swig_value_deref(args(0)); + if (!ost) { + error("object is not a swig_ref"); + return octave_value_list(); + } + return octave_value(ost->swig_type_name()); + } + + octave_value_list swig_typequery(const octave_value_list &args, int nargout) { + if (args.length() != 1 || !args(0).is_string()) { + error("swig_typeinfo must be called with single string argument"); + return octave_value_list(); + } + swig_module_info *module = SWIG_GetModule(0); + swig_type_info *type = SWIG_TypeQueryModule(module, module, args(0).string_value().c_str()); + if (!type) + return octave_value("<unknown>"); + return octave_value(type->name); + } + + octave_value_list swig_this(const octave_value_list &args, int nargout) { + if (args.length() != 1) { + error("swig_typeinfo must be called with only a single object"); + return octave_value_list(); + } + octave_swig_type *ost = Swig::swig_value_deref(args(0)); + if (!ost) { + error("object is not a swig_ref"); + return octave_value_list(); + } + return octave_value(octave_uint64((unsigned long long) ost->swig_this())); + } + + +#define SWIG_DIRECTORS + + struct Director; + class octave_swig_type; + + namespace Swig { + class Director { + octave_swig_type *self; + bool disowned; + + Director(const Director &x); + Director &operator=(const Director &rhs); + public: + + Director(void *vptr):self(0), disowned(false) { + set_rtdir(vptr, this); + } + + ~Director() { + swig_director_destroyed(self, this); + if (disowned) + self->decref(); + } + + void swig_set_self(octave_swig_type *new_self) { + assert(!disowned); + self = new_self; + } + + octave_swig_type *swig_get_self() const { + return self; + } + + void swig_disown() { + if (disowned) + return; + disowned = true; + self->incref(); + } + }; + + struct DirectorTypeMismatchException { + static void raise(const char *msg) { + // ... todo + throw(DirectorTypeMismatchException()); + } + + static void raise(const octave_value &ov, const char *msg) { + // ... todo + raise(msg); + } + }; + struct DirectorPureVirtualException { + static void raise(const char *msg) { + // ... todo + throw(DirectorPureVirtualException()); + } + + static void raise(const octave_value &ov, const char *msg) { + // ... todo + raise(msg); + } + }; + + } + + void swig_acquire_ownership(void *vptr) { + // assert(0); + // ... todo + } + + void swig_acquire_ownership_array(void *vptr) { + // assert(0); + // ... todo + } + + void swig_acquire_ownership_obj(void *vptr, int own) { + // assert(0); + // ... todo + } + + namespace Swig { + void swig_director_destroyed(octave_swig_type *self, Director *d) { + self->director_destroyed(d); + } + + void swig_director_set_self(Director *d, octave_swig_type *self) { + d->swig_set_self(self); + } + + octave_base_value *swig_value_ref(octave_swig_type *ost) { + return new octave_swig_ref(ost); + } + + octave_swig_type *swig_value_deref(const octave_value &ov) { + return swig_value_deref(*ov.internal_rep()); + } + + octave_swig_type *swig_value_deref(const octave_base_value &ov) { + if (ov.type_id() != octave_swig_ref::static_type_id()) + return 0; + const octave_swig_ref *osr = static_cast < const octave_swig_ref *>(&ov); + return osr->get_ptr(); + } + + } + + SWIGRUNTIME octave_value SWIG_Octave_NewPointerObj(void *ptr, swig_type_info *type, int flags) { + int own = (flags &SWIG_POINTER_OWN) ? SWIG_POINTER_OWN : 0; + + Swig::Director *d... [truncated message content] |
From: <jjs...@us...> - 2008-04-02 14:04:14
|
Revision: 4849 http://octave.svn.sourceforge.net/octave/?rev=4849&view=rev Author: jjstickel Date: 2008-04-02 07:04:01 -0700 (Wed, 02 Apr 2008) Log Message: ----------- import data-smoothing package Added Paths: ----------- trunk/octave-forge/main/data-smoothing/ trunk/octave-forge/main/data-smoothing/COPYING trunk/octave-forge/main/data-smoothing/DESCRIPTION trunk/octave-forge/main/data-smoothing/inst/ trunk/octave-forge/main/data-smoothing/inst/ddmat.m trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmdd.m trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmddwrap.m trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmooth.m trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmscat.m trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmscatwrap.m trunk/octave-forge/main/data-smoothing/inst/tkrgscatdatasmooth.m Added: trunk/octave-forge/main/data-smoothing/COPYING =================================================================== --- trunk/octave-forge/main/data-smoothing/COPYING (rev 0) +++ trunk/octave-forge/main/data-smoothing/COPYING 2008-04-02 14:04:01 UTC (rev 4849) @@ -0,0 +1,337 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. Added: trunk/octave-forge/main/data-smoothing/DESCRIPTION =================================================================== --- trunk/octave-forge/main/data-smoothing/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/data-smoothing/DESCRIPTION 2008-04-02 14:04:01 UTC (rev 4849) @@ -0,0 +1,12 @@ +Name: data-smoothing +Version: 1.0.0 +Date: 2008-04-02 +Author: Jonathan Stickel +Maintainer: The Octave Community +Title: Data smoothing +Description: Algorithms for smoothing noisy data +Categories: Data-smoothing +Depends: octave (>= 2.9.7) +Autoload: yes +License: GPL version 2 or later +Url: http://octave.sf.net Added: trunk/octave-forge/main/data-smoothing/inst/ddmat.m =================================================================== --- trunk/octave-forge/main/data-smoothing/inst/ddmat.m (rev 0) +++ trunk/octave-forge/main/data-smoothing/inst/ddmat.m 2008-04-02 14:04:01 UTC (rev 4849) @@ -0,0 +1,38 @@ +function D = ddmat(x, d) +%%function D = ddmat(x, d) +%% Compute divided differencing matrix of order d +%% +%% Input +%% x: vector of sampling positions +%% d: order of diffferences +%% Output +%% D: the matrix; D * Y gives divided differences of order d +%% +%%References: Anal. Chem. (2003) 75, 3631. +%% + +%% corrected the recursion multiplier; JJS 2/25/08 + +%% Copyright (C) 2003 Paul Eilers +%% 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, see <http://www.gnu.org/licenses/>. + + +m = length(x); +if d == 0 + D = speye(m); +else + dx = x((d + 1):m) - x(1:(m - d)); + V = spdiags(1 ./ dx, 0, m - d, m - d); + D = d * V * diff(ddmat(x, d - 1)); +end Added: trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmdd.m =================================================================== --- trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmdd.m (rev 0) +++ trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmdd.m 2008-04-02 14:04:01 UTC (rev 4849) @@ -0,0 +1,81 @@ +%%ys = tkrgdatasmdd (x, y, lambda) +%%ys = tkrgdatasmdd (x, y, lambda, d) +%%[ys, v] = tkrgdatasmdd (...) +%% +%% Smooths the tkrgdata of y vs. x values by +%% Tikhonov regularization and divided differences (arbitrary spacing of x). +%% Input: +%% x: data series of sampling positions (must be increasing) +%% y: data series, assumed to be sampled at equal intervals +%% lambda: smoothing parameter; large lambda gives smoother result +%% d: order of smoothing derivative +%% Output: +%% ys: smoothed data +%% v: generalized cross-validation variance +%% +%% References: Anal. Chem. (2003) 75, 3631; AIChE J. (2006) 52, 325 +%% + +%% Addapted with permission from 'whitsmdd', Paul Eilers, 2003 + +%% Copyright (C) 2008 Jonathan Stickel +%% 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, see <http://www.gnu.org/licenses/>. + + +function [ys, v] = tkrgdatasmdd(x, y, lambda, d) + + %% Defaults if not provided + if nargin <= 3 + d = 2; + endif + + %% find the average dx in order to scale lambda + L = x(end) - x(1); + N = length(x); + dx = L/(N-1); + + %% form the matrices + %% D is the derivative matrix + D = ddmat(x,d); + + %% B and Btilda are total integration matrices + Bhat = spdiag(-ones(N-1,1),-1) + spdiag(ones(N-1,1),1); + Bhat(1,1) = -1; + Bhat(N,N) = 1; + B = 1/2*spdiag(Bhat*x); + %%B = 1/dx*speye(N,N); % force equal waiting, even for variable spaced x? + if ( floor(d/2) == d/2 ) % test if d is even + dh = d/2; + Btilda = B(dh+1:N-dh,dh+1:N-dh); + else % d is odd + dh = ceil(d/2); + Btilda = B(dh:N-dh,dh:N-dh); + endif + + %% Smoothing + delta = sqrt(trace(D'*D)); % a suitable invariant of D for scaling lambda + %%f = (B + lambda*D'*Btilda*D) \ B*y; + C = chol(B + lambda*delta^(-1)*D'*Btilda*D); + ys = C \ (C' \ B*y); + + %% Computation of hat diagonal and cross-validation + if (nargout > 1) + %% from AIChE J. (2006) 52, 325 + %%H = (B + lambda*D'*Btilda*D) \ B; + H = C \ (C' \ B); + %% note: this is variance, squared of the standard error that Eilers uses + v = (y - ys)'*B*(y - ys) / (1 - trace(H)/N)^2; + endif + +endfunction Added: trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmddwrap.m =================================================================== --- trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmddwrap.m (rev 0) +++ trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmddwrap.m 2008-04-02 14:04:01 UTC (rev 4849) @@ -0,0 +1,37 @@ +%%cve|stdevdif = tkrgdatasmddwrap (log10lambda, x, y, d, 'cve'|'stdev'[, stdev]) +%% +%% Wrapper function for tkrgdatasmdd in order to minimize over lambda +%% w.r.t. cross-validation error OR the squared difference between the +%% standard deviation of data from the smooth data and the given +%% standard deviation. +%% + +%% Copyright (C) 2008 Jonathan Stickel +%% 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, see <http://www.gnu.org/licenses/>. + + +function out = tkrgdatasmddwrap (log10lambda, x, y, d, mintype, stdev) + + lambda = 10^(log10lambda); + + if ( strcmp(mintype,"stdev") ) + ys = tkrgdatasmdd(x, y, lambda, d); + stdevd = std(y-ys); + out = (stdevd - stdev)^2; + else + [ys, cve] = tkrgdatasmdd(x, y, lambda, d); + out = cve; + endif + +endfunction Added: trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmooth.m =================================================================== --- trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmooth.m (rev 0) +++ trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmooth.m 2008-04-02 14:04:01 UTC (rev 4849) @@ -0,0 +1,147 @@ +%%[ys, lambda] = tkrgdatasmooth (x, y) +%%[ys, lambda] = tkrgdatasmooth (x, y, d) +%%[ys, lambda] = tkrgdatasmooth (x, y, d, option, value) +%% +%% Smooths the y values of 1D data by Tikhonov regularization. The x +%% values need not be equally spaced but they should be ordered (and +%% non-overlapping). The order of the smoothing derivative 'd', can be +%% provided (default is 2), and the option-value pair should be either +%% the regularizaiton parameter "lambda" or the standard deviation +%% "stdev" of the randomness in the data. With no option supplied, +%% generalized cross-validation is used to determine lambda. +%% Reference: Anal. Chem. (2003) 75, 3631. +%% See also: tkrgscatdatasmooth, +%% + + +%% Copyright (C) 2008 Jonathan Stickel +%% 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, see <http://www.gnu.org/licenses/>. + + +function [ys, lambda] = tkrgdatasmooth (x, y, d, option, value) + + if (length(x)!=length(y)) + error("x and y must be equal length vectors") + endif + if ( size(x)(1)==1 ) + x = x'; + endif + if ( size(y)(1)==1 ) + y = y'; + endif + + if (nargin < 3) + d = 2; + endif + + guess = 0; + if (nargin > 3) + if ( strcmp(option,"lambda") ) + %% if lambda provided, use it directly + lambda = value; + elseif ( strcmp(option,"stdev") ) + %% if stdev is provided, scale it and use it + stdev = value; + opt = optimset("TolFun",1e-6,"MaxFunEvals",20); + log10lambda = fminunc ("tkrgdatasmddwrap", guess, opt, x, y, d, "stdev", stdev); + lambda = 10^log10lambda; + else + warning("option %s is not recognized; using cross-validation",option) + endif + else + %% perform cross-validation + opt = optimset("TolFun",1e-4,"MaxFunEvals",20); + log10lambda = fminunc ("tkrgdatasmddwrap", guess, opt, x, y, d, "cve"); + lambda = 10^log10lambda; + endif + + ys = tkrgdatasmdd(x, y, lambda, d); + +endfunction + + +%!demo +%! npts = 100; +%! x = linspace(0,1,npts)'; +%! x = x + 1/npts*(rand(npts,1)-0.5); +%! y = sin(10*x); +%! stdev = 1e-1; +%! y = y + stdev*randn(npts,1); +%! yp = ddmat(x,1)*y; +%! y2p = ddmat(x,2)*y; +%! d = 4; +%! [ys, lambda] = tkrgdatasmooth (x,y,d); +%! lambda +%! ysp = ddmat(x,1)*ys; +%! ys2p = ddmat(x,2)*ys; +%! figure(1); +%! plot(x,y,'o',x,ys) +%! figure(2); +%! plot(x(1:end-1),[yp,ysp]) +%! axis([min(x),max(x),min(ysp)-abs(min(ysp)),max(ysp)*2]) +%! figure(3) +%! plot(x(2:end-1),[y2p,ys2p]) +%! axis([min(x),max(x),min(ys2p)-abs(min(ys2p)),max(ys2p)*2]) +%! %-------------------------------------------------------- +%! % this demo used generalized cross-validation to determine lambda + +%!demo +%! npts = 100; +%! x = linspace(0,1,npts)'; +%! x = x + 1/npts*(rand(npts,1)-0.5); +%! y = sin(10*x); +%! stdev = 1e-1; +%! y = y + stdev*randn(npts,1); +%! yp = ddmat(x,1)*y; +%! y2p = ddmat(x,2)*y; +%! d = 4; +%! [ys, lambda] = tkrgdatasmooth (x,y,d,"stdev",stdev); +%! lambda +%! ysp = ddmat(x,1)*ys; +%! ys2p = ddmat(x,2)*ys; +%! figure(1); +%! plot(x,y,'o',x,ys) +%! figure(2); +%! plot(x(1:end-1),[yp,ysp]) +%! axis([min(x),max(x),min(ysp)-abs(min(ysp)),max(ysp)*2]) +%! figure(3) +%! plot(x(2:end-1),[y2p,ys2p]) +%! axis([min(x),max(x),min(ys2p)-abs(min(ys2p)),max(ys2p)*2]) +%! %-------------------------------------------------------- +%! % this demo used standard deviation to determine lambda + +%!demo +%! npts = 100; +%! x = linspace(0,1,npts)'; +%! x = x + 1/npts*(rand(npts,1)-0.5); +%! y = sin(10*x); +%! stdev = 1e-1; +%! y = y + stdev*randn(npts,1); +%! yp = ddmat(x,1)*y; +%! y2p = ddmat(x,2)*y; +%! d = 4; +%! [ys, lambda] = tkrgdatasmooth (x,y,d,"lambda",100); +%! lambda +%! ysp = ddmat(x,1)*ys; +%! ys2p = ddmat(x,2)*ys; +%! figure(1); +%! plot(x,y,'o',x,ys) +%! figure(2); +%! plot(x(1:end-1),[yp,ysp]) +%! axis([min(x),max(x),min(ysp)-abs(min(ysp)),max(ysp)*2]) +%! figure(3) +%! plot(x(2:end-1),[y2p,ys2p]) +%! axis([min(x),max(x),min(ys2p)-abs(min(ys2p)),max(ys2p)*2]) +%! %-------------------------------------------------------- +%! % this demo used a user specified lambda that was too large Added: trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmscat.m =================================================================== --- trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmscat.m (rev 0) +++ trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmscat.m 2008-04-02 14:04:01 UTC (rev 4849) @@ -0,0 +1,89 @@ +%%[x, y] = tkrgdatasmscat (xm, ym, lambda) +%%[x, y] = tkrgdatasmscat (xm, ym, lambda, N, d) +%%[x, y] = tkrgdatasmscat (xm, ym, lambda, N, d, range) +%%[x, y, v] = tkrgdatasmscat (...) +%% +%% Smooths the data of the scattered y vs. x values by +%% Tikhonov regularization. +%% Input: +%% xm data series x +%% ym data series y +%% lambda: smoothing parameter +%% N: number of equally spaced smoothed points (default = 100) +%% d: order of smoothing derivative (default = 2) +%% range: two element vector [min,max] giving the desired output range of x; +%% if the range is less than the data, defaults to [min,max] of the data +%% Output: +%% x: smoothed x +%% y: smoothed y +%% v: generalized cross-validation variance +%% +%% References: Anal. Chem. (2003) 75, 3631; AIChE J. (2006) 52, 325 +%% + +%% Some code addapted with permission from 'whitsmscat', Paul Eilers, 2003 + +%% Copyright (C) 2008 Jonathan Stickel +%% 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, see <http://www.gnu.org/licenses/>. + + +function [x, y, v] = tkrgdatasmscat (xm, ym, lambda, N, d, range) + + %% Defaults if not provided + if (nargin <= 3) + N = 100; + d = 2; + endif + + %% sort the scattered data + [xm,idx] = sort (xm); + ym = ym(idx); + + %% construct x + Nm = length(xm); + if (nargin > 5) + xmin = min(range(1),xm(1)); + xmax = max(range(2),xm(end)); + else + xmin = xm(1); + xmax = xm(end); + endif + L = xmax - xmin; + dx = L/(N-1); + x = (xmin:dx:xmax)'; + + %% Itilda is the mapping matrix y->ym + Itilda = speye(N); + idx = round((xm - xmin) / dx) + 1; + Itilda = Itilda(idx,:); + + %% D is the derivative matrix + %%D = ddmat(x,d); + D = dx^(-d)*diff(speye(N),d); % equivalent but a little faster + + %% Smoothing + delta = sqrt(trace(D'*D)); % a suitable invariant of D + %%y = (Itilda'*Itilda + lambda*D'*D) \ Itilda'*ym; + C = chol(Itilda'*Itilda + lambda*delta^(-1)*D'*D); + y = C \ (C' \ Itilda'*ym); + + %% Computation of hat diagonal and cross-validation + if (nargout > 2) + %% from AIChE J. (2006) 52, 325 + H = Itilda * ( C \ (C' \ Itilda') ); + %% note: this is variance, squared of the standard error that Eilers uses + v = (ym - Itilda*y)'*(ym - Itilda*y)/Nm / (1 - trace(H)/Nm)^2; + endif + +endfunction Added: trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmscatwrap.m =================================================================== --- trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmscatwrap.m (rev 0) +++ trunk/octave-forge/main/data-smoothing/inst/tkrgdatasmscatwrap.m 2008-04-02 14:04:01 UTC (rev 4849) @@ -0,0 +1,39 @@ +%%cve|stdevdif = tkrgdatasmscatwrap (log10lambda, xm, ym, N, d, range, 'cve'|'stdev'[, stdev]) +%% +%% Wrapper function for tkrgdatasmscat in order to minimize over lambda +%% w.r.t. cross-validation error OR the squared difference between the +%% standard deviation of data from the smooth data and the given +%% standard deviation. +%% + +%% Copyright (C) 2008 Jonathan Stickel +%% 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, see <http://www.gnu.org/licenses/>. + + +function out = tkrgdatasmscatwrap (log10lambda, xm, ym, N, d, range, mintype, stdev) + + lambda = 10^(log10lambda); + + if ( strcmp(mintype,"stdev") ) + [x, y] = tkrgdatasmscat(xm, ym, lambda, N, d, range); + dx = (max(x)-min(x))/(N-1); + idx = round((xm - min(x)) / dx) + 1; + stdevd = std(ym-y(idx)); + out = (stdevd - stdev)^2; + else + [x, y, cve] = tkrgdatasmscat(xm, ym, lambda, N, d, range); + out = cve; + endif + +endfunction Added: trunk/octave-forge/main/data-smoothing/inst/tkrgscatdatasmooth.m =================================================================== --- trunk/octave-forge/main/data-smoothing/inst/tkrgscatdatasmooth.m (rev 0) +++ trunk/octave-forge/main/data-smoothing/inst/tkrgscatdatasmooth.m 2008-04-02 14:04:01 UTC (rev 4849) @@ -0,0 +1,154 @@ +%%[x, y, lambda] = tkrgscatdatasmooth (xm, ym) +%%[x, y, lambda] = tkrgscatdatasmooth (xm, ym, N, d) +%%[x, y, lambda] = tkrgscatdatasmooth (xm, ym, N, d, range) +%%[x, y, lambda] = tkrgscatdatasmooth (xm, ym, N, d, range, option, value) +%% +%% Determines a smooth curve that approximates the scattered (xm,ym) +%% data values by Tikhonov regularization. The number of points 'N' for +%% the smooth curve and the order of the smoothing derivative 'd' can be +%% provided (defaults are 100 and 2 respectively). Additionally, the +%% desired output range for x ([min,max]) can be given; if the provided +%% range does not completely span the range of the data, the range +%% defaults to the min and max of the data. The option-value pair +%% should be either the regularizaiton parameter "lambda" or the +%% standard deviation "stdev" of the randomness in the data. With no +%% option supplied, generalized cross-validation is used to determine +%% lambda. +%% Reference: Anal. Chem. (2003) 75, 3631. +%% See also: datasmooth +%% + + +%% Copyright (C) 2008 Jonathan Stickel +%% 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, see <http://www.gnu.org/licenses/>. + + +function [x, y, lambda] = tkrgscatdatasmooth (xm, ym, N, d, range, option, value) + + if (length(xm)!=length(ym)) + error("xm and ym must be equal length vectors") + endif + if ( size(xm)(1)==1 ) + xm = xm'; + endif + if ( size(ym)(1)==1 ) + ym = ym'; + endif + + if (nargin < 3) + N = 100; + d = 2; + endif + if (nargin < 5) + range = [min(xm),max(xm)] + endif + + + guess = 0; + if (nargin > 5) + if ( strcmp(option,"lambda") ) + %% if lambda provided, use it directly + lambda = value; + elseif ( strcmp(option,"stdev") ) + %% if stdev is provided, scale it and use it + stdev = value; + opt = optimset("TolFun",1e-6,"MaxFunEvals",20); + log10lambda = fminunc ("tkrgdatasmscatwrap", guess, opt, xm, ym, N, d, range, "stdev", stdev); + lambda = 10^log10lambda; + else + warning("option %s is not recognized; using cross-validation",option) + endif + else + %% otherwise, perform cross-validation + opt = optimset("TolFun",1e-4,"MaxFunEvals",20); + log10lambda = fminunc ("tkrgdatasmscatwrap", guess, opt, xm, ym, N, d, range, "cve"); + lambda = 10^log10lambda; + endif + + [x,y] = tkrgdatasmscat (xm, ym, lambda, N, d, range); + +endfunction + + +%!demo +%! npts = 80; +%! xm = linspace(0,1,npts)'; +%! stdev = 1e-1; +%! xm = xm + stdev*randn(npts,1); +%! ym = sin(10*xm); +%! ym = ym + stdev*randn(npts,1); +%! ymp = ddmat(xm,1)*ym; +%! ym2p = ddmat(xm,2)*ym; +%! [x, y, lambda] = tkrgscatdatasmooth (xm,ym,500,4,[-0.15,1.15]); +%! lambda +%! yp = ddmat(x,1)*y; +%! y2p = ddmat(x,2)*y; +%! figure(1); +%! plot(xm,ym,'o',x,y) +%! figure(2); +%! plot(xm(1:end-1),ymp,'o',x(1:end-1),yp) +%! axis([min(x),max(x),min(yp)-abs(min(yp)),max(yp)*2]) +%! figure(3) +%! plot(xm(2:end-1),ym2p,'o',x(2:end-1),y2p) +%! axis([min(x),max(x),min(y2p)-abs(min(y2p)),max(y2p)*2]) +%! %-------------------------------------------------------- +%! % this demo used generalized cross-validation to determine lambda + +%!demo +%! npts = 80; +%! xm = linspace(0,1,npts)'; +%! stdev = 1e-1; +%! xm = xm + stdev*randn(npts,1); +%! ym = sin(10*xm); +%! ym = ym + stdev*randn(npts,1); +%! ymp = ddmat(xm,1)*ym; +%! ym2p = ddmat(xm,2)*ym; +%! [x, y, lambda] = tkrgscatdatasmooth (xm,ym,500,4,[-0.15,1.15],"stdev",stdev); +%! lambda +%! yp = ddmat(x,1)*y; +%! y2p = ddmat(x,2)*y; +%! figure(1); +%! plot(xm,ym,'o',x,y) +%! figure(2); +%! plot(xm(1:end-1),ymp,'o',x(1:end-1),yp) +%! axis([min(x),max(x),min(yp)-abs(min(yp)),max(yp)*2]) +%! figure(3) +%! plot(xm(2:end-1),ym2p,'o',x(2:end-1),y2p) +%! axis([min(x),max(x),min(y2p)-abs(min(y2p)),max(y2p)*2]) +%! %-------------------------------------------------------- +%! % this demo used standard deviation to determine lambda + +%!demo +%! npts = 80; +%! xm = linspace(0,1,npts)'; +%! stdev = 1e-1; +%! xm = xm + stdev*randn(npts,1); +%! ym = sin(10*xm); +%! ym = ym + stdev*randn(npts,1); +%! ymp = ddmat(xm,1)*ym; +%! ym2p = ddmat(xm,2)*ym; +%! [x, y, lambda] = tkrgscatdatasmooth (xm,ym,500,4,[-0.15,1.15],"lambda",10000); +%! lambda +%! yp = ddmat(x,1)*y; +%! y2p = ddmat(x,2)*y; +%! figure(1); +%! plot(xm,ym,'o',x,y) +%! figure(2); +%! plot(xm(1:end-1),ymp,'o',x(1:end-1),yp) +%! axis([min(x),max(x),min(yp)-abs(min(yp)),max(yp)*2]) +%! figure(3) +%! plot(xm(2:end-1),ym2p,'o',x(2:end-1),y2p) +%! axis([min(x),max(x),min(y2p)-abs(min(y2p)),max(y2p)*2]) +%! %-------------------------------------------------------- +%! % this demo used a user specified lambda that was too large This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2008-04-06 23:43:12
|
Revision: 4868 http://octave.svn.sourceforge.net/octave/?rev=4868&view=rev Author: adb014 Date: 2008-04-06 16:43:15 -0700 (Sun, 06 Apr 2008) Log Message: ----------- Update version numbers, release dates, and news in preparation for release Modified Paths: -------------- trunk/octave-forge/main/econometrics/DESCRIPTION trunk/octave-forge/main/specfun/DESCRIPTION trunk/octave-forge/main/special-matrix/DESCRIPTION trunk/octave-forge/main/splines/DESCRIPTION Modified: trunk/octave-forge/main/econometrics/DESCRIPTION =================================================================== --- trunk/octave-forge/main/econometrics/DESCRIPTION 2008-04-06 23:36:22 UTC (rev 4867) +++ trunk/octave-forge/main/econometrics/DESCRIPTION 2008-04-06 23:43:15 UTC (rev 4868) @@ -1,6 +1,6 @@ Name: Econometrics -Version: 1.0.5 -Date: 2007-12-05 +Version: 1.0.6 +Date: 2008-04-06 Author: Michael Creel <mic...@ua...> Maintainer: Michael Creel <mic...@ua...> Title: Econometrics. Modified: trunk/octave-forge/main/specfun/DESCRIPTION =================================================================== --- trunk/octave-forge/main/specfun/DESCRIPTION 2008-04-06 23:36:22 UTC (rev 4867) +++ trunk/octave-forge/main/specfun/DESCRIPTION 2008-04-06 23:43:15 UTC (rev 4868) @@ -1,6 +1,6 @@ Name: Specfun -Version: 1.0.5 -Date: 2007-12-05 +Version: 1.0.6 +Date: 2008-04-06 Author: Various Authors Maintainer: The Octave Community Title: Specfun Modified: trunk/octave-forge/main/special-matrix/DESCRIPTION =================================================================== --- trunk/octave-forge/main/special-matrix/DESCRIPTION 2008-04-06 23:36:22 UTC (rev 4867) +++ trunk/octave-forge/main/special-matrix/DESCRIPTION 2008-04-06 23:43:15 UTC (rev 4868) @@ -1,6 +1,6 @@ Name: special-matrix -Version: 1.0.4 -Date: 2007-12-05 +Version: 1.0.5 +Date: 2008-04-06 Author: Paul Kienzle <pki...@us...> Maintainer: Paul Kienzle <pki...@us...> Title: Special Matrices Modified: trunk/octave-forge/main/splines/DESCRIPTION =================================================================== --- trunk/octave-forge/main/splines/DESCRIPTION 2008-04-06 23:36:22 UTC (rev 4867) +++ trunk/octave-forge/main/splines/DESCRIPTION 2008-04-06 23:43:15 UTC (rev 4868) @@ -1,6 +1,6 @@ Name: splines -Version: 1.0.4 -Date: 2007-12-05 +Version: 1.0.5 +Date: 2008-04-06 Author: Kai Habel and Paul Kienzle Maintainer: Kai Habel and Paul Kienzle Title: Splines. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2008-04-07 00:57:08
|
Revision: 4872 http://octave.svn.sourceforge.net/octave/?rev=4872&view=rev Author: adb014 Date: 2008-04-06 17:57:14 -0700 (Sun, 06 Apr 2008) Log Message: ----------- Indexing fixes Modified Paths: -------------- trunk/octave-forge/main/INDEX trunk/octave-forge/main/signal/INDEX trunk/octave-forge/main/video/INDEX Modified: trunk/octave-forge/main/INDEX =================================================================== --- trunk/octave-forge/main/INDEX 2008-04-07 00:42:33 UTC (rev 4871) +++ trunk/octave-forge/main/INDEX 2008-04-07 00:57:14 UTC (rev 4872) @@ -705,6 +705,7 @@ sprintf sscanf hex2num + num2hex hex2dec bin2dec base2dec @@ -953,6 +954,8 @@ semilogx semilogy polar + compass + rose plotyy errorbar semilogxerr semilogyerr loglogerr scatter @@ -984,6 +987,7 @@ clabel pcolor Surface plots + ellipsoid mesh surf comet3 @@ -1254,6 +1258,7 @@ range skewness spearman + runlength run_count statistics studentize Modified: trunk/octave-forge/main/signal/INDEX =================================================================== --- trunk/octave-forge/main/signal/INDEX 2008-04-07 00:42:33 UTC (rev 4871) +++ trunk/octave-forge/main/signal/INDEX 2008-04-07 00:57:14 UTC (rev 4872) @@ -21,6 +21,7 @@ meyeraux morlet shanwavf + cmorwavf Filtering filtfilt filtic @@ -117,6 +118,7 @@ xcov __power Window functions + window barthannwin blackmanharris blackmannuttall Modified: trunk/octave-forge/main/video/INDEX =================================================================== --- trunk/octave-forge/main/video/INDEX 2008-04-07 00:42:33 UTC (rev 4871) +++ trunk/octave-forge/main/video/INDEX 2008-04-07 00:57:14 UTC (rev 4872) @@ -1,6 +1,5 @@ video >> Video -addframe -avifile -aviinfo -aviread - + addframe + avifile + aviinfo + aviread This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <xav...@us...> - 2008-04-07 18:49:05
|
Revision: 4887 http://octave.svn.sourceforge.net/octave/?rev=4887&view=rev Author: xavier98 Date: 2008-04-07 11:49:08 -0700 (Mon, 07 Apr 2008) Log Message: ----------- Bring SWIG wrappers up to date. Minor test fixes. Modified Paths: -------------- trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp trunk/octave-forge/main/database/src/mysql_wrap.cpp trunk/octave-forge/main/database/src/odbc_wrap.cpp trunk/octave-forge/main/database/src/postgres_wrap.cpp trunk/octave-forge/main/database/src/sqlite3_wrap.cpp trunk/octave-forge/main/database/src/tests/helpers.m trunk/octave-forge/main/database/src/tests/mysql_high.m trunk/octave-forge/main/database/src/tests/odbc_high.m trunk/octave-forge/main/database/src/tests/postgres_high.m trunk/octave-forge/main/database/src/tests/sqlite_high.m trunk/octave-forge/main/ftp/src/ftp_wrap.cpp Modified: trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp =================================================================== --- trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp 2008-04-07 18:31:27 UTC (rev 4886) +++ trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp 2008-04-07 18:49:08 UTC (rev 4887) @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). - * Version 1.3.34 + * Version 1.3.35 * * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make @@ -733,7 +733,7 @@ if (num_args > max_args && !varargs) error("function %s takes at most %i arguments", func_name, max_args); else if (num_args < min_args) - error("function %s requires at least %i arguments", func_name, max_args); + error("function %s requires at least %i arguments", func_name, min_args); else return true; return false; @@ -810,7 +810,7 @@ #define SWIG_arg_fail(arg) 0 SWIGRUNTIME swig_module_info *SWIG_Octave_GetModule(void *clientdata) { - octave_value tmp = get_global_value("__SWIG_MODULE__", true); + octave_value tmp = get_global_value("__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION, true); if (!tmp.is_defined() || !tmp.is_uint64_type()) return 0; unsigned long r = tmp.uint64_scalar_value().value(); @@ -821,7 +821,7 @@ SWIGRUNTIME void SWIG_Octave_SetModule(void *clientdata, swig_module_info *pointer) { unsigned long r = (unsigned long) pointer; assert(sizeof(r) == sizeof(swig_module_info *)); - const char *module_var = "__SWIG_MODULE__"; + const char *module_var = "__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION; link_to_global_variable(curr_sym_tab->lookup(module_var, true)); set_global_value(module_var, octave_uint64(r)); } @@ -901,6 +901,7 @@ swig_type_info **type; int director; octave_func constructor; + const char *constructor_doc; octave_func destructor; const swig_octave_member *members; const char **base_names; @@ -1114,6 +1115,14 @@ return (long) this; return (long) types[0].second.ptr; } + const char* help_text() const { + if (!types.size()) + return 0; + if (!types[0].first->clientdata) + return 0; + swig_octave_class *c = (swig_octave_class *) types[0].first->clientdata; + return c->constructor_doc; + } std::string swig_type_name() const { // * need some way to manually name subclasses. @@ -1149,10 +1158,19 @@ for (member_map::const_iterator it = members.begin(); it != members.end(); ++it) { if (it->second.first && it->second.first->method) install_builtin_function(it->second.first->method, it->first, - /*it->second.first->doc?it->second.first->doc:*/std::string()); + it->second.first->doc?it->second.first->doc:std::string()); else if (it->second.second.is_defined()) { link_to_global_variable(curr_sym_tab->lookup(it->first, true)); set_global_value(it->first, it->second.second); + + octave_swig_type *ost = Swig::swig_value_deref(it->second.second); + if (ost) { + const char* h = ost->help_text(); + if (h) { + symbol_record *sr = global_sym_tab->lookup (it->first, true); + sr->document(h); + } + } } } } @@ -1964,7 +1982,7 @@ /* -------- TYPES TABLE (END) -------- */ -#define SWIGVERSION 0x010334 +#define SWIGVERSION 0x010335 #define SWIG_VERSION SWIGVERSION @@ -2129,6 +2147,7 @@ + static octave_value_list _wrap_ANN_DBL_MAX_set(const octave_value_list& args,int nargout) { if (!SWIG_check_num_args("ANN_DBL_MAX_set",args.length(),1,1,0)) return octave_value_list(); @@ -3060,7 +3079,7 @@ }; static const char *swig_ANNpointSet_base_names[] = {0}; static const swig_type_info *swig_ANNpointSet_base[] = {0}; -static swig_octave_class _wrap_class_ANNpointSet = {"ANNpointSet", &SWIGTYPE_p_ANNpointSet,0,0,_wrap_delete_ANNpointSet,swig_ANNpointSet_members,swig_ANNpointSet_base_names,swig_ANNpointSet_base }; +static swig_octave_class _wrap_class_ANNpointSet = {"ANNpointSet", &SWIGTYPE_p_ANNpointSet,0,0,0,_wrap_delete_ANNpointSet,swig_ANNpointSet_members,swig_ANNpointSet_base_names,swig_ANNpointSet_base }; static octave_value_list _wrap_new_ANNbruteForce__SWIG_0 (const octave_value_list& args, int nargout) { ANNpointArray arg1 = (ANNpointArray) 0 ; @@ -3748,7 +3767,7 @@ }; static const char *swig_ANNbruteForce_base_names[] = {"_p_ANNpointSet",0}; static const swig_type_info *swig_ANNbruteForce_base[] = {0,0}; -static swig_octave_class _wrap_class_ANNbruteForce = {"ANNbruteForce", &SWIGTYPE_p_ANNbruteForce,0,_wrap_new_ANNbruteForce,_wrap_delete_ANNbruteForce,swig_ANNbruteForce_members,swig_ANNbruteForce_base_names,swig_ANNbruteForce_base }; +static swig_octave_class _wrap_class_ANNbruteForce = {"ANNbruteForce", &SWIGTYPE_p_ANNbruteForce,0,_wrap_new_ANNbruteForce,0,_wrap_delete_ANNbruteForce,swig_ANNbruteForce_members,swig_ANNbruteForce_base_names,swig_ANNbruteForce_base }; static octave_value_list _wrap_ANN_N_SPLIT_RULES_set(const octave_value_list& args,int nargout) { if (!SWIG_check_num_args("ANN_N_SPLIT_RULES_set",args.length(),1,1,0)) return octave_value_list(); @@ -5156,7 +5175,7 @@ }; static const char *swig_ANNkd_tree_base_names[] = {"_p_ANNpointSet",0}; static const swig_type_info *swig_ANNkd_tree_base[] = {0,0}; -static swig_octave_class _wrap_class_ANNkd_tree = {"ANNkd_tree", &SWIGTYPE_p_ANNkd_tree,0,_wrap_new_ANNkd_tree,_wrap_delete_ANNkd_tree,swig_ANNkd_tree_members,swig_ANNkd_tree_base_names,swig_ANNkd_tree_base }; +static swig_octave_class _wrap_class_ANNkd_tree = {"ANNkd_tree", &SWIGTYPE_p_ANNkd_tree,0,_wrap_new_ANNkd_tree,0,_wrap_delete_ANNkd_tree,swig_ANNkd_tree_members,swig_ANNkd_tree_base_names,swig_ANNkd_tree_base }; static octave_value_list _wrap_new_ANNbd_tree__SWIG_0 (const octave_value_list& args, int nargout) { int arg1 ; @@ -5730,7 +5749,7 @@ }; static const char *swig_ANNbd_tree_base_names[] = {"_p_ANNkd_tree",0}; static const swig_type_info *swig_ANNbd_tree_base[] = {0,0}; -static swig_octave_class _wrap_class_ANNbd_tree = {"ANNbd_tree", &SWIGTYPE_p_ANNbd_tree,0,_wrap_new_ANNbd_tree,_wrap_delete_ANNbd_tree,swig_ANNbd_tree_members,swig_ANNbd_tree_base_names,swig_ANNbd_tree_base }; +static swig_octave_class _wrap_class_ANNbd_tree = {"ANNbd_tree", &SWIGTYPE_p_ANNbd_tree,0,_wrap_new_ANNbd_tree,0,_wrap_delete_ANNbd_tree,swig_ANNbd_tree_members,swig_ANNbd_tree_base_names,swig_ANNbd_tree_base }; static octave_value_list _wrap_annMaxPtsVisit (const octave_value_list& args, int nargout) { int arg1 ; @@ -5919,7 +5938,7 @@ }; static const char *swig_ANN_exception_base_names[] = {0}; static const swig_type_info *swig_ANN_exception_base[] = {0}; -static swig_octave_class _wrap_class_ANN_exception = {"ANN_exception", &SWIGTYPE_p_ANN_exception,0,_wrap_new_ANN_exception,_wrap_delete_ANN_exception,swig_ANN_exception_members,swig_ANN_exception_base_names,swig_ANN_exception_base }; +static swig_octave_class _wrap_class_ANN_exception = {"ANN_exception", &SWIGTYPE_p_ANN_exception,0,_wrap_new_ANN_exception,0,_wrap_delete_ANN_exception,swig_ANN_exception_members,swig_ANN_exception_base_names,swig_ANN_exception_base }; static octave_value_list _wrap_ANNkdStats_dim_set (const octave_value_list& args, int nargout) { ANNkdStats *arg1 = (ANNkdStats *) 0 ; @@ -6860,7 +6879,7 @@ }; static const char *swig_ANNkdStats_base_names[] = {0}; static const swig_type_info *swig_ANNkdStats_base[] = {0}; -static swig_octave_class _wrap_class_ANNkdStats = {"ANNkdStats", &SWIGTYPE_p_ANNkdStats,0,_wrap_new_ANNkdStats,_wrap_delete_ANNkdStats,swig_ANNkdStats_members,swig_ANNkdStats_base_names,swig_ANNkdStats_base }; +static swig_octave_class _wrap_class_ANNkdStats = {"ANNkdStats", &SWIGTYPE_p_ANNkdStats,0,_wrap_new_ANNkdStats,0,_wrap_delete_ANNkdStats,swig_ANNkdStats_members,swig_ANNkdStats_base_names,swig_ANNkdStats_base }; static octave_value_list _wrap_ANNsampStat_reset (const octave_value_list& args, int nargout) { ANNsampStat *arg1 = (ANNsampStat *) 0 ; @@ -7112,7 +7131,7 @@ }; static const char *swig_ANNsampStat_base_names[] = {0}; static const swig_type_info *swig_ANNsampStat_base[] = {0}; -static swig_octave_class _wrap_class_ANNsampStat = {"ANNsampStat", &SWIGTYPE_p_ANNsampStat,0,_wrap_new_ANNsampStat,_wrap_delete_ANNsampStat,swig_ANNsampStat_members,swig_ANNsampStat_base_names,swig_ANNsampStat_base }; +static swig_octave_class _wrap_class_ANNsampStat = {"ANNsampStat", &SWIGTYPE_p_ANNsampStat,0,_wrap_new_ANNsampStat,0,_wrap_delete_ANNsampStat,swig_ANNsampStat_members,swig_ANNsampStat_base_names,swig_ANNsampStat_base }; static octave_value_list _wrap_ann_Ndata_pts_set(const octave_value_list& args,int nargout) { if (!SWIG_check_num_args("ann_Ndata_pts_set",args.length(),1,1,0)) return octave_value_list(); @@ -8289,7 +8308,7 @@ }; static const char *swig_ANNorthRect_base_names[] = {0}; static const swig_type_info *swig_ANNorthRect_base[] = {0}; -static swig_octave_class _wrap_class_ANNorthRect = {"ANNorthRect", &SWIGTYPE_p_ANNorthRect,0,_wrap_new_ANNorthRect,_wrap_delete_ANNorthRect,swig_ANNorthRect_members,swig_ANNorthRect_base_names,swig_ANNorthRect_base }; +static swig_octave_class _wrap_class_ANNorthRect = {"ANNorthRect", &SWIGTYPE_p_ANNorthRect,0,_wrap_new_ANNorthRect,0,_wrap_delete_ANNorthRect,swig_ANNorthRect_members,swig_ANNorthRect_base_names,swig_ANNorthRect_base }; static octave_value_list _wrap_annAssignRect (const octave_value_list& args, int nargout) { int arg1 ; @@ -8934,7 +8953,7 @@ }; static const char *swig_ANNorthHalfSpace_base_names[] = {0}; static const swig_type_info *swig_ANNorthHalfSpace_base[] = {0}; -static swig_octave_class _wrap_class_ANNorthHalfSpace = {"ANNorthHalfSpace", &SWIGTYPE_p_ANNorthHalfSpace,0,_wrap_new_ANNorthHalfSpace,_wrap_delete_ANNorthHalfSpace,swig_ANNorthHalfSpace_members,swig_ANNorthHalfSpace_base_names,swig_ANNorthHalfSpace_base }; +static swig_octave_class _wrap_class_ANNorthHalfSpace = {"ANNorthHalfSpace", &SWIGTYPE_p_ANNorthHalfSpace,0,_wrap_new_ANNorthHalfSpace,0,_wrap_delete_ANNorthHalfSpace,swig_ANNorthHalfSpace_members,swig_ANNorthHalfSpace_base_names,swig_ANNorthHalfSpace_base }; static const struct swig_octave_member swig_globals[] = { Modified: trunk/octave-forge/main/database/src/mysql_wrap.cpp =================================================================== --- trunk/octave-forge/main/database/src/mysql_wrap.cpp 2008-04-07 18:31:27 UTC (rev 4886) +++ trunk/octave-forge/main/database/src/mysql_wrap.cpp 2008-04-07 18:49:08 UTC (rev 4887) @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). - * Version 1.3.34 + * Version 1.3.35 * * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make @@ -733,7 +733,7 @@ if (num_args > max_args && !varargs) error("function %s takes at most %i arguments", func_name, max_args); else if (num_args < min_args) - error("function %s requires at least %i arguments", func_name, max_args); + error("function %s requires at least %i arguments", func_name, min_args); else return true; return false; @@ -810,7 +810,7 @@ #define SWIG_arg_fail(arg) 0 SWIGRUNTIME swig_module_info *SWIG_Octave_GetModule(void *clientdata) { - octave_value tmp = get_global_value("__SWIG_MODULE__", true); + octave_value tmp = get_global_value("__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION, true); if (!tmp.is_defined() || !tmp.is_uint64_type()) return 0; unsigned long r = tmp.uint64_scalar_value().value(); @@ -821,7 +821,7 @@ SWIGRUNTIME void SWIG_Octave_SetModule(void *clientdata, swig_module_info *pointer) { unsigned long r = (unsigned long) pointer; assert(sizeof(r) == sizeof(swig_module_info *)); - const char *module_var = "__SWIG_MODULE__"; + const char *module_var = "__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION; link_to_global_variable(curr_sym_tab->lookup(module_var, true)); set_global_value(module_var, octave_uint64(r)); } @@ -901,6 +901,7 @@ swig_type_info **type; int director; octave_func constructor; + const char *constructor_doc; octave_func destructor; const swig_octave_member *members; const char **base_names; @@ -1114,6 +1115,14 @@ return (long) this; return (long) types[0].second.ptr; } + const char* help_text() const { + if (!types.size()) + return 0; + if (!types[0].first->clientdata) + return 0; + swig_octave_class *c = (swig_octave_class *) types[0].first->clientdata; + return c->constructor_doc; + } std::string swig_type_name() const { // * need some way to manually name subclasses. @@ -1149,10 +1158,19 @@ for (member_map::const_iterator it = members.begin(); it != members.end(); ++it) { if (it->second.first && it->second.first->method) install_builtin_function(it->second.first->method, it->first, - /*it->second.first->doc?it->second.first->doc:*/std::string()); + it->second.first->doc?it->second.first->doc:std::string()); else if (it->second.second.is_defined()) { link_to_global_variable(curr_sym_tab->lookup(it->first, true)); set_global_value(it->first, it->second.second); + + octave_swig_type *ost = Swig::swig_value_deref(it->second.second); + if (ost) { + const char* h = ost->help_text(); + if (h) { + symbol_record *sr = global_sym_tab->lookup (it->first, true); + sr->document(h); + } + } } } } @@ -1997,7 +2015,7 @@ /* -------- TYPES TABLE (END) -------- */ -#define SWIGVERSION 0x010334 +#define SWIGVERSION 0x010335 #define SWIG_VERSION SWIGVERSION @@ -2350,6 +2368,7 @@ } }; + static octave_value_list _wrap_MYSQL_ROW___paren (const octave_value_list& args, int nargout) { MYSQL_ROW *arg1 = (MYSQL_ROW *) 0 ; int arg2 ; @@ -2431,7 +2450,7 @@ }; static const char *swig_MYSQL_ROW_base_names[] = {0}; static const swig_type_info *swig_MYSQL_ROW_base[] = {0}; -static swig_octave_class _wrap_class_MYSQL_ROW = {"MYSQL_ROW", &SWIGTYPE_p_MYSQL_ROW,0,_wrap_new_MYSQL_ROW,_wrap_delete_MYSQL_ROW,swig_MYSQL_ROW_members,swig_MYSQL_ROW_base_names,swig_MYSQL_ROW_base }; +static swig_octave_class _wrap_class_MYSQL_ROW = {"MYSQL_ROW", &SWIGTYPE_p_MYSQL_ROW,0,_wrap_new_MYSQL_ROW,0,_wrap_delete_MYSQL_ROW,swig_MYSQL_ROW_members,swig_MYSQL_ROW_base_names,swig_MYSQL_ROW_base }; static octave_value_list _wrap_MYSQL_FIELD_name_set (const octave_value_list& args, int nargout) { MYSQL_FIELD *arg1 = (MYSQL_FIELD *) 0 ; @@ -3709,7 +3728,7 @@ }; static const char *swig_MYSQL_FIELD_base_names[] = {0}; static const swig_type_info *swig_MYSQL_FIELD_base[] = {0}; -static swig_octave_class _wrap_class_MYSQL_FIELD = {"MYSQL_FIELD", &SWIGTYPE_p_st_mysql_field,0,_wrap_new_MYSQL_FIELD,_wrap_delete_MYSQL_FIELD,swig_MYSQL_FIELD_members,swig_MYSQL_FIELD_base_names,swig_MYSQL_FIELD_base }; +static swig_octave_class _wrap_class_MYSQL_FIELD = {"MYSQL_FIELD", &SWIGTYPE_p_st_mysql_field,0,_wrap_new_MYSQL_FIELD,0,_wrap_delete_MYSQL_FIELD,swig_MYSQL_FIELD_members,swig_MYSQL_FIELD_base_names,swig_MYSQL_FIELD_base }; static octave_value_list _wrap_MYSQL_ROWS_next_set (const octave_value_list& args, int nargout) { MYSQL_ROWS *arg1 = (MYSQL_ROWS *) 0 ; @@ -3935,7 +3954,7 @@ }; static const char *swig_MYSQL_ROWS_base_names[] = {0}; static const swig_type_info *swig_MYSQL_ROWS_base[] = {0}; -static swig_octave_class _wrap_class_MYSQL_ROWS = {"MYSQL_ROWS", &SWIGTYPE_p_st_mysql_rows,0,_wrap_new_MYSQL_ROWS,_wrap_delete_MYSQL_ROWS,swig_MYSQL_ROWS_members,swig_MYSQL_ROWS_base_names,swig_MYSQL_ROWS_base }; +static swig_octave_class _wrap_class_MYSQL_ROWS = {"MYSQL_ROWS", &SWIGTYPE_p_st_mysql_rows,0,_wrap_new_MYSQL_ROWS,0,_wrap_delete_MYSQL_ROWS,swig_MYSQL_ROWS_members,swig_MYSQL_ROWS_base_names,swig_MYSQL_ROWS_base }; static octave_value_list _wrap_MYSQL_DATA_rows_set (const octave_value_list& args, int nargout) { MYSQL_DATA *arg1 = (MYSQL_DATA *) 0 ; @@ -4285,7 +4304,7 @@ }; static const char *swig_MYSQL_DATA_base_names[] = {0}; static const swig_type_info *swig_MYSQL_DATA_base[] = {0}; -static swig_octave_class _wrap_class_MYSQL_DATA = {"MYSQL_DATA", &SWIGTYPE_p_st_mysql_data,0,_wrap_new_MYSQL_DATA,_wrap_delete_MYSQL_DATA,swig_MYSQL_DATA_members,swig_MYSQL_DATA_base_names,swig_MYSQL_DATA_base }; +static swig_octave_class _wrap_class_MYSQL_DATA = {"MYSQL_DATA", &SWIGTYPE_p_st_mysql_data,0,_wrap_new_MYSQL_DATA,0,_wrap_delete_MYSQL_DATA,swig_MYSQL_DATA_members,swig_MYSQL_DATA_base_names,swig_MYSQL_DATA_base }; static octave_value_list _wrap_st_mysql_options_connect_timeout_set (const octave_value_list& args, int nargout) { st_mysql_options *arg1 = (st_mysql_options *) 0 ; @@ -6795,7 +6814,7 @@ }; static const char *swig_st_mysql_options_base_names[] = {0}; static const swig_type_info *swig_st_mysql_options_base[] = {0}; -static swig_octave_class _wrap_class_st_mysql_options = {"st_mysql_options", &SWIGTYPE_p_st_mysql_options,0,_wrap_new_st_mysql_options,_wrap_delete_st_mysql_options,swig_st_mysql_options_members,swig_st_mysql_options_base_names,swig_st_mysql_options_base }; +static swig_octave_class _wrap_class_st_mysql_options = {"st_mysql_options", &SWIGTYPE_p_st_mysql_options,0,_wrap_new_st_mysql_options,0,_wrap_delete_st_mysql_options,swig_st_mysql_options_members,swig_st_mysql_options_base_names,swig_st_mysql_options_base }; static octave_value_list _wrap_MY_CHARSET_INFO_number_set (const octave_value_list& args, int nargout) { MY_CHARSET_INFO *arg1 = (MY_CHARSET_INFO *) 0 ; @@ -7340,7 +7359,7 @@ }; static const char *swig_MY_CHARSET_INFO_base_names[] = {0}; static const swig_type_info *swig_MY_CHARSET_INFO_base[] = {0}; -static swig_octave_class _wrap_class_MY_CHARSET_INFO = {"MY_CHARSET_INFO", &SWIGTYPE_p_character_set,0,_wrap_new_MY_CHARSET_INFO,_wrap_delete_MY_CHARSET_INFO,swig_MY_CHARSET_INFO_members,swig_MY_CHARSET_INFO_base_names,swig_MY_CHARSET_INFO_base }; +static swig_octave_class _wrap_class_MY_CHARSET_INFO = {"MY_CHARSET_INFO", &SWIGTYPE_p_character_set,0,_wrap_new_MY_CHARSET_INFO,0,_wrap_delete_MY_CHARSET_INFO,swig_MY_CHARSET_INFO_members,swig_MY_CHARSET_INFO_base_names,swig_MY_CHARSET_INFO_base }; static octave_value_list _wrap_MYSQL_net_set (const octave_value_list& args, int nargout) { MYSQL *arg1 = (MYSQL *) 0 ; @@ -9845,7 +9864,7 @@ }; static const char *swig_MYSQL_base_names[] = {0}; static const swig_type_info *swig_MYSQL_base[] = {0}; -static swig_octave_class _wrap_class_MYSQL = {"MYSQL", &SWIGTYPE_p_st_mysql,0,_wrap_new_MYSQL,_wrap_delete_MYSQL,swig_MYSQL_members,swig_MYSQL_base_names,swig_MYSQL_base }; +static swig_octave_class _wrap_class_MYSQL = {"MYSQL", &SWIGTYPE_p_st_mysql,0,_wrap_new_MYSQL,0,_wrap_delete_MYSQL,swig_MYSQL_members,swig_MYSQL_base_names,swig_MYSQL_base }; static octave_value_list _wrap_MYSQL_RES_row_count_set (const octave_value_list& args, int nargout) { MYSQL_RES *arg1 = (MYSQL_RES *) 0 ; @@ -10738,7 +10757,7 @@ }; static const char *swig_MYSQL_RES_base_names[] = {0}; static const swig_type_info *swig_MYSQL_RES_base[] = {0}; -static swig_octave_class _wrap_class_MYSQL_RES = {"MYSQL_RES", &SWIGTYPE_p_st_mysql_res,0,_wrap_new_MYSQL_RES,_wrap_delete_MYSQL_RES,swig_MYSQL_RES_members,swig_MYSQL_RES_base_names,swig_MYSQL_RES_base }; +static swig_octave_class _wrap_class_MYSQL_RES = {"MYSQL_RES", &SWIGTYPE_p_st_mysql_res,0,_wrap_new_MYSQL_RES,0,_wrap_delete_MYSQL_RES,swig_MYSQL_RES_members,swig_MYSQL_RES_base_names,swig_MYSQL_RES_base }; static octave_value_list _wrap_MYSQL_MANAGER_net_set (const octave_value_list& args, int nargout) { MYSQL_MANAGER *arg1 = (MYSQL_MANAGER *) 0 ; @@ -11679,7 +11698,7 @@ }; static const char *swig_MYSQL_MANAGER_base_names[] = {0}; static const swig_type_info *swig_MYSQL_MANAGER_base[] = {0}; -static swig_octave_class _wrap_class_MYSQL_MANAGER = {"MYSQL_MANAGER", &SWIGTYPE_p_st_mysql_manager,0,_wrap_new_MYSQL_MANAGER,_wrap_delete_MYSQL_MANAGER,swig_MYSQL_MANAGER_members,swig_MYSQL_MANAGER_base_names,swig_MYSQL_MANAGER_base }; +static swig_octave_class _wrap_class_MYSQL_MANAGER = {"MYSQL_MANAGER", &SWIGTYPE_p_st_mysql_manager,0,_wrap_new_MYSQL_MANAGER,0,_wrap_delete_MYSQL_MANAGER,swig_MYSQL_MANAGER_members,swig_MYSQL_MANAGER_base_names,swig_MYSQL_MANAGER_base }; static octave_value_list _wrap_MYSQL_PARAMETERS_p_max_allowed_packet_set (const octave_value_list& args, int nargout) { MYSQL_PARAMETERS *arg1 = (MYSQL_PARAMETERS *) 0 ; @@ -11846,7 +11865,7 @@ }; static const char *swig_MYSQL_PARAMETERS_base_names[] = {0}; static const swig_type_info *swig_MYSQL_PARAMETERS_base[] = {0}; -static swig_octave_class _wrap_class_MYSQL_PARAMETERS = {"MYSQL_PARAMETERS", &SWIGTYPE_p_st_mysql_parameters,0,_wrap_new_MYSQL_PARAMETERS,_wrap_delete_MYSQL_PARAMETERS,swig_MYSQL_PARAMETERS_members,swig_MYSQL_PARAMETERS_base_names,swig_MYSQL_PARAMETERS_base }; +static swig_octave_class _wrap_class_MYSQL_PARAMETERS = {"MYSQL_PARAMETERS", &SWIGTYPE_p_st_mysql_parameters,0,_wrap_new_MYSQL_PARAMETERS,0,_wrap_delete_MYSQL_PARAMETERS,swig_MYSQL_PARAMETERS_members,swig_MYSQL_PARAMETERS_base_names,swig_MYSQL_PARAMETERS_base }; static octave_value_list _wrap_mysql_server_init (const octave_value_list& args, int nargout) { int arg1 ; @@ -15901,7 +15920,7 @@ }; static const char *swig_MYSQL_BIND_base_names[] = {0}; static const swig_type_info *swig_MYSQL_BIND_base[] = {0}; -static swig_octave_class _wrap_class_MYSQL_BIND = {"MYSQL_BIND", &SWIGTYPE_p_st_mysql_bind,0,_wrap_new_MYSQL_BIND,_wrap_delete_MYSQL_BIND,swig_MYSQL_BIND_members,swig_MYSQL_BIND_base_names,swig_MYSQL_BIND_base }; +static swig_octave_class _wrap_class_MYSQL_BIND = {"MYSQL_BIND", &SWIGTYPE_p_st_mysql_bind,0,_wrap_new_MYSQL_BIND,0,_wrap_delete_MYSQL_BIND,swig_MYSQL_BIND_members,swig_MYSQL_BIND_base_names,swig_MYSQL_BIND_base }; static octave_value_list _wrap_MYSQL_STMT_mem_root_set (const octave_value_list& args, int nargout) { MYSQL_STMT *arg1 = (MYSQL_STMT *) 0 ; @@ -17531,7 +17550,7 @@ }; static const char *swig_MYSQL_STMT_base_names[] = {0}; static const swig_type_info *swig_MYSQL_STMT_base[] = {0}; -static swig_octave_class _wrap_class_MYSQL_STMT = {"MYSQL_STMT", &SWIGTYPE_p_st_mysql_stmt,0,_wrap_new_MYSQL_STMT,_wrap_delete_MYSQL_STMT,swig_MYSQL_STMT_members,swig_MYSQL_STMT_base_names,swig_MYSQL_STMT_base }; +static swig_octave_class _wrap_class_MYSQL_STMT = {"MYSQL_STMT", &SWIGTYPE_p_st_mysql_stmt,0,_wrap_new_MYSQL_STMT,0,_wrap_delete_MYSQL_STMT,swig_MYSQL_STMT_members,swig_MYSQL_STMT_base_names,swig_MYSQL_STMT_base }; static octave_value_list _wrap_MYSQL_METHODS_read_query_result_set (const octave_value_list& args, int nargout) { MYSQL_METHODS *arg1 = (MYSQL_METHODS *) 0 ; @@ -18508,7 +18527,7 @@ }; static const char *swig_MYSQL_METHODS_base_names[] = {0}; static const swig_type_info *swig_MYSQL_METHODS_base[] = {0}; -static swig_octave_class _wrap_class_MYSQL_METHODS = {"MYSQL_METHODS", &SWIGTYPE_p_st_mysql_methods,0,_wrap_new_MYSQL_METHODS,_wrap_delete_MYSQL_METHODS,swig_MYSQL_METHODS_members,swig_MYSQL_METHODS_base_names,swig_MYSQL_METHODS_base }; +static swig_octave_class _wrap_class_MYSQL_METHODS = {"MYSQL_METHODS", &SWIGTYPE_p_st_mysql_methods,0,_wrap_new_MYSQL_METHODS,0,_wrap_delete_MYSQL_METHODS,swig_MYSQL_METHODS_members,swig_MYSQL_METHODS_base_names,swig_MYSQL_METHODS_base }; static octave_value_list _wrap_mysql_stmt_init (const octave_value_list& args, int nargout) { MYSQL *arg1 = (MYSQL *) 0 ; @@ -19547,7 +19566,7 @@ }; static const char *swig_generic_db_base_names[] = {0}; static const swig_type_info *swig_generic_db_base[] = {0}; -static swig_octave_class _wrap_class_generic_db = {"generic_db", &SWIGTYPE_p_generic_db,0,0,_wrap_delete_generic_db,swig_generic_db_members,swig_generic_db_base_names,swig_generic_db_base }; +static swig_octave_class _wrap_class_generic_db = {"generic_db", &SWIGTYPE_p_generic_db,0,0,0,_wrap_delete_generic_db,swig_generic_db_members,swig_generic_db_base_names,swig_generic_db_base }; static octave_value_list _wrap_mysql_db_db_set (const octave_value_list& args, int nargout) { mysql_db *arg1 = (mysql_db *) 0 ; @@ -19731,7 +19750,7 @@ }; static const char *swig_mysql_db_base_names[] = {"_p_generic_db",0}; static const swig_type_info *swig_mysql_db_base[] = {0,0}; -static swig_octave_class _wrap_class_mysql_db = {"mysql_db", &SWIGTYPE_p_mysql_db,0,_wrap_new_mysql_db,_wrap_delete_mysql_db,swig_mysql_db_members,swig_mysql_db_base_names,swig_mysql_db_base }; +static swig_octave_class _wrap_class_mysql_db = {"mysql_db", &SWIGTYPE_p_mysql_db,0,_wrap_new_mysql_db,0,_wrap_delete_mysql_db,swig_mysql_db_members,swig_mysql_db_base_names,swig_mysql_db_base }; static const struct swig_octave_member swig_globals[] = { Modified: trunk/octave-forge/main/database/src/odbc_wrap.cpp =================================================================== --- trunk/octave-forge/main/database/src/odbc_wrap.cpp 2008-04-07 18:31:27 UTC (rev 4886) +++ trunk/octave-forge/main/database/src/odbc_wrap.cpp 2008-04-07 18:49:08 UTC (rev 4887) @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). - * Version 1.3.34 + * Version 1.3.35 * * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make @@ -733,7 +733,7 @@ if (num_args > max_args && !varargs) error("function %s takes at most %i arguments", func_name, max_args); else if (num_args < min_args) - error("function %s requires at least %i arguments", func_name, max_args); + error("function %s requires at least %i arguments", func_name, min_args); else return true; return false; @@ -810,7 +810,7 @@ #define SWIG_arg_fail(arg) 0 SWIGRUNTIME swig_module_info *SWIG_Octave_GetModule(void *clientdata) { - octave_value tmp = get_global_value("__SWIG_MODULE__", true); + octave_value tmp = get_global_value("__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION, true); if (!tmp.is_defined() || !tmp.is_uint64_type()) return 0; unsigned long r = tmp.uint64_scalar_value().value(); @@ -821,7 +821,7 @@ SWIGRUNTIME void SWIG_Octave_SetModule(void *clientdata, swig_module_info *pointer) { unsigned long r = (unsigned long) pointer; assert(sizeof(r) == sizeof(swig_module_info *)); - const char *module_var = "__SWIG_MODULE__"; + const char *module_var = "__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION; link_to_global_variable(curr_sym_tab->lookup(module_var, true)); set_global_value(module_var, octave_uint64(r)); } @@ -901,6 +901,7 @@ swig_type_info **type; int director; octave_func constructor; + const char *constructor_doc; octave_func destructor; const swig_octave_member *members; const char **base_names; @@ -1114,6 +1115,14 @@ return (long) this; return (long) types[0].second.ptr; } + const char* help_text() const { + if (!types.size()) + return 0; + if (!types[0].first->clientdata) + return 0; + swig_octave_class *c = (swig_octave_class *) types[0].first->clientdata; + return c->constructor_doc; + } std::string swig_type_name() const { // * need some way to manually name subclasses. @@ -1149,10 +1158,19 @@ for (member_map::const_iterator it = members.begin(); it != members.end(); ++it) { if (it->second.first && it->second.first->method) install_builtin_function(it->second.first->method, it->first, - /*it->second.first->doc?it->second.first->doc:*/std::string()); + it->second.first->doc?it->second.first->doc:std::string()); else if (it->second.second.is_defined()) { link_to_global_variable(curr_sym_tab->lookup(it->first, true)); set_global_value(it->first, it->second.second); + + octave_swig_type *ost = Swig::swig_value_deref(it->second.second); + if (ost) { + const char* h = ost->help_text(); + if (h) { + symbol_record *sr = global_sym_tab->lookup (it->first, true); + sr->document(h); + } + } } } } @@ -1974,7 +1992,7 @@ /* -------- TYPES TABLE (END) -------- */ -#define SWIGVERSION 0x010334 +#define SWIGVERSION 0x010335 #define SWIG_VERSION SWIGVERSION @@ -2402,6 +2420,7 @@ }; + static octave_value_list _wrap_DATE_STRUCT_year_set (const octave_value_list& args, int nargout) { DATE_STRUCT *arg1 = (DATE_STRUCT *) 0 ; SQLSMALLINT arg2 ; @@ -2626,7 +2645,7 @@ }; static const char *swig_DATE_STRUCT_base_names[] = {0}; static const swig_type_info *swig_DATE_STRUCT_base[] = {0}; -static swig_octave_class _wrap_class_DATE_STRUCT = {"DATE_STRUCT", &SWIGTYPE_p_tagDATE_STRUCT,0,_wrap_new_DATE_STRUCT,_wrap_delete_DATE_STRUCT,swig_DATE_STRUCT_members,swig_DATE_STRUCT_base_names,swig_DATE_STRUCT_base }; +static swig_octave_class _wrap_class_DATE_STRUCT = {"DATE_STRUCT", &SWIGTYPE_p_tagDATE_STRUCT,0,_wrap_new_DATE_STRUCT,0,_wrap_delete_DATE_STRUCT,swig_DATE_STRUCT_members,swig_DATE_STRUCT_base_names,swig_DATE_STRUCT_base }; static octave_value_list _wrap_TIME_STRUCT_hour_set (const octave_value_list& args, int nargout) { TIME_STRUCT *arg1 = (TIME_STRUCT *) 0 ; @@ -2852,7 +2871,7 @@ }; static const char *swig_TIME_STRUCT_base_names[] = {0}; static const swig_type_info *swig_TIME_STRUCT_base[] = {0}; -static swig_octave_class _wrap_class_TIME_STRUCT = {"TIME_STRUCT", &SWIGTYPE_p_tagTIME_STRUCT,0,_wrap_new_TIME_STRUCT,_wrap_delete_TIME_STRUCT,swig_TIME_STRUCT_members,swig_TIME_STRUCT_base_names,swig_TIME_STRUCT_base }; +static swig_octave_class _wrap_class_TIME_STRUCT = {"TIME_STRUCT", &SWIGTYPE_p_tagTIME_STRUCT,0,_wrap_new_TIME_STRUCT,0,_wrap_delete_TIME_STRUCT,swig_TIME_STRUCT_members,swig_TIME_STRUCT_base_names,swig_TIME_STRUCT_base }; static octave_value_list _wrap_TIMESTAMP_STRUCT_year_set (const octave_value_list& args, int nargout) { TIMESTAMP_STRUCT *arg1 = (TIMESTAMP_STRUCT *) 0 ; @@ -3314,7 +3333,7 @@ }; static const char *swig_TIMESTAMP_STRUCT_base_names[] = {0}; static const swig_type_info *swig_TIMESTAMP_STRUCT_base[] = {0}; -static swig_octave_class _wrap_class_TIMESTAMP_STRUCT = {"TIMESTAMP_STRUCT", &SWIGTYPE_p_tagTIMESTAMP_STRUCT,0,_wrap_new_TIMESTAMP_STRUCT,_wrap_delete_TIMESTAMP_STRUCT,swig_TIMESTAMP_STRUCT_members,swig_TIMESTAMP_STRUCT_base_names,swig_TIMESTAMP_STRUCT_base }; +static swig_octave_class _wrap_class_TIMESTAMP_STRUCT = {"TIMESTAMP_STRUCT", &SWIGTYPE_p_tagTIMESTAMP_STRUCT,0,_wrap_new_TIMESTAMP_STRUCT,0,_wrap_delete_TIMESTAMP_STRUCT,swig_TIMESTAMP_STRUCT_members,swig_TIMESTAMP_STRUCT_base_names,swig_TIMESTAMP_STRUCT_base }; static octave_value_list _wrap_SQL_YEAR_MONTH_STRUCT_year_set (const octave_value_list& args, int nargout) { SQL_YEAR_MONTH_STRUCT *arg1 = (SQL_YEAR_MONTH_STRUCT *) 0 ; @@ -3481,7 +3500,7 @@ }; static const char *swig_SQL_YEAR_MONTH_STRUCT_base_names[] = {0}; static const swig_type_info *swig_SQL_YEAR_MONTH_STRUCT_base[] = {0}; -static swig_octave_class _wrap_class_SQL_YEAR_MONTH_STRUCT = {"SQL_YEAR_MONTH_STRUCT", &SWIGTYPE_p_tagSQL_YEAR_MONTH,0,_wrap_new_SQL_YEAR_MONTH_STRUCT,_wrap_delete_SQL_YEAR_MONTH_STRUCT,swig_SQL_YEAR_MONTH_STRUCT_members,swig_SQL_YEAR_MONTH_STRUCT_base_names,swig_SQL_YEAR_MONTH_STRUCT_base }; +static swig_octave_class _wrap_class_SQL_YEAR_MONTH_STRUCT = {"SQL_YEAR_MONTH_STRUCT", &SWIGTYPE_p_tagSQL_YEAR_MONTH,0,_wrap_new_SQL_YEAR_MONTH_STRUCT,0,_wrap_delete_SQL_YEAR_MONTH_STRUCT,swig_SQL_YEAR_MONTH_STRUCT_members,swig_SQL_YEAR_MONTH_STRUCT_base_names,swig_SQL_YEAR_MONTH_STRUCT_base }; static octave_value_list _wrap_SQL_DAY_SECOND_STRUCT_day_set (const octave_value_list& args, int nargout) { SQL_DAY_SECOND_STRUCT *arg1 = (SQL_DAY_SECOND_STRUCT *) 0 ; @@ -3825,7 +3844,7 @@ }; static const char *swig_SQL_DAY_SECOND_STRUCT_base_names[] = {0}; static const swig_type_info *swig_SQL_DAY_SECOND_STRUCT_base[] = {0}; -static swig_octave_class _wrap_class_SQL_DAY_SECOND_STRUCT = {"SQL_DAY_SECOND_STRUCT", &SWIGTYPE_p_tagSQL_DAY_SECOND,0,_wrap_new_SQL_DAY_SECOND_STRUCT,_wrap_delete_SQL_DAY_SECOND_STRUCT,swig_SQL_DAY_SECOND_STRUCT_members,swig_SQL_DAY_SECOND_STRUCT_base_names,swig_SQL_DAY_SECOND_STRUCT_base }; +static swig_octave_class _wrap_class_SQL_DAY_SECOND_STRUCT = {"SQL_DAY_SECOND_STRUCT", &SWIGTYPE_p_tagSQL_DAY_SECOND,0,_wrap_new_SQL_DAY_SECOND_STRUCT,0,_wrap_delete_SQL_DAY_SECOND_STRUCT,swig_SQL_DAY_SECOND_STRUCT_members,swig_SQL_DAY_SECOND_STRUCT_base_names,swig_SQL_DAY_SECOND_STRUCT_base }; static octave_value_list _wrap_SQL_INTERVAL_STRUCT_interval_type_set (const octave_value_list& args, int nargout) { SQL_INTERVAL_STRUCT *arg1 = (SQL_INTERVAL_STRUCT *) 0 ; @@ -4018,7 +4037,7 @@ }; static const char *swig_SQL_INTERVAL_STRUCT_base_names[] = {0}; static const swig_type_info *swig_SQL_INTERVAL_STRUCT_base[] = {0}; -static swig_octave_class _wrap_class_SQL_INTERVAL_STRUCT = {"SQL_INTERVAL_STRUCT", &SWIGTYPE_p_tagSQL_INTERVAL_STRUCT,0,_wrap_new_SQL_INTERVAL_STRUCT,_wrap_delete_SQL_INTERVAL_STRUCT,swig_SQL_INTERVAL_STRUCT_members,swig_SQL_INTERVAL_STRUCT_base_names,swig_SQL_INTERVAL_STRUCT_base }; +static swig_octave_class _wrap_class_SQL_INTERVAL_STRUCT = {"SQL_INTERVAL_STRUCT", &SWIGTYPE_p_tagSQL_INTERVAL_STRUCT,0,_wrap_new_SQL_INTERVAL_STRUCT,0,_wrap_delete_SQL_INTERVAL_STRUCT,swig_SQL_INTERVAL_STRUCT_members,swig_SQL_INTERVAL_STRUCT_base_names,swig_SQL_INTERVAL_STRUCT_base }; static octave_value_list _wrap_SQL_INTERVAL_STRUCT_intval_year_month_set (const octave_value_list& args, int nargout) { SQL_INTERVAL_STRUCT_intval *arg1 = (SQL_INTERVAL_STRUCT_intval *) 0 ; @@ -4185,7 +4204,7 @@ }; static const char *swig_SQL_INTERVAL_STRUCT_intval_base_names[] = {0}; static const swig_type_info *swig_SQL_INTERVAL_STRUCT_intval_base[] = {0}; -static swig_octave_class _wrap_class_SQL_INTERVAL_STRUCT_intval = {"SQL_INTERVAL_STRUCT_intval", &SWIGTYPE_p_SQL_INTERVAL_STRUCT_intval,0,_wrap_new_SQL_INTERVAL_STRUCT_intval,_wrap_delete_SQL_INTERVAL_STRUCT_intval,swig_SQL_INTERVAL_STRUCT_intval_members,swig_SQL_INTERVAL_STRUCT_intval_base_names,swig_SQL_INTERVAL_STRUCT_intval_base }; +static swig_octave_class _wrap_class_SQL_INTERVAL_STRUCT_intval = {"SQL_INTERVAL_STRUCT_intval", &SWIGTYPE_p_SQL_INTERVAL_STRUCT_intval,0,_wrap_new_SQL_INTERVAL_STRUCT_intval,0,_wrap_delete_SQL_INTERVAL_STRUCT_intval,swig_SQL_INTERVAL_STRUCT_intval_members,swig_SQL_INTERVAL_STRUCT_intval_base_names,swig_SQL_INTERVAL_STRUCT_intval_base }; static octave_value_list _wrap___bigint_struct_hiword_set (const octave_value_list& args, int nargout) { __bigint_struct *arg1 = (__bigint_struct *) 0 ; @@ -4352,7 +4371,7 @@ }; static const char *swig___bigint_struct_base_names[] = {0}; static const swig_type_info *swig___bigint_struct_base[] = {0}; -static swig_octave_class _wrap_class___bigint_struct = {"__bigint_struct", &SWIGTYPE_p___bigint_struct,0,_wrap_new___bigint_struct,_wrap_delete___bigint_struct,swig___bigint_struct_members,swig___bigint_struct_base_names,swig___bigint_struct_base }; +static swig_octave_class _wrap_class___bigint_struct = {"__bigint_struct", &SWIGTYPE_p___bigint_struct,0,_wrap_new___bigint_struct,0,_wrap_delete___bigint_struct,swig___bigint_struct_members,swig___bigint_struct_base_names,swig___bigint_struct_base }; static octave_value_list _wrap___bigint_struct_u_hiword_set (const octave_value_list& args, int nargout) { __bigint_struct_u *arg1 = (__bigint_struct_u *) 0 ; @@ -4519,7 +4538,7 @@ }; static const char *swig___bigint_struct_u_base_names[] = {0}; static const swig_type_info *swig___bigint_struct_u_base[] = {0}; -static swig_octave_class _wrap_class___bigint_struct_u = {"__bigint_struct_u", &SWIGTYPE_p___bigint_struct_u,0,_wrap_new___bigint_struct_u,_wrap_delete___bigint_struct_u,swig___bigint_struct_u_members,swig___bigint_struct_u_base_names,swig___bigint_struct_u_base }; +static swig_octave_class _wrap_class___bigint_struct_u = {"__bigint_struct_u", &SWIGTYPE_p___bigint_struct_u,0,_wrap_new___bigint_struct_u,0,_wrap_delete___bigint_struct_u,swig___bigint_struct_u_members,swig___bigint_struct_u_base_names,swig___bigint_struct_u_base }; static octave_value_list _wrap_SQL_NUMERIC_STRUCT_precision_set (const octave_value_list& args, int nargout) { SQL_NUMERIC_STRUCT *arg1 = (SQL_NUMERIC_STRUCT *) 0 ; @@ -4810,7 +4829,7 @@ }; static const char *swig_SQL_NUMERIC_STRUCT_base_names[] = {0}; static const swig_type_info *swig_SQL_NUMERIC_STRUCT_base[] = {0}; -static swig_octave_class _wrap_class_SQL_NUMERIC_STRUCT = {"SQL_NUMERIC_STRUCT", &SWIGTYPE_p_tagSQL_NUMERIC_STRUCT,0,_wrap_new_SQL_NUMERIC_STRUCT,_wrap_delete_SQL_NUMERIC_STRUCT,swig_SQL_NUMERIC_STRUCT_members,swig_SQL_NUMERIC_STRUCT_base_names,swig_SQL_NUMERIC_STRUCT_base }; +static swig_octave_class _wrap_class_SQL_NUMERIC_STRUCT = {"SQL_NUMERIC_STRUCT", &SWIGTYPE_p_tagSQL_NUMERIC_STRUCT,0,_wrap_new_SQL_NUMERIC_STRUCT,0,_wrap_delete_SQL_NUMERIC_STRUCT,swig_SQL_NUMERIC_STRUCT_members,swig_SQL_NUMERIC_STRUCT_base_names,swig_SQL_NUMERIC_STRUCT_base }; static octave_value_list _wrap_SQLGUID_Data1_set (const octave_value_list& args, int nargout) { SQLGUID *arg1 = (SQLGUID *) 0 ; @@ -5101,7 +5120,7 @@ }; static const char *swig_SQLGUID_base_names[] = {0}; static const swig_type_info *swig_SQLGUID_base[] = {0}; -static swig_octave_class _wrap_class_SQLGUID = {"SQLGUID", &SWIGTYPE_p_tagSQLGUID,0,_wrap_new_SQLGUID,_wrap_delete_SQLGUID,swig_SQLGUID_members,swig_SQLGUID_base_names,swig_SQLGUID_base }; +static swig_octave_class _wrap_class_SQLGUID = {"SQLGUID", &SWIGTYPE_p_tagSQLGUID,0,_wrap_new_SQLGUID,0,_wrap_delete_SQLGUID,swig_SQLGUID_members,swig_SQLGUID_base_names,swig_SQLGUID_base }; static octave_value_list _wrap_SQLDriverConnect (const octave_value_list& args, int nargout) { SQLHDBC arg1 = (SQLHDBC) 0 ; @@ -9119,7 +9138,7 @@ }; static const char *swig_generic_db_base_names[] = {0}; static const swig_type_info *swig_generic_db_base[] = {0}; -static swig_octave_class _wrap_class_generic_db = {"generic_db", &SWIGTYPE_p_generic_db,0,0,_wrap_delete_generic_db,swig_generic_db_members,swig_generic_db_base_names,swig_generic_db_base }; +static swig_octave_class _wrap_class_generic_db = {"generic_db", &SWIGTYPE_p_generic_db,0,0,0,_wrap_delete_generic_db,swig_generic_db_members,swig_generic_db_base_names,swig_generic_db_base }; static octave_value_list _wrap_SQLGetData__SWIG_1 (const octave_value_list& args, int nargout) { SQLHSTMT arg1 = (SQLHSTMT) 0 ; @@ -9451,7 +9470,7 @@ }; static const char *swig_odbc_db_base_names[] = {"_p_generic_db",0}; static const swig_type_info *swig_odbc_db_base[] = {0,0}; -static swig_octave_class _wrap_class_odbc_db = {"odbc_db", &SWIGTYPE_p_odbc_db,0,_wrap_new_odbc_db,_wrap_delete_odbc_db,swig_odbc_db_members,swig_odbc_db_base_names,swig_odbc_db_base }; +static swig_octave_class _wrap_class_odbc_db = {"odbc_db", &SWIGTYPE_p_odbc_db,0,_wrap_new_odbc_db,0,_wrap_delete_odbc_db,swig_odbc_db_members,swig_odbc_db_base_names,swig_odbc_db_base }; static const struct swig_octave_member swig_globals[] = { Modified: trunk/octave-forge/main/database/src/postgres_wrap.cpp =================================================================== --- trunk/octave-forge/main/database/src/postgres_wrap.cpp 2008-04-07 18:31:27 UTC (rev 4886) +++ trunk/octave-forge/main/database/src/postgres_wrap.cpp 2008-04-07 18:49:08 UTC (rev 4887) @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). - * Version 1.3.34 + * Version 1.3.35 * * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make @@ -733,7 +733,7 @@ if (num_args > max_args && !varargs) error("function %s takes at most %i arguments", func_name, max_args); else if (num_args < min_args) - error("function %s requires at least %i arguments", func_name, max_args); + error("function %s requires at least %i arguments", func_name, min_args); else return true; return false; @@ -810,7 +810,7 @@ #define SWIG_arg_fail(arg) 0 SWIGRUNTIME swig_module_info *SWIG_Octave_GetModule(void *clientdata) { - octave_value tmp = get_global_value("__SWIG_MODULE__", true); + octave_value tmp = get_global_value("__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION, true); if (!tmp.is_defined() || !tmp.is_uint64_type()) return 0; unsigned long r = tmp.uint64_scalar_value().value(); @@ -821,7 +821,7 @@ SWIGRUNTIME void SWIG_Octave_SetModule(void *clientdata, swig_module_info *pointer) { unsigned long r = (unsigned long) pointer; assert(sizeof(r) == sizeof(swig_module_info *)); - const char *module_var = "__SWIG_MODULE__"; + const char *module_var = "__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION; link_to_global_variable(curr_sym_tab->lookup(module_var, true)); set_global_value(module_var, octave_uint64(r)); } @@ -901,6 +901,7 @@ swig_type_info **type; int director; octave_func constructor; + const char *constructor_doc; octave_func destructor; const swig_octave_member *members; const char **base_names; @@ -1114,6 +1115,14 @@ return (long) this; return (long) types[0].second.ptr; } + const char* help_text() const { + if (!types.size()) + return 0; + if (!types[0].first->clientdata) + return 0; + swig_octave_class *c = (swig_octave_class *) types[0].first->clientdata; + return c->constructor_doc; + } std::string swig_type_name() const { // * need some way to manually name subclasses. @@ -1149,10 +1158,19 @@ for (member_map::const_iterator it = members.begin(); it != members.end(); ++it) { if (it->second.first && it->second.first->method) install_builtin_function(it->second.first->method, it->first, - /*it->second.first->doc?it->second.first->doc:*/std::string()); + it->second.first->doc?it->second.first->doc:std::string()); else if (it->second.second.is_defined()) { link_to_global_variable(curr_sym_tab->lookup(it->first, true)); set_global_value(it->first, it->second.second); + + octave_swig_type *ost = Swig::swig_value_deref(it->second.second); + if (ost) { + const char* h = ost->help_text(); + if (h) { + symbol_record *sr = global_sym_tab->lookup (it->first, true); + sr->document(h); + } + } } } } @@ -1973,7 +1991,7 @@ /* -------- TYPES TABLE (END) -------- */ -#define SWIGVERSION 0x010334 +#define SWIGVERSION 0x010335 #define SWIG_VERSION SWIGVERSION @@ -2286,6 +2304,7 @@ } }; + static octave_value_list _wrap_PGnotify_relname_set (const octave_value_list& args, int nargout) { PGnotify *arg1 = (PGnotify *) 0 ; char *arg2 = (char *) 0 ; @@ -2583,7 +2602,7 @@ }; static const char *swig_PGnotify_base_names[] = {0}; static const swig_type_info *swig_PGnotify_base[] = {0}; -static swig_octave_class _wrap_class_PGnotify = {"PGnotify", &SWIGTYPE_p_pgNotify,0,_wrap_new_PGnotify,_wrap_delete_PGnotify,swig_PGnotify_members,swig_PGnotify_base_names,swig_PGnotify_base }; +static swig_octave_class _wrap_class_PGnotify = {"PGnotify", &SWIGTYPE_p_pgNotify,0,_wrap_new_PGnotify,0,_wrap_delete_PGnotify,swig_PGnotify_members,swig_PGnotify_base_names,swig_PGnotify_base }; static octave_value_list _wrap_PQprintOpt_header_set (const octave_value_list& args, int nargout) { PQprintOpt *arg1 = (PQprintOpt *) 0 ; @@ -3243,7 +3262,7 @@ }; static const char *swig_PQprintOpt_base_names[] = {0}; static const swig_type_info *swig_PQprintOpt_base[] = {0}; -static swig_octave_class _wrap_class_PQprintOpt = {"PQprintOpt", &SWIGTYPE_p__PQprintOpt,0,_wrap_new_PQprintOpt,_wrap_delete_PQprintOpt,swig_PQprintOpt_members,swig_PQprintOpt_base_names,swig_PQprintOpt_base }; +static swig_octave_class _wrap_class_PQprintOpt = {"PQprintOpt", &SWIGTYPE_p__PQprintOpt,0,_wrap_new_PQprintOpt,0,_wrap_delete_PQprintOpt,swig_PQprintOpt_members,swig_PQprintOpt_base_names,swig_PQprintOpt_base }; static octave_value_list _wrap_PQconninfoOption_keyword_set (const octave_value_list& args, int nargout) { PQconninfoOption *arg1 = (PQconninfoOption *) 0 ; @@ -3747,7 +3766,7 @@ }; static const char *swig_PQconninfoOption_base_names[] = {0}; static const swig_type_info *swig_PQconninfoOption_base[] = {0}; -static swig_octave_class _wrap_class_PQconninfoOption = {"PQconninfoOption", &SWIGTYPE_p__PQconninfoOption,0,_wrap_new_PQconninfoOption,_wrap_delete_PQconninfoOption,swig_PQconninfoOption_members,swig_PQconninfoOption_base_names,swig_PQconninfoOption_base }; +static swig_octave_class _wrap_class_PQconninfoOption = {"PQconninfoOption", &SWIGTYPE_p__PQconninfoOption,0,_wrap_new_PQconninfoOption,0,_wrap_delete_PQconninfoOption,swig_PQconninfoOption_members,swig_PQconninfoOption_base_names,swig_PQconninfoOption_base }; static octave_value_list _wrap_PQArgBlock_len_set (const octave_value_list& args, int nargout) { PQArgBlock *arg1 = (PQArgBlock *) 0 ; @@ -3940,7 +3959,7 @@ }; static const char *swig_PQArgBlock_base_names[] = {0}; static const swig_type_info *swig_PQArgBlock_base[] = {0}; -static swig_octave_class _wrap_class_PQArgBlock = {"PQArgBlock", &SWIGTYPE_p_PQArgBlock,0,_wrap_new_PQArgBlock,_wrap_delete_PQArgBlock,swig_PQArgBlock_members,swig_PQArgBlock_base_names,swig_PQArgBlock_base }; +static swig_octave_class _wrap_class_PQArgBlock = {"PQArgBlock", &SWIGTYPE_p_PQArgBlock,0,_wrap_new_PQArgBlock,0,_wrap_delete_PQArgBlock,swig_PQArgBlock_members,swig_PQArgBlock_base_names,swig_PQArgBlock_base }; static octave_value_list _wrap_PQArgBlock_u_ptr_set (const octave_value_list& args, int nargout) { PQArgBlock_u *arg1 = (PQArgBlock_u *) 0 ; @@ -4107,7 +4126,7 @@ }; static const char *swig_PQArgBlock_u_base_names[] = {0}; static const swig_type_info *swig_PQArgBlock_u_base[] = {0}; -static swig_octave_class _wrap_class_PQArgBlock_u = {"PQArgBlock_u", &SWIGTYPE_p_PQArgBlock_u,0,_wrap_new_PQArgBlock_u,_wrap_delete_PQArgBlock_u,swig_PQArgBlock_u_members,swig_PQArgBlock_u_base_names,swig_PQArgBlock_u_base }; +static swig_octave_class _wrap_class_PQArgBlock_u = {"PQArgBlock_u", &SWIGTYPE_p_PQArgBlock_u,0,_wrap_new_PQArgBlock_u,0,_wrap_delete_PQArgBlock_u,swig_PQArgBlock_u_members,swig_PQArgBlock_u_base_names,swig_PQArgBlock_u_base }; static octave_value_list _wrap_PQconnectStart (const octave_value_list& args, int nargout) { char *arg1 = (char *) 0 ; @@ -8268,7 +8287,7 @@ }; static const char *swig_generic_db_base_names[] = {0}; static const swig_type_info *swig_generic_db_base[] = {0}; -static swig_octave_class _wrap_class_generic_db = {"generic_db", &SWIGTYPE_p_generic_db,0,0,_wrap_delete_generic_db,swig_generic_db_members,swig_generic_db_base_names,swig_generic_db_base }; +static swig_octave_class _wrap_class_generic_db = {"generic_db", &SWIGTYPE_p_generic_db,0,0,0,_wrap_delete_generic_db,swig_generic_db_members,swig_generic_db_base_names,swig_generic_db_base }; static octave_value_list _wrap_postgres_db_conn_set (const octave_value_list& args, int nargout) { postgres_db *arg1 = (postgres_db *) 0 ; @@ -8422,7 +8441,7 @@ }; static const char *swig_postgres_db_base_names[] = {"_p_generic_db",0}; static const swig_type_info *swig_postgres_db_base[] = {0,0}; -static swig_octave_class _wrap_class_postgres_db = {"postgres_db", &SWIGTYPE_p_postgres_db,0,_wrap_new_postgres_db,_wrap_delete_postgres_db,swig_postgres_db_members,swig_postgres_db_base_names,swig_postgres_db_base }; +static swig_octave_class _wrap_class_postgres_db = {"postgres_db", &SWIGTYPE_p_postgres_db,0,_wrap_new_postgres_db,0,_wrap_delete_postgres_db,swig_postgres_db_members,swig_postgres_db_base_names,swig_postgres_db_base }; static const struct swig_octave_member swig_globals[] = { Modified: trunk/octave-forge/main/database/src/sqlite3_wrap.cpp =================================================================== --- trunk/octave-forge/main/database/src/sqlite3_wrap.cpp 2008-04-07 18:31:27 UTC (rev 4886) +++ trunk/octave-forge/main/database/src/sqlite3_wrap.cpp 2008-04-07 18:49:08 UTC (rev 4887) @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). - * Version 1.3.34 + * Version 1.3.35 * * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make @@ -733,7 +733,7 @@ if (num_args > max_args && !varargs) error("function %s takes at most %i arguments", func_name, max_args); else if (num_args < min_args) - error("function %s requires at least %i arguments", func_name, max_args); + error("function %s requires at least %i arguments", func_name, min_args); else return true; return false; @@ -810,7 +810,7 @@ #define SWIG_arg_fail(arg) 0 SWIGRUNTIME swig_module_info *SWIG_Octave_GetModule(void *clientdata) { - octave_value tmp = get_global_value("__SWIG_MODULE__", true); + octave_value tmp = get_global_value("__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION, true); if (!tmp.is_defined() || !tmp.is_uint64_type()) return 0; unsigned long r = tmp.uint64_scalar_value().value(); @@ -821,7 +821,7 @@ SWIGRUNTIME void SWIG_Octave_SetModule(void *clientdata, swig_module_info *pointer) { unsigned long r = (unsigned long) pointer; assert(sizeof(r) == sizeof(swig_module_info *)); - const char *module_var = "__SWIG_MODULE__"; + const char *module_var = "__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION; link_to_global_variable(curr_sym_tab->lookup(module_var, true)); set_global_value(module_var, octave_uint64(r)); } @@ -901,6 +901,7 @@ swig_type_info **type; int director; octave_func constructor; + const char *constructor_doc; octave_func destructor; const swig_octave_member *members; const char **base_names; @@ -1114,6 +1115,14 @@ return (long) this; return (long) types[0].second.ptr; } + const char* help_text() const { + if (!types.size()) + return 0; + if (!types[0].first->clientdata) + return 0; + swig_octave_class *c = (swig_octave_class *) types[0].first->clientdata; + return c->constructor_doc; + } std::string swig_type_name() const { // * need some way to manually name subclasses. @@ -1149,10 +1158,19 @@ for (member_map::const_iterator it = members.begin(); it != members.end(); ++it) { if (it->second.first && it->second.first->method) install_builtin_function(it->second.first->method, it->first, - /*it->second.first->doc?it->second.first->doc:*/std::string()); + it->second.first->doc?it->second.first->doc:std::string()); else if (it->second.second.is_defined()) { link_to_global_variable(curr_sym_tab->lookup(it->first, true)); set_global_value(it->first, it->second.second); + + octave_swig_type *ost = Swig::swig_value_deref(it->second.second); + if (ost) { + const char* h = ost->help_text(); + if (h) { + symbol_record *sr = global_sym_tab->lookup (it->first, true); + sr->document(h); + } + } } } } @@ -1996,7 +2014,7 @@ /* -------- TYPES TABLE (END) -------- */ -#define SWIGVERSION 0x010334 +#define SWIGVERSION 0x010335 #define SWIG_VERSION SWIGVERSION @@ -2310,6 +2328,7 @@ return octave_value(value); } + static octave_value_list _wrap_sqlite3_version_set(const octave_value_list& args,int nargout) { if (!SWIG_check_num_args("sqlite3_version_set",args.length(),1,1,0)) return octave_value_list(); @@ -7905,7 +7924,7 @@ }; static const char *swig_sqlite3_module_base_names[] = {0}; static const swig_type_info *swig_sqlite3_module_base[] = {0}; -static swig_octave_class _wrap_class_sqlite3_module = {"sqlite3_module", &SWIGTYPE_p_sqlite3_module,0,_wrap_new_sqlite3_module,_wrap_delete_sqlite3_module,swig_sqlite3_module_members,swig_sqlite3_module_base_names,swig_sqlite3_module_base }; +static swig_octave_class _wrap_class_sqlite3_module = {"sqlite3_module", &SWIGTYPE_p_sqlite3_module,0,_wrap_new_sqlite3_module,0,_wrap_delete_sqlite3_module,swig_sqlite3_module_members,swig_sqlite3_module_base_names,swig_sqlite3_module_base }; static octave_value_list _wrap_sqlite3_index_info_nConstraint_get (const octave_value_list& args, int nargout) { sqlite3_index_info *arg1 = (sqlite3_index_info *) 0 ; @@ -8334,7 +8353,7 @@ }; static const char *swig_sqlite3_index_info_base_names[] = {0}; static const swig_type_info *swig_sqlite3_index_info_base[] = {0}; -static swig_octave_class _wrap_class_sqlite3_index_info = {"sqlite3_index_info", &SWIGTYPE_p_sqlite3_index_info,0,_wrap_new_sqlite3_index_info,_wrap_delete_sqlite3_index_info,swig_sqlite3_index_info_members,swig_sqlite3_index_info_base_names,swig_sqlite3_index_info_base }; +static swig_octave_class _wrap_class_sqlite3_index_info = {"sqlite3_index_info", &SWIGTYPE_p_sqlite3_index_info,0,_wrap_new_sqlite3_index_info,0,_wrap_delete_sqlite3_index_info,swig_sqlite3_index_info_members,swig_sqlite3_index_info_base_names,swig_sqlite3_index_info_base }; static octave_value_list _wrap_sqlite3_index_info_aConstraintUsage_argvIndex_set (const octave_value_list& args, int nargout) { sqlite3_index_info_aConstraintUsage *arg1 = (sqlite3_index_info_aConstraintUsage *) 0 ; @@ -8501,7 +8520,7 @@ }; static const char *swig_sqlite3_index_info_aConstraintUsage_base_names[] = {0}; static const swig_type_info *swig_sqlite3_index_info_aConstraintUsage_base[] = {0}; -static swig_octave_class _wrap_class_sqlite3_index_info_aConstraintUsage = {"sqlite3_index_info_aConstraintUsage", &SWIGTYPE_p_sqlite3_index_info_aConstraintUsage,0,_wrap_new_sqlite3_index_info_aConstraintUsage,_wrap_delete_sqlite3_index_info_aConstraintUsage,swig_sqlite3_index_info_aConstraintUsage_members,swig_sqlite3_index_info_aConstraintUsage_base_names,swig_sqlite3_index_info_aConstraintUsage_base }; +static swig_octave_class _wrap_class_sqlite3_index_info_aConstraintUsage = {"sqlite3_index_info_aConstraintUsage", &SWIGTYPE_p_sqlite3_index_info_aConstraintUsage,0,_wrap_new_sqlite3_index_info_aConstraintUsage,0,_wrap_delete_sqlite3_index_info_aConstraintUsage,swig_sqlite3_index_info_aConstraintUsage_members,swig_sqlite3_index_info_aConstraintUsage_base_names,swig_sqlite3_index_info_aConstraintUsage_base }; static octave_value_list _wrap_sqlite3_create_module (const octave_value_list& args, int nargout) { sqlite3 *arg1 = (sqlite3 *) 0 ; @@ -8839,7 +8858,7 @@ }; static const char *swig_sqlite3_vtab_base_names[] = {0}; static const swig_type_info *swig_sqlite3_vtab_base[] = {0}; -static swig_octave_class _wrap_class_sqlite3_vtab = {"sqlite3_vtab", &SWIGTYPE_p_sqlite3_vtab,0,_wrap_new_sqlite3_vtab,_wrap_delete_sqlite3_vtab,swig_sqlite3_vtab_members,swig_sqlite3_vtab_base_names,swig_sqlite3_vtab_base }; +static swig_octave_class _wrap_class_sqlite3_vtab = {"sqlite3_vtab", &SWIGTYPE_p_sqlite3_vtab,0,_wrap_new_sqlite3_vtab,0,_wrap_delete_sqlite3_vtab,swig_sqlite3_vtab_members,swig_sqlite3_vtab_base_names,swig_sqlite3_vtab_base }; static octave_value_list _wrap_sqlite3_vtab_cursor_pVtab_set (const octave_value_list& args, int nargout) { sqlite3_vtab_cursor *arg1 = (sqlite3_vtab_cursor *) 0 ; @@ -8947,7 +8966,7 @@ }; static const char *swig_sqlite3_vtab_cursor_base_names[] = {0}; static const swig_type_info *swig_sqlite3_vtab_cursor_base[] = {0}; -static swig_octave_class _wrap_class_sqlite3_vtab_cursor = {"sqlite3_vtab_cursor", &SWIGTYPE_p_sqlite3_vtab_cursor,0,_wrap_new_sqlite3_vtab_cursor,_wrap_delete_sqlite3_vtab_cursor,swig_sqlite3_vtab_cursor_members,swig_sqlite3_vtab_cursor_base_names,swig_sqlite3_vtab_cursor_base }; +static swig_octave_class _wrap_class_sqlite3_vtab_cursor = {"sqlite3_vtab_cursor", &SWIGTYPE_p_sqlite3_vtab_cursor,0,_wrap_new_sqlite3_vtab_cursor,0,_wrap_delete_sqlite3_vtab_cursor,swig_sqlite3_vtab_cursor_members,swig_sqlite3_vtab_cursor_base_names,swig_sqlite3_vtab_cursor_base }; static octave_value_list _wrap_sqlite3_declare_vtab (const octave_value_list& args, int nargout) { sqlite3 *arg1 = (sqlite3 *) 0 ; @@ -9316,7 +9335,7 @@ }; static const char *swig_generic_db_base_names[] = {0}; static const swig_type_info *swig_generic_db_base[] = {0}; -static swig_octave_class _wrap_class_generic_db = {"generic_db", &SWIGTYPE_p_generic_db,0,0,_wrap_delete_generic_db,swig_generic_db_members,swig_generic_db_base_names,swig_generic_db_base }; +static swig_octave_class _wrap_class_generic_db = {"generic_db", &SWIGTYPE_p_generic_db,0,0,0,_wrap_delete_generic_db,swig_generic_db_members,swig_generic_db_base_names,swig_generic_db_base }; static octave_value_list _wrap_error_check (const octave_value_list& args, int nargout) { sqlite3 *arg1 = (sqlite3 *) 0 ; @@ -9543,7 +9562,7 @@ }; static const char *swig_sqlite3_db_base_names[] = {"_p_generic_db",0}; static const swig_type_info *swig_sqlite3_db_base[] = {0,0}; -static swig_octave_class _wrap_class_sqlite3_db = {"sqlite3_db", &SWIGTYPE_p_sqlite3_db,0,_wrap_new_sqlite3_db,_wrap_delete_sqlite3_db,swig_sqlite3_db_members,swig_sqlite3_db_base_names,swig_sqlite3_db_base }; +static swig_octave_class _wrap_class_sqlite3_db = {"sqlite3_db", &SWIGTYPE_p_sqlite3_db,0,_wrap_new_sqlite3_db,0,_wrap_delete_sqlite3_db,swig_sqlite3_db_members,swig_sqlite3_db_base_names,swig_sqlite3_db_base }; static const struct swig_octave_member swig_globals[] = { Modified: trunk/octave-forge/main/database/src/tests/helpers.m =================================================================== --- trunk/octave-forge/main/database/src/tests/helpers.m 2008-04-07 18:31:27 UTC (rev 4886) +++ trunk/octave-forge/main/database/src/tests/helpers.m 2008-04-07 18:49:08 UTC (rev 4887) @@ -1,3 +1,4 @@ +addpath("../inst"); try sql("select 2;"); error Modified: trunk/octave-forge/main/database/src/tests/mysql_high.m =================================================================== --- trunk/octave-forge/main/database/src/tests/mysql_high.m 2008-04-07 18:31:27 UTC (rev 4886) +++ trunk/octave-forge/main/database/src/tests/mysql_high.m 2008-04-07 18:49:08 UTC (rev 4887) @@ -1,3 +1,4 @@ +addpath("../inst"); mysql default_db(mysql_db("localhost","root","secret","testdb")); Modified: trunk/octave-forge/main/database/src/tests/odbc_high.m =================================================================== --- trunk/octave-forge/main/database/src/tests/odbc_high.m 2008-04-07 18:31:27 UTC (rev 4886) +++ trunk/octave-forge/main/database/src/tests/odbc_high.m 2008-04-07 18:49:08 UTC (rev 4887) @@ -1,3 +1,4 @@ +addpath("../inst"); odbc default_db(odbc_db("testdb","testuser","secret")); Modified: trunk/octave-forge/main/database/src/tests/postgres_high.m =================================================================== --- trunk/octave-forge/main/database/src/tests/postgres_high.m 2008-04-07 18:31:27 UTC (rev 4886) +++ trunk/octave-forge/main/database/src/tests/postgres_high.m 2008-04-07 18:49:08 UTC (rev 4887) @@ -1,3 +1,4 @@ +addpath("../inst"); postgres default_db(postgres_db("host=localhost dbname=testdb user=testuser password='secret' ")); Modified: trunk/octave-forge/main/database/src/tests/sqlite_high.m ===... [truncated message content] |
From: <xav...@us...> - 2008-04-12 13:33:55
|
Revision: 4934 http://octave.svn.sourceforge.net/octave/?rev=4934&view=rev Author: xavier98 Date: 2008-04-12 06:33:56 -0700 (Sat, 12 Apr 2008) Log Message: ----------- Force -fPIC flag into CFLAGS if defined. Modified Paths: -------------- trunk/octave-forge/main/ann/src/configure.base trunk/octave-forge/main/database/src/configure.base trunk/octave-forge/main/ftp/src/configure.base Modified: trunk/octave-forge/main/ann/src/configure.base =================================================================== --- trunk/octave-forge/main/ann/src/configure.base 2008-04-12 13:29:24 UTC (rev 4933) +++ trunk/octave-forge/main/ann/src/configure.base 2008-04-12 13:33:56 UTC (rev 4934) @@ -170,6 +170,11 @@ CPICFLAG=`$MKOCTFILE -p CPICFLAG` LDFLAGS=`$MKOCTFILE -p LDFLAGS` LIBS=`$MKOCTFILE -p LIBS` +# add -fPIC or equivalent flags +FPICFLAGS=`$MKOCTFILE -p FPICFLAGS` +CPICFLAGS=`$MKOCTFILE -p CPICFLAGS` +FFLAGS="$FFLAGS $FPICFLAGS" +CFLAGS="$CFLAGS $CPICFLAGS" AC_SUBST(CC) AC_SUBST(CFLAGS) AC_SUBST(CPPFLAGS) Modified: trunk/octave-forge/main/database/src/configure.base =================================================================== --- trunk/octave-forge/main/database/src/configure.base 2008-04-12 13:29:24 UTC (rev 4933) +++ trunk/octave-forge/main/database/src/configure.base 2008-04-12 13:33:56 UTC (rev 4934) @@ -170,6 +170,11 @@ CPICFLAG=`$MKOCTFILE -p CPICFLAG` LDFLAGS=`$MKOCTFILE -p LDFLAGS` LIBS=`$MKOCTFILE -p LIBS` +# add -fPIC or equivalent flags +FPICFLAGS=`$MKOCTFILE -p FPICFLAGS` +CPICFLAGS=`$MKOCTFILE -p CPICFLAGS` +FFLAGS="$FFLAGS $FPICFLAGS" +CFLAGS="$CFLAGS $CPICFLAGS" AC_SUBST(CC) AC_SUBST(CFLAGS) AC_SUBST(CPPFLAGS) Modified: trunk/octave-forge/main/ftp/src/configure.base =================================================================== --- trunk/octave-forge/main/ftp/src/configure.base 2008-04-12 13:29:24 UTC (rev 4933) +++ trunk/octave-forge/main/ftp/src/configure.base 2008-04-12 13:33:56 UTC (rev 4934) @@ -170,6 +170,11 @@ CPICFLAG=`$MKOCTFILE -p CPICFLAG` LDFLAGS=`$MKOCTFILE -p LDFLAGS` LIBS=`$MKOCTFILE -p LIBS` +# add -fPIC or equivalent flags +FPICFLAGS=`$MKOCTFILE -p FPICFLAGS` +CPICFLAGS=`$MKOCTFILE -p CPICFLAGS` +FFLAGS="$FFLAGS $FPICFLAGS" +CFLAGS="$CFLAGS $CPICFLAGS" AC_SUBST(CC) AC_SUBST(CFLAGS) AC_SUBST(CPPFLAGS) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2008-04-17 15:14:14
|
Revision: 4950 http://octave.svn.sourceforge.net/octave/?rev=4950&view=rev Author: adb014 Date: 2008-04-17 08:13:42 -0700 (Thu, 17 Apr 2008) Log Message: ----------- Package the texinfo version of the manual to partially address the debian licensing concerns Modified Paths: -------------- trunk/octave-forge/main/comm/Makefile trunk/octave-forge/main/fixed/Makefile Modified: trunk/octave-forge/main/comm/Makefile =================================================================== --- trunk/octave-forge/main/comm/Makefile 2008-04-17 13:53:44 UTC (rev 4949) +++ trunk/octave-forge/main/comm/Makefile 2008-04-17 15:13:42 UTC (rev 4950) @@ -2,7 +2,7 @@ PKG_FILES = COPYING DESCRIPTION INDEX $(wildcard src/*) \ - $(wildcard inst/*) doc/comms.pdf + $(wildcard inst/*) doc/comms.pdf doc/comms.texi doc/comms.txi SUBDIRS = doc/ .PHONY: $(SUBDIRS) Modified: trunk/octave-forge/main/fixed/Makefile =================================================================== --- trunk/octave-forge/main/fixed/Makefile 2008-04-17 13:53:44 UTC (rev 4949) +++ trunk/octave-forge/main/fixed/Makefile 2008-04-17 15:13:42 UTC (rev 4950) @@ -3,6 +3,7 @@ PKG_FILES = COPYING DESCRIPTION INDEX $(wildcard src/int/*) \ $(filter-out src/int, $(wildcard src/*)) \ $(wildcard inst/*) $(wildcard examples/*) doc/fixed.pdf + doc/fixed.texi doc/fixed.txi SUBDIRS = doc/ .PHONY: $(SUBDIRS) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2008-04-18 09:12:00
|
Revision: 4956 http://octave.svn.sourceforge.net/octave/?rev=4956&view=rev Author: adb014 Date: 2008-04-18 02:11:18 -0700 (Fri, 18 Apr 2008) Log Message: ----------- Make sure that the derived texinfo files are kept so that they can be included in the package Modified Paths: -------------- trunk/octave-forge/main/comm/doc/Makefile trunk/octave-forge/main/fixed/doc/Makefile Modified: trunk/octave-forge/main/comm/doc/Makefile =================================================================== --- trunk/octave-forge/main/comm/doc/Makefile 2008-04-18 09:06:10 UTC (rev 4955) +++ trunk/octave-forge/main/comm/doc/Makefile 2008-04-18 09:11:18 UTC (rev 4956) @@ -19,7 +19,7 @@ DOCSTRINGS = DOCSTRINGS INDEX = ../INDEX TMPDELETES = *.log *.dvi $(DOCSTRINGS) $(TEXIDOC) *~ -DELETES = $(TMPDELETES) *.ps comms.pdf *.info $(DOCS) *.html comms/ html/ +DELETES = $(TMPDELETES) *.ps *.texi *.info $(DOCS) *.html comms/ html/ all : $(PDFDOC) $(HTMLDOC) ../inst/doc.info @@ -91,6 +91,7 @@ fi \ fi +.PRECIOUS: %.texi %.texi : %.txi @echo "Making texinfo $@"; \ $(RM) -f $(DOCSTRINGS); \ Modified: trunk/octave-forge/main/fixed/doc/Makefile =================================================================== --- trunk/octave-forge/main/fixed/doc/Makefile 2008-04-18 09:06:10 UTC (rev 4955) +++ trunk/octave-forge/main/fixed/doc/Makefile 2008-04-18 09:11:18 UTC (rev 4956) @@ -20,7 +20,7 @@ DOCSTRINGS = DOCSTRINGS INDEX = ../INDEX TMPDELETES = *.log *.dvi $(DOCSTRINGS) $(FIXEDVERTARGET) $(TEXIDOC) *~ -DELETES = $(TMPDELETES) *.ps fixed.pdf *.info $(DOCS) *.html fixed/ html/ +DELETES = $(TMPDELETES) *.ps *.texi *.info $(DOCS) *.html fixed/ html/ all : $(PDFDOC) $(HTMLDOC) ../inst/doc.info @@ -92,6 +92,7 @@ fi \ fi +.PRECIOUS: %.texi %.texi : %.txi $(FIXEDVERTARGET) @echo "Making texinfo $@"; \ $(RM) -f $(DOCSTRINGS); \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2008-04-21 08:31:32
|
Revision: 4960 http://octave.svn.sourceforge.net/octave/?rev=4960&view=rev Author: adb014 Date: 2008-04-21 01:31:38 -0700 (Mon, 21 Apr 2008) Log Message: ----------- Also package the source files for the documentation Modified Paths: -------------- trunk/octave-forge/main/optim/Makefile trunk/octave-forge/main/vrml/Makefile Modified: trunk/octave-forge/main/optim/Makefile =================================================================== --- trunk/octave-forge/main/optim/Makefile 2008-04-21 08:29:32 UTC (rev 4959) +++ trunk/octave-forge/main/optim/Makefile 2008-04-21 08:31:38 UTC (rev 4960) @@ -2,7 +2,8 @@ PKG_FILES = COPYING DESCRIPTION INDEX $(wildcard src/*) \ - $(wildcard inst/*) doc/*.pdf + $(wildcard inst/*) doc/*.pdf doc/*.tex \ + doc/*.lyx doc/Makefile $(wildcard doc/figures/*) SUBDIRS = doc/ .PHONY: $(SUBDIRS) Modified: trunk/octave-forge/main/vrml/Makefile =================================================================== --- trunk/octave-forge/main/vrml/Makefile 2008-04-21 08:29:32 UTC (rev 4959) +++ trunk/octave-forge/main/vrml/Makefile 2008-04-21 08:31:38 UTC (rev 4960) @@ -3,7 +3,7 @@ PKG_FILES = COPYING DESCRIPTION INDEX $(wildcard src/*) \ $(wildcard inst/*) $(wilcard data/*) doc/*.pdf doc/*.tex \ - doc/*.lyx $(wildcard doc/figures/*) + doc/*.lyx doc/Makefile $(wildcard doc/figures/*) SUBDIRS = doc/ .PHONY: $(SUBDIRS) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <xav...@us...> - 2008-04-29 21:45:55
|
Revision: 5008 http://octave.svn.sourceforge.net/octave/?rev=5008&view=rev Author: xavier98 Date: 2008-04-29 14:45:51 -0700 (Tue, 29 Apr 2008) Log Message: ----------- Update SWIG wrappers. Modified Paths: -------------- trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp trunk/octave-forge/main/database/src/mysql_wrap.cpp trunk/octave-forge/main/database/src/odbc_wrap.cpp trunk/octave-forge/main/database/src/postgres_wrap.cpp trunk/octave-forge/main/database/src/sqlite3_wrap.cpp trunk/octave-forge/main/ftp/src/ftp_wrap.cpp Modified: trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp =================================================================== --- trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp 2008-04-29 19:44:56 UTC (rev 5007) +++ trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp 2008-04-29 21:45:51 UTC (rev 5008) @@ -805,82 +805,59 @@ #define Octave_Error_Occurred() 0 #define SWIG_Octave_AddErrorMsg(msg) {;} +SWIGRUNTIME swig_module_info *SWIG_Octave_GetModule(void *clientdata); +SWIGRUNTIME void SWIG_Octave_SetModule(void *clientdata, swig_module_info *pointer); + // For backward compatibility only #define SWIG_POINTER_EXCEPTION 0 #define SWIG_arg_fail(arg) 0 -SWIGRUNTIME swig_module_info *SWIG_Octave_GetModule(void *clientdata) { - octave_value tmp = get_global_value("__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION, true); - if (!tmp.is_defined() || !tmp.is_uint64_type()) - return 0; - unsigned long r = tmp.uint64_scalar_value().value(); - assert(sizeof(r) == sizeof(swig_module_info *)); - return (swig_module_info *) r; -} - -SWIGRUNTIME void SWIG_Octave_SetModule(void *clientdata, swig_module_info *pointer) { - unsigned long r = (unsigned long) pointer; - assert(sizeof(r) == sizeof(swig_module_info *)); - const char *module_var = "__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION; - link_to_global_variable(curr_sym_tab->lookup(module_var, true)); - set_global_value(module_var, octave_uint64(r)); -} - // Runtime API implementation #include <map> #include <vector> #include <string> -#include <ext/hash_map> -namespace { +typedef octave_value_list(*octave_func) (const octave_value_list &, int); +class octave_swig_type; - typedef octave_value_list(*octave_func) (const octave_value_list &, int); - class octave_swig_type; +namespace Swig { + class Director; - namespace Swig { - class Director; + SWIGRUNTIME void swig_register_director(octave_swig_type *self, void *ptr, Director *d); + SWIGRUNTIME void swig_director_destroyed(octave_swig_type *self, Director *d); + SWIGRUNTIME void swig_director_set_self(Director *d, octave_swig_type *self); - void swig_register_director(octave_swig_type *self, void *ptr, Director *d); - void swig_director_destroyed(octave_swig_type *self, Director *d); - void swig_director_set_self(Director *d, octave_swig_type *self); + SWIGRUNTIME octave_base_value *swig_value_ref(octave_swig_type *ost); + SWIGRUNTIME octave_swig_type *swig_value_deref(octave_value ov); + SWIGRUNTIME octave_swig_type *swig_value_deref(const octave_base_value &ov); - octave_base_value *swig_value_ref(octave_swig_type *ost); - octave_swig_type *swig_value_deref(const octave_value &ov); - octave_swig_type *swig_value_deref(const octave_base_value &ov); + typedef std::map < void *, Director * > rtdir_map; - struct hash_voidptr { - int operator() (void *p) const { - return (long) p; - } - }; - typedef __gnu_cxx::hash_map < void *, Director *, hash_voidptr > rtdir_map; + SWIGINTERN rtdir_map &get_rtdir_map() { + static swig_module_info *module = 0; + if (!module) + module = SWIG_GetModule(0); + assert(module); + if (!module->clientdata) + module->clientdata = new rtdir_map; + return *(rtdir_map *) module->clientdata; + } - using namespace __gnu_cxx; - SWIGINTERN rtdir_map &get_rtdir_map() { - static swig_module_info *module = 0; - if (!module) - module = SWIG_GetModule(0); - assert(module); - if (!module->clientdata) - module->clientdata = new rtdir_map; - return *(rtdir_map *) module->clientdata; - } + SWIGINTERNINLINE void set_rtdir(void *vptr, Director *d) { + get_rtdir_map()[vptr] = d; + } - SWIGINTERNINLINE void set_rtdir(void *vptr, Director *d) { - get_rtdir_map()[vptr] = d; - } + SWIGINTERNINLINE void erase_rtdir(void *vptr) { + get_rtdir_map().erase(vptr); + } - SWIGINTERNINLINE void erase_rtdir(void *vptr) { - get_rtdir_map().erase(vptr); - } - - SWIGINTERNINLINE Director *get_rtdir(void *vptr) { - rtdir_map::const_iterator pos = get_rtdir_map().find(vptr); - Director *rtdir = (pos != get_rtdir_map().end())? pos->second : 0; - return rtdir; - } + SWIGINTERNINLINE Director *get_rtdir(void *vptr) { + rtdir_map::const_iterator pos = get_rtdir_map().find(vptr); + Director *rtdir = (pos != get_rtdir_map().end())? pos->second : 0; + return rtdir; } +} struct swig_octave_member { const char *name; @@ -923,7 +900,7 @@ }}; typedef std::pair < const swig_type_info *, cpp_ptr > type_ptr_pair; - swig_module_info *module; + mutable swig_module_info *module; const swig_type_info *construct_type; // type of special type object std::vector < type_ptr_pair > types; // our c++ base classes @@ -932,6 +909,7 @@ typedef std::pair < const swig_octave_member *, octave_value > member_value_pair; typedef std::map < std::string, member_value_pair > member_map; member_map members; + bool always_static; const swig_octave_member *find_member(const swig_type_info *type, const std::string &name) { if (!type->clientdata) @@ -998,6 +976,34 @@ return 0; } + void load_members(const swig_octave_class* c,member_map& out) const { + for (const swig_octave_member *m = c->members; m->name; ++m) { + if (out.find(m->name) == out.end()) + out.insert(std::make_pair(m->name, std::make_pair(m, octave_value()))); + } + for (int j = 0; c->base_names[j]; ++j) { + if (!c->base[j]) { + if (!module) + module = SWIG_GetModule(0); + assert(module); + c->base[j] = SWIG_MangledTypeQueryModule(module, module, c->base_names[j]); + } + if (!c->base[j]) + continue; + assert(c->base[j]->clientdata); + const swig_octave_class *cj = + (const swig_octave_class *) c->base[j]->clientdata; + load_members(cj,out); + } + } + + void load_members(member_map& out) const { + out=members; + for (unsigned int j = 0; j < types.size(); ++j) + if (types[j].first->clientdata) + load_members((const swig_octave_class *) types[j].first->clientdata, out); + } + octave_value_list member_invoke(member_value_pair *m, const octave_value_list &args, int nargout) { if (m->second.is_defined()) return m->second.subsref("(", std::list < octave_value_list > (1, args), nargout); @@ -1069,8 +1075,10 @@ octave_swig_type &operator=(const octave_swig_type &rhs); public: - octave_swig_type(void *_ptr = 0, const swig_type_info *_type = 0, int _own = 0) - : module(0), construct_type(_ptr ? 0 : _type), own(_own) { + octave_swig_type(void *_ptr = 0, const swig_type_info *_type = 0, int _own = 0, + bool _always_static = false) + : module(0), construct_type(_ptr ? 0 : _type), own(_own), + always_static(_always_static) { if (_type || _ptr) types.push_back(std::make_pair(_type, _ptr)); if (_ptr) { @@ -1294,9 +1302,12 @@ } octave_value_list args; - if (!m->first || (!m->first->is_static() && !m->first->is_global())) + if (!always_static && + (!m->first || (!m->first->is_static() && !m->first->is_global()))) args.append(as_value()); - if (skip < (int) ops.size() && ops[skip] == '(' && ((m->first && m->first->method) || m->second.is_function() || m->second.is_function_handle())) { + if (skip < (int) ops.size() && ops[skip] == '(' && + ((m->first && m->first->method) || m->second.is_function() || + m->second.is_function_handle())) { args.append(*idx_it++); ++skip; sub_ovl = member_invoke(m, args, nargout); @@ -1402,6 +1413,35 @@ return outarg(0).string_value(); } + /* + virtual Octave_map map_value() const { + octave_swig_type *nc_this = const_cast < octave_swig_type *>(this); + member_value_pair *m = nc_this->find_member("__str", false); + if (!m) { + error("__map method not defined"); + return std::string(); + } + octave_value_list outarg = nc_this->member_invoke(m, octave_value_list(nc_this->as_value()), 1); + if (outarg.length() < 1 || !outarg(0).is_map()) { + error("__map method did not return a string"); + return std::string(); + } + return outarg(0).map_value(); + } + */ + + virtual string_vector map_keys() const { + member_map tmp; + load_members(tmp); + + string_vector keys(tmp.size()); + int k = 0; + for (member_map::iterator it = tmp.begin(); it != tmp.end(); ++it) + keys(k++) = it->first; + + return keys; + } + virtual octave_value convert_to_str(bool pad = false, bool force = false, char type = '"') const { return string_value(); } @@ -1488,6 +1528,9 @@ return; } + member_map tmp; + load_members(tmp); + os << "{" << std::endl; for (unsigned int j = 0; j < types.size(); ++j) { if (types[j].first->clientdata) { @@ -1497,14 +1540,14 @@ os << " " << types[j].first->name << ", ptr = " << types[j].second.ptr << std::endl; } } - for (member_map::const_iterator it = members.begin(); it != members.end(); ++it) { + for (member_map::const_iterator it = tmp.begin(); it != tmp.end(); ++it) { if (it->second.first) { const char *objtype = it->second.first->method ? "method" : "variable"; - const char *modifier = (it->second.first->flags &1) ? "static" : (it->second.first->flags &2) ? "global" : ""; - os << it->second.first->name << " (c++ " << modifier << " " << objtype << ")" << std::endl; + const char *modifier = (it->second.first->flags &1) ? "static " : (it->second.first->flags &2) ? "global " : ""; + os << " " << it->second.first->name << " (" << modifier << objtype << ")" << std::endl; assert(it->second.first->name == it->first); } else { - os << it->first << " (octave value)" << std::endl; + os << " " << it->first << std::endl; } } os << "}" << std::endl; @@ -1562,6 +1605,9 @@ virtual std::string string_value(bool force = false) const { return ptr->string_value(force); } + virtual string_vector map_keys() const + { return ptr->map_keys(); } + virtual octave_value convert_to_str(bool pad = false, bool force = false, char type = '"') const { return ptr->convert_to_str(pad, force, type); } @@ -1583,15 +1629,15 @@ std::vector < char > buf; public: - octave_swig_packed(swig_type_info *_type = 0, const char *_buf = 0, size_t _buf_len = 0) - : type(_type), buf(_buf, _buf + _buf_len) { + octave_swig_packed(swig_type_info *_type = 0, const void *_buf = 0, size_t _buf_len = 0) + : type(_type), buf((const char*)_buf, (const char*)_buf + _buf_len) { } - bool copy(swig_type_info *outtype, char *ptr, size_t sz) { + bool copy(swig_type_info *outtype, void *ptr, size_t sz) const { if (outtype && outtype != type) return false; assert(sz <= buf.size()); - std::copy(&buf[0], &buf[sz], ptr); + std::copy(&buf[0], &buf[sz], (char*)ptr); return true; } @@ -1696,6 +1742,8 @@ error("swig_typeinfo must be called with only a single object"); return octave_value_list(); } + if (args(0).is_matrix_type() && args(0).rows() == 0 && args(0).columns() == 0) + return octave_value(octave_uint64(0)); octave_swig_type *ost = Swig::swig_value_deref(args(0)); if (!ost) { error("object is not a swig_ref"); @@ -1704,106 +1752,104 @@ return octave_value(octave_uint64((unsigned long long) ost->swig_this())); } - #define SWIG_DIRECTORS - struct Director; - class octave_swig_type; +namespace Swig { + class Director { + octave_swig_type *self; + bool disowned; - namespace Swig { - class Director { - octave_swig_type *self; - bool disowned; + Director(const Director &x); + Director &operator=(const Director &rhs); + public: - Director(const Director &x); - Director &operator=(const Director &rhs); - public: + Director(void *vptr):self(0), disowned(false) { + set_rtdir(vptr, this); + } - Director(void *vptr):self(0), disowned(false) { - set_rtdir(vptr, this); - } + ~Director() { + swig_director_destroyed(self, this); + if (disowned) + self->decref(); + } - ~Director() { - swig_director_destroyed(self, this); - if (disowned) - self->decref(); - } + void swig_set_self(octave_swig_type *new_self) { + assert(!disowned); + self = new_self; + } - void swig_set_self(octave_swig_type *new_self) { - assert(!disowned); - self = new_self; - } + octave_swig_type *swig_get_self() const { + return self; + } - octave_swig_type *swig_get_self() const { - return self; - } + void swig_disown() { + if (disowned) + return; + disowned = true; + self->incref(); + } + }; - void swig_disown() { - if (disowned) - return; - disowned = true; - self->incref(); - } - }; + struct DirectorTypeMismatchException { + static void raise(const char *msg) { + // ... todo + throw(DirectorTypeMismatchException()); + } - struct DirectorTypeMismatchException { - static void raise(const char *msg) { - // ... todo - throw(DirectorTypeMismatchException()); - } + static void raise(const octave_value &ov, const char *msg) { + // ... todo + raise(msg); + } + }; + struct DirectorPureVirtualException { + static void raise(const char *msg) { + // ... todo + throw(DirectorPureVirtualException()); + } - static void raise(const octave_value &ov, const char *msg) { - // ... todo - raise(msg); - } - }; - struct DirectorPureVirtualException { - static void raise(const char *msg) { - // ... todo - throw(DirectorPureVirtualException()); - } + static void raise(const octave_value &ov, const char *msg) { + // ... todo + raise(msg); + } + }; - static void raise(const octave_value &ov, const char *msg) { - // ... todo - raise(msg); - } - }; +} - } - - void swig_acquire_ownership(void *vptr) { + SWIGRUNTIME void swig_acquire_ownership(void *vptr) { // assert(0); // ... todo } - void swig_acquire_ownership_array(void *vptr) { + SWIGRUNTIME void swig_acquire_ownership_array(void *vptr) { // assert(0); // ... todo } - void swig_acquire_ownership_obj(void *vptr, int own) { + SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own) { // assert(0); // ... todo } namespace Swig { - void swig_director_destroyed(octave_swig_type *self, Director *d) { + SWIGRUNTIME void swig_director_destroyed(octave_swig_type *self, Director *d) { self->director_destroyed(d); } - void swig_director_set_self(Director *d, octave_swig_type *self) { + SWIGRUNTIME void swig_director_set_self(Director *d, octave_swig_type *self) { d->swig_set_self(self); } - octave_base_value *swig_value_ref(octave_swig_type *ost) { + SWIGRUNTIME octave_base_value *swig_value_ref(octave_swig_type *ost) { return new octave_swig_ref(ost); } - octave_swig_type *swig_value_deref(const octave_value &ov) { + SWIGRUNTIME octave_swig_type *swig_value_deref(octave_value ov) { + if (ov.is_cell() && ov.rows() == 1 && ov.columns() == 1) + ov = ov.cell_value()(0); return swig_value_deref(*ov.internal_rep()); } - octave_swig_type *swig_value_deref(const octave_base_value &ov) { + SWIGRUNTIME octave_swig_type *swig_value_deref(const octave_base_value &ov) { if (ov.type_id() != octave_swig_ref::static_type_id()) return 0; const octave_swig_ref *osr = static_cast < const octave_swig_ref *>(&ov); @@ -1812,57 +1858,12 @@ } - SWIGRUNTIME octave_value SWIG_Octave_NewPointerObj(void *ptr, swig_type_info *type, int flags) { - int own = (flags &SWIG_POINTER_OWN) ? SWIG_POINTER_OWN : 0; - - Swig::Director *d = Swig::get_rtdir(ptr); - if (d && d->swig_get_self()) - return d->swig_get_self()->as_value(); - return Swig::swig_value_ref(new octave_swig_type(ptr, type, own)); - } - - SWIGRUNTIME int SWIG_Octave_ConvertPtrAndOwn(const octave_value &ov, void **ptr, swig_type_info *type, int flags, int *own) { - if (!ov.is_defined()) { - if (ptr) - *ptr = 0; - return SWIG_OK; - } - if (ov.type_id() != octave_swig_ref::static_type_id()) - return SWIG_TypeError; - octave_swig_ref *osr = static_cast < octave_swig_ref *>(ov.internal_rep()); - octave_swig_type *ost = osr->get_ptr(); - void *vptr = ost->cast(type, own, flags); - if (!vptr) - return SWIG_TypeError; - if (ptr) - *ptr = vptr; - return SWIG_OK; - } - - SWIGRUNTIMEINLINE octave_value SWIG_Octave_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) { - return new octave_swig_packed(type, (char *) ptr, sz); - } - - SWIGRUNTIME int SWIG_Octave_ConvertPacked(const octave_value &ov, void *ptr, size_t sz, swig_type_info *type) { - if (!ov.is_defined()) - return SWIG_TypeError; - if (ov.type_id() != octave_swig_packed::static_type_id()) - return SWIG_TypeError; - octave_swig_packed *ost = static_cast < octave_swig_packed *>(ov.internal_rep()); - return ost->copy(type, (char *) ptr, sz) ? SWIG_OK : SWIG_TypeError; - } - - void SWIG_Octave_SetConstant(octave_swig_type *module_ns, const std::string &name, const octave_value &ov) { - module_ns->assign(name, ov); - } - - #define swig_unary_op(name) \ -octave_value swig_unary_op_##name(const octave_base_value &x) { \ +SWIGRUNTIME octave_value swig_unary_op_##name(const octave_base_value &x) { \ return octave_swig_type::dispatch_unary_op(x,#name); \ } #define swig_binary_op(name) \ -octave_value swig_binary_op_##name(const octave_base_value&lhs,const octave_base_value &rhs) { \ +SWIGRUNTIME octave_value swig_binary_op_##name(const octave_base_value&lhs,const octave_base_value &rhs) { \ return octave_swig_type::dispatch_binary_op(lhs,rhs,#name); \ } #define swigreg_unary_op(name) \ @@ -1901,7 +1902,7 @@ swig_binary_op(el_and); swig_binary_op(el_or); - void swig_install_unary_ops(int tid) { + SWIGRUNTIME void SWIG_InstallUnaryOps(int tid) { swigreg_unary_op(not); swigreg_unary_op(uplus); swigreg_unary_op(uminus); @@ -1910,7 +1911,7 @@ swigreg_unary_op(incr); swigreg_unary_op(decr); } - void swig_install_binary_ops(int tid1, int tid2) { + SWIGRUNTIME void SWIG_InstallBinaryOps(int tid1, int tid2) { swigreg_binary_op(add); swigreg_binary_op(sub); swigreg_binary_op(mul); @@ -1932,23 +1933,87 @@ swigreg_binary_op(el_and); swigreg_binary_op(el_or); } - void swig_install_ops(int tid) { + SWIGRUNTIME void SWIG_InstallOps(int tid) { // here we assume that tid are conseq integers increasing from zero, and // that our tid is the last one. might be better to have explicit string // list of types we should bind to, and use lookup_type to resolve their tid. - swig_install_unary_ops(tid); - swig_install_binary_ops(tid, tid); + SWIG_InstallUnaryOps(tid); + SWIG_InstallBinaryOps(tid, tid); for (int j = 0; j < tid; ++j) { - swig_install_binary_ops(j, tid); - swig_install_binary_ops(tid, j); + SWIG_InstallBinaryOps(j, tid); + SWIG_InstallBinaryOps(tid, j); } } +SWIGRUNTIME octave_value SWIG_Octave_NewPointerObj(void *ptr, swig_type_info *type, int flags) { + int own = (flags &SWIG_POINTER_OWN) ? SWIG_POINTER_OWN : 0; + + Swig::Director *d = Swig::get_rtdir(ptr); + if (d && d->swig_get_self()) + return d->swig_get_self()->as_value(); + return Swig::swig_value_ref(new octave_swig_type(ptr, type, own)); } +SWIGRUNTIME int SWIG_Octave_ConvertPtrAndOwn(octave_value ov, void **ptr, swig_type_info *type, int flags, int *own) { + if (ov.is_cell() && ov.rows() == 1 && ov.columns() == 1) + ov = ov.cell_value()(0); + if (!ov.is_defined() || + (ov.is_matrix_type() && ov.rows() == 0 && ov.columns() == 0) ) { + if (ptr) + *ptr = 0; + return SWIG_OK; + } + if (ov.type_id() != octave_swig_ref::static_type_id()) + return SWIG_ERROR; + octave_swig_ref *osr = static_cast < octave_swig_ref *>(ov.internal_rep()); + octave_swig_type *ost = osr->get_ptr(); + void *vptr = ost->cast(type, own, flags); + if (!vptr) + return SWIG_ERROR; + if (ptr) + *ptr = vptr; + return SWIG_OK; +} +SWIGRUNTIME octave_value SWIG_Octave_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) { + return new octave_swig_packed(type, (char *) ptr, sz); +} +SWIGRUNTIME int SWIG_Octave_ConvertPacked(const octave_value &ov, void *ptr, size_t sz, swig_type_info *type) { + if (!ov.is_defined()) + return SWIG_ERROR; + if (ov.type_id() != octave_swig_packed::static_type_id()) + return SWIG_ERROR; + octave_swig_packed *ost = static_cast < octave_swig_packed *>(ov.internal_rep()); + return ost->copy(type, (char *) ptr, sz) ? SWIG_OK : SWIG_ERROR; +} + +void SWIG_Octave_SetConstant(octave_swig_type *module_ns, const std::string &name, const octave_value &ov) { + module_ns->assign(name, ov); +} + +SWIGRUNTIME swig_module_info *SWIG_Octave_GetModule(void *clientdata) { + octave_value ov = get_global_value("__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION, true); + if (!ov.is_defined() || + ov.type_id() != octave_swig_packed::static_type_id()) + return 0; + const octave_swig_packed* osp = + static_cast < const octave_swig_packed *> (ov.internal_rep()); + swig_module_info *pointer = 0; + osp->copy(0, &pointer, sizeof(swig_module_info *)); + return pointer; +} + +SWIGRUNTIME void SWIG_Octave_SetModule(void *clientdata, swig_module_info *pointer) { + octave_value ov = new octave_swig_packed(0, &pointer, sizeof(swig_module_info *)); + const char *module_var = "__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION; + link_to_global_variable(curr_sym_tab->lookup(module_var, true)); + set_global_value(module_var, ov); +} + + + #define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0) #define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else @@ -2126,8 +2191,10 @@ SWIGINTERN int -SWIG_AsCharPtrAndSize(const octave_value& ov, char** cptr, size_t* psize, int *alloc) +SWIG_AsCharPtrAndSize(octave_value ov, char** cptr, size_t* psize, int *alloc) { + if (ov.is_cell() && ov.rows() == 1 && ov.columns() == 1) + ov = ov.cell_value()(0); if (!ov.is_string()) return SWIG_TypeError; @@ -9415,7 +9482,7 @@ -void SWIG_init_user(octave_swig_type* module_ns); +static void SWIG_init_user(octave_swig_type* module_ns); DEFUN_DLD (SWIG_name,args,nargout,SWIG_name_d) { static bool already_init=false; @@ -9445,15 +9512,12 @@ if (swig_globals[j].get_method) cvar_ns->assign(swig_globals[j].name,&swig_globals[j]); - octave_swig_type* module_ns=new octave_swig_type; + octave_swig_type* module_ns=new octave_swig_type(0, 0, 0, true); module_ns->assign("cvar",Swig::swig_value_ref(cvar_ns)); for (int j=0;swig_globals[j].name;++j) if (swig_globals[j].method) module_ns->assign(swig_globals[j].name,&swig_globals[j]); - link_to_global_variable(curr_sym_tab->lookup(SWIG_name_d,true)); - set_global_value(SWIG_name_d,Swig::swig_value_ref(module_ns)); - // * need better solution here; swig_type -> octave_class mapping is // * really n-to-1, in some cases such as template partial spec, etc. // * see failing tests. @@ -9467,16 +9531,23 @@ SWIG_init_user(module_ns); - swig_install_ops(octave_swig_ref::static_type_id()); + SWIG_InstallOps(octave_swig_ref::static_type_id()); + // the incref is necessary so install_global doesn't destroy module_ns, + // as it would if it installed something with the same name as the module. + module_ns->incref(); if (global_option) module_ns->install_global(); + module_ns->decref(); + link_to_global_variable(curr_sym_tab->lookup(SWIG_name_d,true)); + set_global_value(SWIG_name_d,Swig::swig_value_ref(module_ns)); + return octave_value_list(); } -void SWIG_init_user(octave_swig_type* module_ns) +static void SWIG_init_user(octave_swig_type* module_ns) { SWIG_Octave_SetConstant(module_ns,"ANNversion",SWIG_FromCharPtr("1.1.1")); SWIG_Octave_SetConstant(module_ns,"ANNversionCmt",SWIG_FromCharPtr("")); Modified: trunk/octave-forge/main/database/src/mysql_wrap.cpp =================================================================== --- trunk/octave-forge/main/database/src/mysql_wrap.cpp 2008-04-29 19:44:56 UTC (rev 5007) +++ trunk/octave-forge/main/database/src/mysql_wrap.cpp 2008-04-29 21:45:51 UTC (rev 5008) @@ -805,82 +805,59 @@ #define Octave_Error_Occurred() 0 #define SWIG_Octave_AddErrorMsg(msg) {;} +SWIGRUNTIME swig_module_info *SWIG_Octave_GetModule(void *clientdata); +SWIGRUNTIME void SWIG_Octave_SetModule(void *clientdata, swig_module_info *pointer); + // For backward compatibility only #define SWIG_POINTER_EXCEPTION 0 #define SWIG_arg_fail(arg) 0 -SWIGRUNTIME swig_module_info *SWIG_Octave_GetModule(void *clientdata) { - octave_value tmp = get_global_value("__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION, true); - if (!tmp.is_defined() || !tmp.is_uint64_type()) - return 0; - unsigned long r = tmp.uint64_scalar_value().value(); - assert(sizeof(r) == sizeof(swig_module_info *)); - return (swig_module_info *) r; -} - -SWIGRUNTIME void SWIG_Octave_SetModule(void *clientdata, swig_module_info *pointer) { - unsigned long r = (unsigned long) pointer; - assert(sizeof(r) == sizeof(swig_module_info *)); - const char *module_var = "__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION; - link_to_global_variable(curr_sym_tab->lookup(module_var, true)); - set_global_value(module_var, octave_uint64(r)); -} - // Runtime API implementation #include <map> #include <vector> #include <string> -#include <ext/hash_map> -namespace { +typedef octave_value_list(*octave_func) (const octave_value_list &, int); +class octave_swig_type; - typedef octave_value_list(*octave_func) (const octave_value_list &, int); - class octave_swig_type; +namespace Swig { + class Director; - namespace Swig { - class Director; + SWIGRUNTIME void swig_register_director(octave_swig_type *self, void *ptr, Director *d); + SWIGRUNTIME void swig_director_destroyed(octave_swig_type *self, Director *d); + SWIGRUNTIME void swig_director_set_self(Director *d, octave_swig_type *self); - void swig_register_director(octave_swig_type *self, void *ptr, Director *d); - void swig_director_destroyed(octave_swig_type *self, Director *d); - void swig_director_set_self(Director *d, octave_swig_type *self); + SWIGRUNTIME octave_base_value *swig_value_ref(octave_swig_type *ost); + SWIGRUNTIME octave_swig_type *swig_value_deref(octave_value ov); + SWIGRUNTIME octave_swig_type *swig_value_deref(const octave_base_value &ov); - octave_base_value *swig_value_ref(octave_swig_type *ost); - octave_swig_type *swig_value_deref(const octave_value &ov); - octave_swig_type *swig_value_deref(const octave_base_value &ov); + typedef std::map < void *, Director * > rtdir_map; - struct hash_voidptr { - int operator() (void *p) const { - return (int) p; - } - }; - typedef __gnu_cxx::hash_map < void *, Director *, hash_voidptr > rtdir_map; + SWIGINTERN rtdir_map &get_rtdir_map() { + static swig_module_info *module = 0; + if (!module) + module = SWIG_GetModule(0); + assert(module); + if (!module->clientdata) + module->clientdata = new rtdir_map; + return *(rtdir_map *) module->clientdata; + } - using namespace __gnu_cxx; - SWIGINTERN rtdir_map &get_rtdir_map() { - static swig_module_info *module = 0; - if (!module) - module = SWIG_GetModule(0); - assert(module); - if (!module->clientdata) - module->clientdata = new rtdir_map; - return *(rtdir_map *) module->clientdata; - } + SWIGINTERNINLINE void set_rtdir(void *vptr, Director *d) { + get_rtdir_map()[vptr] = d; + } - SWIGINTERNINLINE void set_rtdir(void *vptr, Director *d) { - get_rtdir_map()[vptr] = d; - } + SWIGINTERNINLINE void erase_rtdir(void *vptr) { + get_rtdir_map().erase(vptr); + } - SWIGINTERNINLINE void erase_rtdir(void *vptr) { - get_rtdir_map().erase(vptr); - } - - SWIGINTERNINLINE Director *get_rtdir(void *vptr) { - rtdir_map::const_iterator pos = get_rtdir_map().find(vptr); - Director *rtdir = (pos != get_rtdir_map().end())? pos->second : 0; - return rtdir; - } + SWIGINTERNINLINE Director *get_rtdir(void *vptr) { + rtdir_map::const_iterator pos = get_rtdir_map().find(vptr); + Director *rtdir = (pos != get_rtdir_map().end())? pos->second : 0; + return rtdir; } +} struct swig_octave_member { const char *name; @@ -923,7 +900,7 @@ }}; typedef std::pair < const swig_type_info *, cpp_ptr > type_ptr_pair; - swig_module_info *module; + mutable swig_module_info *module; const swig_type_info *construct_type; // type of special type object std::vector < type_ptr_pair > types; // our c++ base classes @@ -932,6 +909,7 @@ typedef std::pair < const swig_octave_member *, octave_value > member_value_pair; typedef std::map < std::string, member_value_pair > member_map; member_map members; + bool always_static; const swig_octave_member *find_member(const swig_type_info *type, const std::string &name) { if (!type->clientdata) @@ -998,6 +976,34 @@ return 0; } + void load_members(const swig_octave_class* c,member_map& out) const { + for (const swig_octave_member *m = c->members; m->name; ++m) { + if (out.find(m->name) == out.end()) + out.insert(std::make_pair(m->name, std::make_pair(m, octave_value()))); + } + for (int j = 0; c->base_names[j]; ++j) { + if (!c->base[j]) { + if (!module) + module = SWIG_GetModule(0); + assert(module); + c->base[j] = SWIG_MangledTypeQueryModule(module, module, c->base_names[j]); + } + if (!c->base[j]) + continue; + assert(c->base[j]->clientdata); + const swig_octave_class *cj = + (const swig_octave_class *) c->base[j]->clientdata; + load_members(cj,out); + } + } + + void load_members(member_map& out) const { + out=members; + for (unsigned int j = 0; j < types.size(); ++j) + if (types[j].first->clientdata) + load_members((const swig_octave_class *) types[j].first->clientdata, out); + } + octave_value_list member_invoke(member_value_pair *m, const octave_value_list &args, int nargout) { if (m->second.is_defined()) return m->second.subsref("(", std::list < octave_value_list > (1, args), nargout); @@ -1069,8 +1075,10 @@ octave_swig_type &operator=(const octave_swig_type &rhs); public: - octave_swig_type(void *_ptr = 0, const swig_type_info *_type = 0, int _own = 0) - : module(0), construct_type(_ptr ? 0 : _type), own(_own) { + octave_swig_type(void *_ptr = 0, const swig_type_info *_type = 0, int _own = 0, + bool _always_static = false) + : module(0), construct_type(_ptr ? 0 : _type), own(_own), + always_static(_always_static) { if (_type || _ptr) types.push_back(std::make_pair(_type, _ptr)); if (_ptr) { @@ -1294,9 +1302,12 @@ } octave_value_list args; - if (!m->first || (!m->first->is_static() && !m->first->is_global())) + if (!always_static && + (!m->first || (!m->first->is_static() && !m->first->is_global()))) args.append(as_value()); - if (skip < (int) ops.size() && ops[skip] == '(' && ((m->first && m->first->method) || m->second.is_function() || m->second.is_function_handle())) { + if (skip < (int) ops.size() && ops[skip] == '(' && + ((m->first && m->first->method) || m->second.is_function() || + m->second.is_function_handle())) { args.append(*idx_it++); ++skip; sub_ovl = member_invoke(m, args, nargout); @@ -1402,6 +1413,35 @@ return outarg(0).string_value(); } + /* + virtual Octave_map map_value() const { + octave_swig_type *nc_this = const_cast < octave_swig_type *>(this); + member_value_pair *m = nc_this->find_member("__str", false); + if (!m) { + error("__map method not defined"); + return std::string(); + } + octave_value_list outarg = nc_this->member_invoke(m, octave_value_list(nc_this->as_value()), 1); + if (outarg.length() < 1 || !outarg(0).is_map()) { + error("__map method did not return a string"); + return std::string(); + } + return outarg(0).map_value(); + } + */ + + virtual string_vector map_keys() const { + member_map tmp; + load_members(tmp); + + string_vector keys(tmp.size()); + int k = 0; + for (member_map::iterator it = tmp.begin(); it != tmp.end(); ++it) + keys(k++) = it->first; + + return keys; + } + virtual octave_value convert_to_str(bool pad = false, bool force = false, char type = '"') const { return string_value(); } @@ -1488,6 +1528,9 @@ return; } + member_map tmp; + load_members(tmp); + os << "{" << std::endl; for (unsigned int j = 0; j < types.size(); ++j) { if (types[j].first->clientdata) { @@ -1497,14 +1540,14 @@ os << " " << types[j].first->name << ", ptr = " << types[j].second.ptr << std::endl; } } - for (member_map::const_iterator it = members.begin(); it != members.end(); ++it) { + for (member_map::const_iterator it = tmp.begin(); it != tmp.end(); ++it) { if (it->second.first) { const char *objtype = it->second.first->method ? "method" : "variable"; - const char *modifier = (it->second.first->flags &1) ? "static" : (it->second.first->flags &2) ? "global" : ""; - os << it->second.first->name << " (c++ " << modifier << " " << objtype << ")" << std::endl; + const char *modifier = (it->second.first->flags &1) ? "static " : (it->second.first->flags &2) ? "global " : ""; + os << " " << it->second.first->name << " (" << modifier << objtype << ")" << std::endl; assert(it->second.first->name == it->first); } else { - os << it->first << " (octave value)" << std::endl; + os << " " << it->first << std::endl; } } os << "}" << std::endl; @@ -1562,6 +1605,9 @@ virtual std::string string_value(bool force = false) const { return ptr->string_value(force); } + virtual string_vector map_keys() const + { return ptr->map_keys(); } + virtual octave_value convert_to_str(bool pad = false, bool force = false, char type = '"') const { return ptr->convert_to_str(pad, force, type); } @@ -1583,15 +1629,15 @@ std::vector < char > buf; public: - octave_swig_packed(swig_type_info *_type = 0, const char *_buf = 0, size_t _buf_len = 0) - : type(_type), buf(_buf, _buf + _buf_len) { + octave_swig_packed(swig_type_info *_type = 0, const void *_buf = 0, size_t _buf_len = 0) + : type(_type), buf((const char*)_buf, (const char*)_buf + _buf_len) { } - bool copy(swig_type_info *outtype, char *ptr, size_t sz) { + bool copy(swig_type_info *outtype, void *ptr, size_t sz) const { if (outtype && outtype != type) return false; assert(sz <= buf.size()); - std::copy(&buf[0], &buf[sz], ptr); + std::copy(&buf[0], &buf[sz], (char*)ptr); return true; } @@ -1696,6 +1742,8 @@ error("swig_typeinfo must be called with only a single object"); return octave_value_list(); } + if (args(0).is_matrix_type() && args(0).rows() == 0 && args(0).columns() == 0) + return octave_value(octave_uint64(0)); octave_swig_type *ost = Swig::swig_value_deref(args(0)); if (!ost) { error("object is not a swig_ref"); @@ -1704,106 +1752,104 @@ return octave_value(octave_uint64((unsigned long long) ost->swig_this())); } - #define SWIG_DIRECTORS - struct Director; - class octave_swig_type; +namespace Swig { + class Director { + octave_swig_type *self; + bool disowned; - namespace Swig { - class Director { - octave_swig_type *self; - bool disowned; + Director(const Director &x); + Director &operator=(const Director &rhs); + public: - Director(const Director &x); - Director &operator=(const Director &rhs); - public: + Director(void *vptr):self(0), disowned(false) { + set_rtdir(vptr, this); + } - Director(void *vptr):self(0), disowned(false) { - set_rtdir(vptr, this); - } + ~Director() { + swig_director_destroyed(self, this); + if (disowned) + self->decref(); + } - ~Director() { - swig_director_destroyed(self, this); - if (disowned) - self->decref(); - } + void swig_set_self(octave_swig_type *new_self) { + assert(!disowned); + self = new_self; + } - void swig_set_self(octave_swig_type *new_self) { - assert(!disowned); - self = new_self; - } + octave_swig_type *swig_get_self() const { + return self; + } - octave_swig_type *swig_get_self() const { - return self; - } + void swig_disown() { + if (disowned) + return; + disowned = true; + self->incref(); + } + }; - void swig_disown() { - if (disowned) - return; - disowned = true; - self->incref(); - } - }; + struct DirectorTypeMismatchException { + static void raise(const char *msg) { + // ... todo + throw(DirectorTypeMismatchException()); + } - struct DirectorTypeMismatchException { - static void raise(const char *msg) { - // ... todo - throw(DirectorTypeMismatchException()); - } + static void raise(const octave_value &ov, const char *msg) { + // ... todo + raise(msg); + } + }; + struct DirectorPureVirtualException { + static void raise(const char *msg) { + // ... todo + throw(DirectorPureVirtualException()); + } - static void raise(const octave_value &ov, const char *msg) { - // ... todo - raise(msg); - } - }; - struct DirectorPureVirtualException { - static void raise(const char *msg) { - // ... todo - throw(DirectorPureVirtualException()); - } + static void raise(const octave_value &ov, const char *msg) { + // ... todo + raise(msg); + } + }; - static void raise(const octave_value &ov, const char *msg) { - // ... todo - raise(msg); - } - }; +} - } - - void swig_acquire_ownership(void *vptr) { + SWIGRUNTIME void swig_acquire_ownership(void *vptr) { // assert(0); // ... todo } - void swig_acquire_ownership_array(void *vptr) { + SWIGRUNTIME void swig_acquire_ownership_array(void *vptr) { // assert(0); // ... todo } - void swig_acquire_ownership_obj(void *vptr, int own) { + SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own) { // assert(0); // ... todo } namespace Swig { - void swig_director_destroyed(octave_swig_type *self, Director *d) { + SWIGRUNTIME void swig_director_destroyed(octave_swig_type *self, Director *d) { self->director_destroyed(d); } - void swig_director_set_self(Director *d, octave_swig_type *self) { + SWIGRUNTIME void swig_director_set_self(Director *d, octave_swig_type *self) { d->swig_set_self(self); } - octave_base_value *swig_value_ref(octave_swig_type *ost) { + SWIGRUNTIME octave_base_value *swig_value_ref(octave_swig_type *ost) { return new octave_swig_ref(ost); } - octave_swig_type *swig_value_deref(const octave_value &ov) { + SWIGRUNTIME octave_swig_type *swig_value_deref(octave_value ov) { + if (ov.is_cell() && ov.rows() == 1 && ov.columns() == 1) + ov = ov.cell_value()(0); return swig_value_deref(*ov.internal_rep()); } - octave_swig_type *swig_value_deref(const octave_base_value &ov) { + SWIGRUNTIME octave_swig_type *swig_value_deref(const octave_base_value &ov) { if (ov.type_id() != octave_swig_ref::static_type_id()) return 0; const octave_swig_ref *osr = static_cast < const octave_swig_ref *>(&ov); @@ -1812,57 +1858,12 @@ } - SWIGRUNTIME octave_value SWIG_Octave_NewPointerObj(void *ptr, swig_type_info *type, int flags) { - int own = (flags &SWIG_POINTER_OWN) ? SWIG_POINTER_OWN : 0; - - Swig::Director *d = Swig::get_rtdir(ptr); - if (d && d->swig_get_self()) - return d->swig_get_self()->as_value(); - return Swig::swig_value_ref(new octave_swig_type(ptr, type, own)); - } - - SWIGRUNTIME int SWIG_Octave_ConvertPtrAndOwn(const octave_value &ov, void **ptr, swig_type_info *type, int flags, int *own) { - if (!ov.is_defined()) { - if (ptr) - *ptr = 0; - return SWIG_OK; - } - if (ov.type_id() != octave_swig_ref::static_type_id()) - return SWIG_TypeError; - octave_swig_ref *osr = static_cast < octave_swig_ref *>(ov.internal_rep()); - octave_swig_type *ost = osr->get_ptr(); - void *vptr = ost->cast(type, own, flags); - if (!vptr) - return SWIG_TypeError; - if (ptr) - *ptr = vptr; - return SWIG_OK; - } - - SWIGRUNTIMEINLINE octave_value SWIG_Octave_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) { - return new octave_swig_packed(type, (char *) ptr, sz); - } - - SWIGRUNTIME int SWIG_Octave_ConvertPacked(const octave_value &ov, void *ptr, size_t sz, swig_type_info *type) { - if (!ov.is_defined()) - return SWIG_TypeError; - if (ov.type_id() != octave_swig_packed::static_type_id()) - return SWIG_TypeError; - octave_swig_packed *ost = static_cast < octave_swig_packed *>(ov.internal_rep()); - return ost->copy(type, (char *) ptr, sz) ? SWIG_OK : SWIG_TypeError; - } - - void SWIG_Octave_SetConstant(octave_swig_type *module_ns, const std::string &name, const octave_value &ov) { - module_ns->assign(name, ov); - } - - #define swig_unary_op(name) \ -octave_value swig_unary_op_##name(const octave_base_value &x) { \ +SWIGRUNTIME octave_value swig_unary_op_##name(const octave_base_value &x) { \ return octave_swig_type::dispatch_unary_op(x,#name); \ } #define swig_binary_op(name) \ -octave_value swig_binary_op_##name(const octave_base_value&lhs,const octave_base_value &rhs) { \ +SWIGRUNTIME octave_value swig_binary_op_##name(const octave_base_value&lhs,const octave_base_value &rhs) { \ return octave_swig_type::dispatch_binary_op(lhs,rhs,#name); \ } #define swigreg_unary_op(name) \ @@ -1901,7 +1902,7 @@ swig_binary_op(el_and); swig_binary_op(el_or); - void swig_install_unary_ops(int tid) { + SWIGRUNTIME void SWIG_InstallUnaryOps(int tid) { swigreg_unary_op(not); swigreg_unary_op(uplus); swigreg_unary_op(uminus); @@ -1910,7 +1911,7 @@ swigreg_unary_op(incr); swigreg_unary_op(decr); } - void swig_install_binary_ops(int tid1, int tid2) { + SWIGRUNTIME void SWIG_InstallBinaryOps(int tid1, int tid2) { swigreg_binary_op(add); swigreg_binary_op(sub); swigreg_binary_op(mul); @@ -1932,23 +1933,87 @@ swigreg_binary_op(el_and); swigreg_binary_op(el_or); } - void swig_install_ops(int tid) { + SWIGRUNTIME void SWIG_InstallOps(int tid) { // here we assume that tid are conseq integers increasing from zero, and // that our tid is the last one. might be better to have explicit string // list of types we should bind to, and use lookup_type to resolve their tid. - swig_install_unary_ops(tid); - swig_install_binary_ops(tid, tid); + SWIG_InstallUnaryOps(tid); + SWIG_InstallBinaryOps(tid, tid); for (int j = 0; j < tid; ++j) { - swig_install_binary_ops(j, tid); - swig_install_binary_ops(tid, j); + SWIG_InstallBinaryOps(j, tid); + SWIG_InstallBinaryOps(tid, j); } } +SWIGRUNTIME octave_value SWIG_Octave_NewPointerObj(void *ptr, swig_type_info *type, int flags) { + int own = (flags &SWIG_POINTER_OWN) ? SWIG_POINTER_OWN : 0; + + Swig::Director *d = Swig::get_rtdir(ptr); + if (d && d->swig_get_self()) + return d->swig_get_self()->as_value(); + return Swig::swig_value_ref(new octave_swig_type(ptr, type, own)); } +SWIGRUNTIME int SWIG_Octave_ConvertPtrAndOwn(octave_value ov, void **ptr, swig_type_info *type, int flags, int *own) { + if (ov.is_cell() && ov.rows() == 1 && ov.columns() == 1) + ov = ov.cell_value()(0); + if (!ov.is_defined() || + (ov.is_matrix_type() && ov.rows() == 0 && ov.columns() == 0) ) { + if (ptr) + *ptr = 0; + return SWIG_OK; + } + if (ov.type_id() != octave_swig_ref::static_type_id()) + return SWIG_ERROR; + octave_swig_ref *osr = static_cast < octave_swig_ref *>(ov.internal_rep()); + octave_swig_type *ost = osr->get_ptr(); + void *vptr = ost->cast(type, own, flags); + if (!vptr) + return SWIG_ERROR; + if (ptr) + *ptr = vptr; + return SWIG_OK; +} +SWIGRUNTIME octave_value SWIG_Octave_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) { + return new octave_swig_packed(type, (char *) ptr, sz); +} +SWIGRUNTIME int SWIG_Octave_ConvertPacked(const octave_value &ov, void *ptr, size_t sz, swig_type_info *type) { + if (!ov.is_defined()) + return SWIG_ERROR; + if (ov.type_id() != octave_swig_packed::static_type_id()) + return SWIG_ERROR; + octave_swig_packed *ost = static_cast < octave_swig_packed *>(ov.internal_rep()); + return ost->copy(type, (char *) ptr, sz) ? SWIG_OK : SWIG_ERROR; +} + +void SWIG_Octave_SetConstant(octave_swig_type *module_ns, const std::string &name, const octave_value &ov) { + module_ns->assign(name, ov); +} + +SWIGRUNTIME swig_module_info *SWIG_Octave_GetModule(void *clientdata) { + octave_value ov = get_global_value("__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION, true); + if (!ov.is_defined() || + ov.type_id() != octave_swig_packed::static_type_id()) + return 0; + const octave_swig_packed* osp = + static_cast < const octave_swig_packed *> (ov.internal_rep()); + swig_module_info *pointer = 0; + osp->copy(0, &pointer, sizeof(swig_module_info *)); + return pointer; +} + +SWIGRUNTIME void SWIG_Octave_SetModule(void *clientdata, swig_module_info *pointer) { + octave_value ov = new octave_swig_packed(0, &pointer, sizeof(swig_module_info *)); + const char *module_var = "__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION; + link_to_global_variable(curr_sym_tab->lookup(module_var, true)); + set_global_value(module_var, ov); +} + + + #define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0) #define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else @@ -2119,8 +2184,10 @@ SWIGINTERN int -SWIG_AsCharPtrAndSize(const octave_value& ov, char** cptr, size_t* psize, int *alloc) +SWIG_AsCharPtrAndSize(octave_value ov, char** cptr, size_t* psize, int *alloc) { + if (ov.is_cell() && ov.rows() == 1 && ov.columns() == 1) + ov = ov.cell_value()(0); if (!ov.is_string()) return SWIG_TypeError; @@ -20779,7 +20846,7 @@ -void SWIG_init_user(octave_swig_type* module_ns); +static void SWIG_init_user(octave_swig_type* module_ns); DEFUN_DLD (SWIG_name,args,nargout,SWIG_name_d) { static bool already_init=false; @@ -20809,15 +20876,12 @@ if (swig_globals[j].get_method) cvar_ns->assign(swig_globals[j].name,&swig_globals[j]); - octave_swig_type* module_ns=new octave_swig_type; + octave_swig_type* module_ns=new octave_swig_type(0, 0, 0, true); module_ns->assign("cvar",Swig::swig_value_ref(cvar_ns)); for (int j=0;swig_globals[j].name;++j) if (swig_globals[j].method) module_ns->assign(swig_globals[j].name,&swig_globals[j]); - link_to_global_variable(curr_sym_tab->lookup(SWIG_name_d,true)); - set_global_value(SWIG_name_d,Swig::swig_value_ref(module_ns)); - // * need better solution here; swig_type -> octave_class mapping is // * really n-to-1, in some cases such as template partial spec, etc. // * see failing tests. @@ -20831,16 +20895,23 @@ SWIG_init_user(module_ns); - swig_install_ops(octave_swig_ref::static_type_id()); + SWIG_InstallOps(octave_swig_ref::static_type_id()); + // the incref is necessary so install_global doesn't destroy module_ns, + // as it would if it installed something with the same name as the module. + module_ns->incref(); if (global_option) module_ns->install_global(); + module_ns->decref(); + link_to_global_variable(curr_sym_tab->lookup(SWIG_name_d,true)); + set_global_value(SWIG_name_d,Swig::swig_value_ref(module_ns)); + return octave_value_list(); } -void SWIG_init_user(octave_swig_type* module_ns) +static void SWIG_init_user(octave_swig_type* module_ns) { SWIG_Octave_SetConstant(module_ns,"MYSQL_TYPE_DECIMAL",SWIG_From_int((int)(MYSQL_TYPE_DECIMAL))); SWIG_Octave_SetConstant(module_ns,"MYSQL_TYPE_TINY",SWIG_From_int((int)(MYSQL_TYPE_TINY))); Modified: trunk/octave-forge/main/database/src/odbc_wrap.cpp =================================================================== --- trunk/octave-forge/main/database/src/odbc_wrap.cpp 2008-04-29 19:44:56 UTC (rev 5007) +++ trunk/octave-forge/main/database/src/odbc_wrap.cpp 2008-04-29 21:45:51 UTC (rev 5008) @@ -805,82 +805,59 @@ #define Octave_Error_Occurred() 0 #define SWIG_Octave_AddErrorMsg(msg) {;} +SWIGRUNTIME swig_module_info *SWIG_Octave_GetModule(void *clientdata); +SWIGRUNTIME void SWIG_Octave_SetModule(void *clientdata, swig_module_info *pointer); + // For backward compatibility only #define SWIG_POINTER_EXCEPTION 0 #define SWIG_arg_fail(arg) 0 -SWIGRUNTIME swig_module_info *SWIG_Octave_GetModule(void *clientdata) { - octave_value tmp = get_global_value("__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION, true); - if (!tmp.is_defined() || !tmp.is_uint64_type()) - return 0; - unsigned long r = tmp.uint64_scalar_value().value(); - assert(sizeof(r) == sizeof(swig_module_info *)); - return (swig_module_info *) r; -} - -SWIGRUNTIME void SWIG_Octave_SetModule(void *clientdata, swig_module_info *pointer) { - unsigned long r = (unsigned long) pointer; - assert(sizeof(r) == sizeof(swig_module_info *)); - const char *module_var = "__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION; - link_to_global_variable(curr_sym_tab->lookup(module_var, true)); - set_global_value(module_var, octave_uint64(r)); -} - // Runtime API implementation #include <map> #include <vector> #include <string> -#include <ext/hash_map> -namespace { +typedef octave_value_list(*octave_func) (const octave_value_list &, int); +class octave_swig_type; - typedef octave_value_list(*octave_func) (const octave_value_list &, int); - class octave_swig_type; +namespace Swig { + class Director; - namespace Swig { - class Director; + SWIGRUNTIME void swig_register_director(octave_swig_type *self, void *ptr, Director *d); + SWIGRUNTIME void swig_director_destroyed(octave_swig_type *self, Director *d); + SWIGRUNTIME void swig_director_set_self(Director *d, octave_swig_type *self); - void swig_register_director(octave_swig_type *self, void *ptr, Director *d); - void swig_director_destroyed(octave_swig_type *self, Director *d); - void swig_director_set_self(Director *d, octave_swig_type *self); + SWIGRUNTIME octave_base_value *swig_value_ref(octave_swig_type *ost); + SWIGRUNTIME octave_swig_type *swig_value_deref(octave_value ov); + SWIGRUNTIME octave_swig_type *swig_value_deref(const octave_base_value &ov); - octave_base_value *swig_value_ref(octave_swig_type *ost); - octave_swig_type *swig_value_deref(const octave_value &ov); - octave_swig_type *swig_value_deref(const octave_base_value &ov); + typedef std::map < void *, Director * > rtdir_map; - struct hash_voidptr { - int operator() (void *p) const { - return (long) p; - } - }; - typedef __gnu_cxx::hash_map < void *, Director *, hash_voidptr > rtdir_map; + SWIGINTERN rtdir_map &get_rtdir_map() { + static swig_module_info *module = 0; + if (!module) + module = SWIG_GetModule(0); + assert(module); + if (!module->clientdata) + module->clientdata = new rtdir_map; + return *(rtdir_map *) module->clientdata; + } - using namespace __gnu_cxx; - SWIGINTERN rtdir_map &get_rtdir_map() { - static swig_module_info *module = 0; - if (!module) - module = SWIG_GetModule(0); - assert(module); - if (!module->clientdata) - module->clientdata = new rtdir_map; - return *(rtdir_map *) module->clientdata; - } + SWIGINTERNINLINE void set_rtdir(void *vptr, Director *d) { + get_rtdir_map()[vptr] = d; + } - SWIGINTERNINLINE void set_rtdir(void *vptr, Director *d) { - get_rtdir_map()[vptr] = d; - } + SWIGINTERNINLINE void erase_rtdir(void *vptr) { + get_rtdir_map().erase(vptr); + } - SWIGINTERNINLINE void erase_rtdir(void *vptr) { - get_rtdir_map().erase(vptr); - } - - SWIGINTERNINLINE Director *get_rtdir(void *vptr) { - rtdir_map::const_iterator pos = get_rtdir_map().find(vptr); - Director *rtdir = (pos != get_rtdir_map().end())? pos->second : 0; - return rtdir; - } + SWIGINTERNINLINE Director *get_rtdir(void *vptr) { + rtdir_map::const_iterator pos = get_rtdir_map().find(vptr); + Director *rtdir = (pos != get_rtdir_map().end())? pos->second : 0; + return rtdir; } +} struct swig_octave_member { const char *name; @@ -923,7 +900,7 @@ }}; typedef std::pair < const swig_type_info *, cpp_ptr > type_ptr_pair; - swig_module_info *module; + mutable swig_module_info *module; const swig_type_info *construct_type; // type of special type object std::vector < type_ptr_pair > types; // our c++ base classes @@ -932,6 +909,7 @@ typedef std::pair < const swig_octave_member *, octave_value > member_value_pair; typedef std::map < std::string, member_value_pair > member_map; member_map members; + bool always_static; const swig_octave_member *find_member(const swig_type_info *type, const std::string &name) { if (!type->clientdata) @@ -998,6 +976,34 @@ return 0; } + void load_members(const swig_octave_class* c,member_map& out) const { + for (const swig_octave_member *m = c->members; m->name; ++m) { + if (out.find(m->name) == out.end()) + out.insert(std::make_pair(m->name, std::make_pair(m, octave_value()))); + } + for (int j = 0; c->base_names[j]; ++j) { + if (!c->base[j]) { + if (!module) + module = SWIG_GetModule(0); + assert(module); + c->base[j] = SWIG_MangledTypeQueryModule(module, module, c->base_names[j]); + } + if (!c->base[j]) + continue; + assert(c->base[j]->clientdata); + const swig_octave_class *cj = + (const swig_octave_class *) c->base[j]->clientdata; + load_members(cj,out); + } + } + + void load_members(member_map& out) const { + out=members; + for (unsigned int j = 0; j < types.size(); ++j) + if (types[j].first->clientdata) + load_members((const swig_octave_class *) types[j].first->clientdata, out); + } + octave_value_list member_invoke(member_value_pair *m, const octave_value_list &args, int nargout) { if (m->second.is_defined()) return m->second.subsref("(", std::list < octave_value_list > (1, args), nargout); @@ -1069,8 +1075,10 @@ octave_swig_type &operator=(const octave_swig_type &rhs); public: - octave_swig_type(void *_ptr = 0, const swig_type_info *_type = 0, int _own = 0) - : module(0), construct_type(_ptr ? 0 : _type), own(_own) { + octave_swig_type(void *_ptr = 0, const swig_type_info *_type = 0, int _own = 0, + bool _always_static = false) + : module(0), construct_type(_ptr ? 0 : _type), own(_own), + always_static(_always_static) { if (_type || _ptr) types.push_back(std::make_pair(_type, _ptr)); if (_ptr) { @@ -1294,9 +1302,12 @@ } octave_value_list args; - if (!m->first || (!m->first->is_static() && !m->first->is_global())) + if (!always_static && + (!m->first || (!m->first->is_static() && !m->first->is_global()))) args.append(as_value()); - if (skip < (int) ops.size() && ops[skip] == '(' && ((m->first && m->first->method) || m->second.is_function() || m->second.is_function_handle())) { + if (skip < (int) ops.size() && ops[skip] == '(' && + ((m->first && m->first->method) || m->second.is_function() || + m->second.is_function_handle())) { args.append(*idx_it++); ++skip; sub_ovl = member_invoke(m, args, nargout); @@ -1402,6 +1413,35 @@ return outarg(0).string_value(); } + /* + virtual Octave_map map_value() const { + octave_swig_type *nc_this = const_cast < octave_swig_type *>(this); + member_value_pair *m = nc_this->find_member("__str", false); + if (!m) { + error("__map method not defined"); + return std::string(); + } + octave_value_list outarg = nc_this->member_invoke(m, octave_value_list(nc_this->as_value()), 1); + if (outarg.length() < 1 || !outarg(0).is_map()) { + error("__map method did not return a string"); + return std::string(); + } + return outarg(0).map_value(); + } + */ + + virtual string_vector map_keys() const { + member_map tmp; + load_members(tmp); + + string_vector keys(tmp.size()); + int k = 0; + for (member_map::iterator it = tmp.begin(); it != tmp.end(); ++it) + keys(k++) = it->first; + + return keys; + } + virtual octave_value convert_to_str(bool pad = false, bool force = false, char type = '"') const { return string_value(); } @@ -1488,6 +1528,9 @@ return; } + member_map tmp; + load_members(tmp); + os << "{" << std::endl; for (unsigned int j = 0; j < types.size(); ++j) { if (types[j].first->clientdata) { @@ -1497,14 +1540,14 @@ os << " " << types[j].first->name << ", ptr = " << types[j].second.ptr << std::endl; } } - for (member_map::const_iterator it = members.begin(); it != members.end(); ++it) { + for (member_map::const_iterator it = tmp.begin(); it != tmp.end(); ++it) { if (it->second.first) { const char *objtype = it->second.first->method ? "method" : "variable"; - const char *modifier = (it->second.first->flags &1) ? "static" : (it->second.first->flags &2) ? "global" : ""; - os << it->second.first->name << " (c++ " << modifier << " " << objtype << ")" << std::endl; + const char *modifier = (it->second.first->flags &1) ? "static " : (it->second.first->flags &2) ? "global " : ""; + os << " " << it->second.first->name << " (" << modifier << objtype << ")" << std::endl; assert(it->second.first->name == it->first); } else { - os << it->first << " (octave value)" << std::endl; + os << " " << it->first << std::endl; } } os << "}" << std::endl; @@ -1562,6 +1605,9 @@ virtual std::string string_value(bool force = false) const { return ptr->string_value(force); } + virtual string_vector map_keys() const + { return ptr->map_keys(); } + virtual octave_value convert_to_str(bool pad = false, bool force = false, char type = '"') const { return ptr->convert_to_str(pad, force, type); } @@ -1583,15 +1629,15 @@ std::vector < char > buf; public: - octave_swig_packed(swig_type_info *_type = 0, const char *_buf = 0, size_t _buf_len = 0) - : type(_type), buf(_buf, _buf + _buf_len) { + octave_swig_packed(swig_type_info *_type = 0, const void *_buf = 0, size_t _buf_len = 0) + : type(_type), buf((const char*)_buf, (const char*)_buf + _buf_len) { } - bool copy(swig_type_info *outtype, char *ptr, size_t sz) { + bool copy(swig_type_info *outtype, void *ptr, size_t sz) const { if (outtype && outtype != type) return false; assert(sz <= buf.size()); - std::copy(&buf[0], &buf[sz], ptr); + std::copy(&buf[0], &buf[sz], (char*)ptr); return true; } @@ -1696,6 +1742... [truncated message content] |
From: <xav...@us...> - 2008-05-08 23:16:14
|
Revision: 5035 http://octave.svn.sourceforge.net/octave/?rev=5035&view=rev Author: xavier98 Date: 2008-05-08 16:16:14 -0700 (Thu, 08 May 2008) Log Message: ----------- Various fixes for ann, ftp, and database packages (from Michael Goffioul). Modified Paths: -------------- trunk/octave-forge/main/ann/src/Makeconf.in trunk/octave-forge/main/ann/src/ann/ann2fig/Makefile trunk/octave-forge/main/ann/src/ann/ann2fig/ann2fig.cpp trunk/octave-forge/main/ann/src/ann/bindings/Makefile trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp trunk/octave-forge/main/ann/src/ann/include/ANN/ANN.h trunk/octave-forge/main/ann/src/ann/sample/Makefile trunk/octave-forge/main/ann/src/ann/src/Makefile trunk/octave-forge/main/ann/src/ann/test/Makefile trunk/octave-forge/main/ann/src/configure.base trunk/octave-forge/main/database/src/Makefile trunk/octave-forge/main/database/src/mysql_wrap.cpp trunk/octave-forge/main/database/src/odbc_wrap.cpp trunk/octave-forge/main/database/src/postgres_wrap.cpp trunk/octave-forge/main/database/src/sqlite3_wrap.cpp trunk/octave-forge/main/ftp/src/Makefile trunk/octave-forge/main/ftp/src/ftp_wrap.cpp Modified: trunk/octave-forge/main/ann/src/Makeconf.in =================================================================== --- trunk/octave-forge/main/ann/src/Makeconf.in 2008-05-08 03:13:03 UTC (rev 5034) +++ trunk/octave-forge/main/ann/src/Makeconf.in 2008-05-08 23:16:14 UTC (rev 5035) @@ -38,6 +38,8 @@ # FLAG = $(shell $(MKOCTFILE) -p FLAG) # The following flags are for compiling programs that are independent # of Octave. How confusing. +AR = @AR@ +ARFLAGS = @ARFLAGS@ CC = @CC@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ @@ -49,9 +51,11 @@ F77 = @F77@ FFLAGS = @FFLAGS@ FPICFLAG = @FPICFLAG@ +EXEEXT = @EXEEXT@ +OTHERLIBS = @OTHERLIBS@ -ANNLIB = libANN.a -MAKELIB = ar ruv +ANNLIB = @ANNLIB@ +MAKELIB = $(AR) $(ARFLAGS) OCTAVE = @OCTAVE@ OCTAVE_VERSION = @OCTAVE_VERSION@ Modified: trunk/octave-forge/main/ann/src/ann/ann2fig/Makefile =================================================================== --- trunk/octave-forge/main/ann/src/ann/ann2fig/Makefile 2008-05-08 03:13:03 UTC (rev 5034) +++ trunk/octave-forge/main/ann/src/ann/ann2fig/Makefile 2008-05-08 23:16:14 UTC (rev 5035) @@ -42,14 +42,13 @@ BINDIR = $(BASEDIR)/bin LDFLAGS = -L$(LIBDIR) ANNLIBS = -lANN -OTHERLIBS = -lm #----------------------------------------------------------------------------- # Some more definitions # ANN2FIG name of executable #----------------------------------------------------------------------------- -ANN2FIG = ann2fig +ANN2FIG = ann2fig$(EXEEXT) SOURCES = ann2fig.cpp OBJECTS = $(SOURCES:.cpp=.o) @@ -71,7 +70,7 @@ #----------------------------------------------------------------------------- ann2fig.o: ann2fig.cpp - $(C++) -c -I$(INCDIR) ann2fig.cpp + $(C++) -c -I$(INCDIR) $(CPPFLAGS) $(CXXFLAGS) ann2fig.cpp #----------------------------------------------------------------------------- # Cleaning Modified: trunk/octave-forge/main/ann/src/ann/ann2fig/ann2fig.cpp =================================================================== --- trunk/octave-forge/main/ann/src/ann/ann2fig/ann2fig.cpp 2008-05-08 03:13:03 UTC (rev 5034) +++ trunk/octave-forge/main/ann/src/ann/ann2fig/ann2fig.cpp 2008-05-08 23:16:14 UTC (rev 5035) @@ -579,8 +579,9 @@ // procedure. //---------------------------------------------------------------------- -main(int argc, char **argv) +int main(int argc, char **argv) { getArgs(argc, argv); // get input arguments readANN(); // read the dump file + return 0; } Modified: trunk/octave-forge/main/ann/src/ann/bindings/Makefile =================================================================== --- trunk/octave-forge/main/ann/src/ann/bindings/Makefile 2008-05-08 03:13:03 UTC (rev 5034) +++ trunk/octave-forge/main/ann/src/ann/bindings/Makefile 2008-05-08 23:16:14 UTC (rev 5035) @@ -2,7 +2,7 @@ bindings-octave: ann.oct ann.oct: ann_wrap.cpp ../include/ANN/ANN.h ../include/ANN/ANNperf.h ../include/ANN/ANNx.h - $(MKOCTFILE) -o ann.oct -I../include -L../lib -lANN ann_wrap.cpp + $(MKOCTFILE) -DSTATIC_LINKED -o ann.oct -I../include -L../lib -lANN ann_wrap.cpp ifdef SWIG ann_wrap.cpp: ann.i Modified: trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp =================================================================== --- trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp 2008-05-08 03:13:03 UTC (rev 5034) +++ trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp 2008-05-08 23:16:14 UTC (rev 5035) @@ -1637,7 +1637,7 @@ if (outtype && outtype != type) return false; assert(sz <= buf.size()); - std::copy(&buf[0], &buf[sz], (char*)ptr); + std::copy(buf.begin(), buf.begin()+sz, (char*)ptr); return true; } @@ -1654,7 +1654,7 @@ } void print(std::ostream &os, bool pr_as_read_syntax = false) const { - os << "swig packed type: name = " << type->name << ", len = " << buf.size() << std::endl; + os << "swig packed type: name = " << (type ? type->name : std::string()) << ", len = " << buf.size() << std::endl; } private: DECLARE_OCTAVE_ALLOCATOR; Modified: trunk/octave-forge/main/ann/src/ann/include/ANN/ANN.h =================================================================== --- trunk/octave-forge/main/ann/src/ann/include/ANN/ANN.h 2008-05-08 03:13:03 UTC (rev 5034) +++ trunk/octave-forge/main/ann/src/ann/include/ANN/ANN.h 2008-05-08 23:16:14 UTC (rev 5035) @@ -57,7 +57,7 @@ #ifndef ANN_H #define ANN_H -#ifdef WIN32 +#if defined (WIN32) && ! defined (STATIC_LINKED) //---------------------------------------------------------------------- // For Microsoft Visual C++, externally accessible symbols must be // explicitly indicated with DLL_API, which is somewhat like "extern." Modified: trunk/octave-forge/main/ann/src/ann/sample/Makefile =================================================================== --- trunk/octave-forge/main/ann/src/ann/sample/Makefile 2008-05-08 03:13:03 UTC (rev 5034) +++ trunk/octave-forge/main/ann/src/ann/sample/Makefile 2008-05-08 23:16:14 UTC (rev 5035) @@ -44,14 +44,14 @@ LIBDIR = $(BASEDIR)/lib BINDIR = $(BASEDIR)/bin LDFLAGS = -L$(LIBDIR) -ANNLIBS = -lANN -lm +ANNLIBS = -lANN $(OTHERLIBS) #----------------------------------------------------------------------------- # Some more definitions # ANNSAMP name of sample program #----------------------------------------------------------------------------- -ANNSAMP = ann_sample +ANNSAMP = ann_sample$(EXEEXT) SAMPSOURCES = ann_sample.cpp SAMPOBJECTS = $(SAMPSOURCES:.cpp=.o) @@ -74,7 +74,7 @@ #----------------------------------------------------------------------------- ann_sample.o: ann_sample.cpp - $(C++) -c -I$(INCDIR) $(CXXFLAGS) ann_sample.cpp + $(C++) -c -I$(INCDIR) $(CPPFLAGS) $(CXXFLAGS) ann_sample.cpp #----------------------------------------------------------------------------- # Cleaning Modified: trunk/octave-forge/main/ann/src/ann/src/Makefile =================================================================== --- trunk/octave-forge/main/ann/src/ann/src/Makefile 2008-05-08 03:13:03 UTC (rev 5034) +++ trunk/octave-forge/main/ann/src/ann/src/Makefile 2008-05-08 23:16:14 UTC (rev 5035) @@ -62,48 +62,9 @@ # Make object files #----------------------------------------------------------------------------- -ANN.o: ANN.cpp - $(C++) -c -I$(INCDIR) $(CXXFLAGS) ANN.cpp +%.o : %.cpp + $(C++) -c -I$(INCDIR) $(CPPFLAGS) $(CXXFLAGS) -o $@ $< -brute.o: brute.cpp - $(C++) -c -I$(INCDIR) $(CXXFLAGS) brute.cpp - -kd_tree.o: kd_tree.cpp - $(C++) -c -I$(INCDIR) $(CXXFLAGS) kd_tree.cpp - -kd_util.o: kd_util.cpp - $(C++) -c -I$(INCDIR) $(CXXFLAGS) kd_util.cpp - -kd_split.o: kd_split.cpp - $(C++) -c -I$(INCDIR) $(CXXFLAGS) kd_split.cpp - -kd_search.o: kd_search.cpp - $(C++) -c -I$(INCDIR) $(CXXFLAGS) kd_search.cpp - -kd_pr_search.o: kd_pr_search.cpp - $(C++) -c -I$(INCDIR) $(CXXFLAGS) kd_pr_search.cpp - -kd_fix_rad_search.o: kd_fix_rad_search.cpp - $(C++) -c -I$(INCDIR) $(CXXFLAGS) kd_fix_rad_search.cpp - -kd_dump.o: kd_dump.cpp - $(C++) -c -I$(INCDIR) $(CXXFLAGS) kd_dump.cpp - -bd_tree.o: bd_tree.cpp - $(C++) -c -I$(INCDIR) $(CXXFLAGS) bd_tree.cpp - -bd_search.o: bd_search.cpp - $(C++) -c -I$(INCDIR) $(CXXFLAGS) bd_search.cpp - -bd_pr_search.o: bd_pr_search.cpp - $(C++) -c -I$(INCDIR) $(CXXFLAGS) bd_pr_search.cpp - -bd_fix_rad_search.o: bd_fix_rad_search.cpp - $(C++) -c -I$(INCDIR) $(CXXFLAGS) bd_fix_rad_search.cpp - -perf.o: perf.cpp - $(C++) -c -I$(INCDIR) $(CXXFLAGS) perf.cpp - #----------------------------------------------------------------------------- # Cleaning #----------------------------------------------------------------------------- Modified: trunk/octave-forge/main/ann/src/ann/test/Makefile =================================================================== --- trunk/octave-forge/main/ann/src/ann/test/Makefile 2008-05-08 03:13:03 UTC (rev 5034) +++ trunk/octave-forge/main/ann/src/ann/test/Makefile 2008-05-08 23:16:14 UTC (rev 5035) @@ -46,14 +46,13 @@ BINDIR = $(BASEDIR)/bin LDFLAGS = -L$(LIBDIR) ANNLIBS = -lANN -OTHERLIBS = -lm #----------------------------------------------------------------------------- # Some more definitions # ANNTEST name of test program #----------------------------------------------------------------------------- -ANNTEST = ann_test +ANNTEST = ann_test$(EXEEXT) HEADERS = rand.h TESTSOURCES = ann_test.cpp rand.cpp @@ -77,10 +76,10 @@ #----------------------------------------------------------------------------- ann_test.o: ann_test.cpp - $(C++) -c -I$(INCDIR) $(CXXFLAGS) ann_test.cpp + $(C++) -c -I$(INCDIR) $(CPPFLAGS) $(CXXFLAGS) ann_test.cpp rand.o: rand.cpp - $(C++) -c -I$(INCDIR) $(CXXFLAGS) rand.cpp + $(C++) -c -I$(INCDIR) $(CPPFLAGS) $(CXXFLAGS) rand.cpp #----------------------------------------------------------------------------- # Cleaning Modified: trunk/octave-forge/main/ann/src/configure.base =================================================================== --- trunk/octave-forge/main/ann/src/configure.base 2008-05-08 03:13:03 UTC (rev 5034) +++ trunk/octave-forge/main/ann/src/configure.base 2008-05-08 23:16:14 UTC (rev 5035) @@ -318,6 +318,24 @@ esac AC_SUBST(COPY_FLAGS) +ANNLIB=libANN.a +case "$canonical_host_type" in + *-*-msdosmsvc*) + ANNLIB=ANN.lib + ;; +esac +AC_SUBST(ANNLIB) + +OTHERLIBS= +OF_CHECK_LIB(m,sin,[OTHERLIBS=-lm]) +AC_SUBST(OTHERLIBS) + +OCTAVE_EVAL(octave_config_info('AR'),AR) +OCTAVE_EVAL(octave_config_info('ARFLAGS'),ARFLAGS) + +CPPFLAGS="$CPPFLAGS -DSTATIC_LINKED" +OF_CHECK_LIB(m,random,[],[CPPFLAGS="$CPPFLAGS -DANN_NO_RANDOM"]) + dnl Use $(STRIP) in the makefile to strip executables. If not found, dnl STRIP expands to ':', which in the makefile does nothing. dnl Don't need this for .oct files since mkoctfile handles them directly Modified: trunk/octave-forge/main/database/src/Makefile =================================================================== --- trunk/octave-forge/main/database/src/Makefile 2008-05-08 03:13:03 UTC (rev 5034) +++ trunk/octave-forge/main/database/src/Makefile 2008-05-08 23:16:14 UTC (rev 5035) @@ -50,6 +50,9 @@ clean: -$(RM) *.o octave-core core *.oct *~ +ifdef SWIG + rm -f sqlite3_wrap.cpp postgres_wrap.cpp mysql_wrap.cpp odbc_wrap.cpp +endif TEST_CASES = \ helpers \ Modified: trunk/octave-forge/main/database/src/mysql_wrap.cpp =================================================================== --- trunk/octave-forge/main/database/src/mysql_wrap.cpp 2008-05-08 03:13:03 UTC (rev 5034) +++ trunk/octave-forge/main/database/src/mysql_wrap.cpp 2008-05-08 23:16:14 UTC (rev 5035) @@ -1637,7 +1637,7 @@ if (outtype && outtype != type) return false; assert(sz <= buf.size()); - std::copy(&buf[0], &buf[sz], (char*)ptr); + std::copy(buf.begin(), buf.begin()+sz, (char*)ptr); return true; } @@ -1654,7 +1654,7 @@ } void print(std::ostream &os, bool pr_as_read_syntax = false) const { - os << "swig packed type: name = " << type->name << ", len = " << buf.size() << std::endl; + os << "swig packed type: name = " << (type ? type->name : std::string()) << ", len = " << buf.size() << std::endl; } private: DECLARE_OCTAVE_ALLOCATOR; Modified: trunk/octave-forge/main/database/src/odbc_wrap.cpp =================================================================== --- trunk/octave-forge/main/database/src/odbc_wrap.cpp 2008-05-08 03:13:03 UTC (rev 5034) +++ trunk/octave-forge/main/database/src/odbc_wrap.cpp 2008-05-08 23:16:14 UTC (rev 5035) @@ -1637,7 +1637,7 @@ if (outtype && outtype != type) return false; assert(sz <= buf.size()); - std::copy(&buf[0], &buf[sz], (char*)ptr); + std::copy(buf.begin(), buf.begin()+sz, (char*)ptr); return true; } @@ -1654,7 +1654,7 @@ } void print(std::ostream &os, bool pr_as_read_syntax = false) const { - os << "swig packed type: name = " << type->name << ", len = " << buf.size() << std::endl; + os << "swig packed type: name = " << (type ? type->name : std::string()) << ", len = " << buf.size() << std::endl; } private: DECLARE_OCTAVE_ALLOCATOR; Modified: trunk/octave-forge/main/database/src/postgres_wrap.cpp =================================================================== --- trunk/octave-forge/main/database/src/postgres_wrap.cpp 2008-05-08 03:13:03 UTC (rev 5034) +++ trunk/octave-forge/main/database/src/postgres_wrap.cpp 2008-05-08 23:16:14 UTC (rev 5035) @@ -1637,7 +1637,7 @@ if (outtype && outtype != type) return false; assert(sz <= buf.size()); - std::copy(&buf[0], &buf[sz], (char*)ptr); + std::copy(buf.begin(), buf.begin()+sz, (char*)ptr); return true; } @@ -1654,7 +1654,7 @@ } void print(std::ostream &os, bool pr_as_read_syntax = false) const { - os << "swig packed type: name = " << type->name << ", len = " << buf.size() << std::endl; + os << "swig packed type: name = " << (type ? type->name : std::string()) << ", len = " << buf.size() << std::endl; } private: DECLARE_OCTAVE_ALLOCATOR; Modified: trunk/octave-forge/main/database/src/sqlite3_wrap.cpp =================================================================== --- trunk/octave-forge/main/database/src/sqlite3_wrap.cpp 2008-05-08 03:13:03 UTC (rev 5034) +++ trunk/octave-forge/main/database/src/sqlite3_wrap.cpp 2008-05-08 23:16:14 UTC (rev 5035) @@ -1637,7 +1637,7 @@ if (outtype && outtype != type) return false; assert(sz <= buf.size()); - std::copy(&buf[0], &buf[sz], (char*)ptr); + std::copy(buf.begin(), buf.begin()+sz, (char*)ptr); return true; } @@ -1654,7 +1654,7 @@ } void print(std::ostream &os, bool pr_as_read_syntax = false) const { - os << "swig packed type: name = " << type->name << ", len = " << buf.size() << std::endl; + os << "swig packed type: name = " << (type ? type->name : std::string()) << ", len = " << buf.size() << std::endl; } private: DECLARE_OCTAVE_ALLOCATOR; Modified: trunk/octave-forge/main/ftp/src/Makefile =================================================================== --- trunk/octave-forge/main/ftp/src/Makefile 2008-05-08 03:13:03 UTC (rev 5034) +++ trunk/octave-forge/main/ftp/src/Makefile 2008-05-08 23:16:14 UTC (rev 5035) @@ -14,6 +14,9 @@ clean: -$(RM) *.o octave-core core *.oct *~ +ifdef SWIG + rm -f ftp_wrap.cpp +endif TEST_CASES = \ basic \ Modified: trunk/octave-forge/main/ftp/src/ftp_wrap.cpp =================================================================== --- trunk/octave-forge/main/ftp/src/ftp_wrap.cpp 2008-05-08 03:13:03 UTC (rev 5034) +++ trunk/octave-forge/main/ftp/src/ftp_wrap.cpp 2008-05-08 23:16:14 UTC (rev 5035) @@ -1637,7 +1637,7 @@ if (outtype && outtype != type) return false; assert(sz <= buf.size()); - std::copy(&buf[0], &buf[sz], (char*)ptr); + std::copy(buf.begin(), buf.begin()+sz, (char*)ptr); return true; } @@ -1654,7 +1654,7 @@ } void print(std::ostream &os, bool pr_as_read_syntax = false) const { - os << "swig packed type: name = " << type->name << ", len = " << buf.size() << std::endl; + os << "swig packed type: name = " << (type ? type->name : std::string()) << ", len = " << buf.size() << std::endl; } private: DECLARE_OCTAVE_ALLOCATOR; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2008-05-12 08:31:41
|
Revision: 5039 http://octave.svn.sourceforge.net/octave/?rev=5039&view=rev Author: adb014 Date: 2008-05-12 01:31:45 -0700 (Mon, 12 May 2008) Log Message: ----------- Remove gget, gpick, gzoom from INDEX as these functions are obsoleted and removed Modified Paths: -------------- trunk/octave-forge/main/INDEX Added Paths: ----------- trunk/octave-forge/main/plot/inst/colstyle.m Modified: trunk/octave-forge/main/INDEX =================================================================== --- trunk/octave-forge/main/INDEX 2008-05-12 08:21:04 UTC (rev 5038) +++ trunk/octave-forge/main/INDEX 2008-05-12 08:31:45 UTC (rev 5039) @@ -1134,7 +1134,7 @@ viewmtx rotate3d User input - ginput gget grab gzoom gpick + ginput grab dragrect rbbox Gnuplot Interface Added: trunk/octave-forge/main/plot/inst/colstyle.m =================================================================== --- trunk/octave-forge/main/plot/inst/colstyle.m (rev 0) +++ trunk/octave-forge/main/plot/inst/colstyle.m 2008-05-12 08:31:45 UTC (rev 5039) @@ -0,0 +1,57 @@ +## Copyright (C) 2008 David Bateman +## +## 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, see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {[@var{l}, @var{c}, @var{m}, @var{msg}] =} colstyle (@var{s}) +## Parse a linespec and return its components. The linetype is returned +## as the variable @var{l}, the color as @var{c} and the marker type as +## @var{m}. If the linespec is incorrectly parsed, do not return an +## error but rather return the error as the argument @var{msg}. +## @end deftypefn + +function [l, c, m, msg] = colstyle (s) + try + opt = __pltopt__ ("colstyle", s); + msg = []; + l = opt.linestyle; + c = opt.color; + m = opt.marker; + + if (isvector(c) && length (c) == 3) + if (all (c == [0, 0, 0])) + c = "k"; + elseif (all (c == [1, 0, 0])) + c = "r"; + elseif (all (c == [0, 1, 0])) + c = "g"; + elseif (all (c == [0, 0, 1])) + c = "b"; + elseif (all (c == [1, 1, 0])) + c = "y"; + elseif (all (c == [1, 0, 1])) + c = "m"; + elseif (all (c == [0, 1, 1])) + c = "c"; + elseif (all (c == [0, 1, 1])) + c = "w"; + endif + endif + catch + l = []; + c = []; + m = []; + msg = lasterr (); + end_try_catch +endfunction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2008-05-27 16:23:10
|
Revision: 5084 http://octave.svn.sourceforge.net/octave/?rev=5084&view=rev Author: adb014 Date: 2008-05-27 09:23:05 -0700 (Tue, 27 May 2008) Log Message: ----------- Add GFDL to optim and vrml DESCRIPTION files (for Thomas Weber) Modified Paths: -------------- trunk/octave-forge/main/optim/DESCRIPTION trunk/octave-forge/main/vrml/DESCRIPTION Modified: trunk/octave-forge/main/optim/DESCRIPTION =================================================================== --- trunk/octave-forge/main/optim/DESCRIPTION 2008-05-23 14:17:32 UTC (rev 5083) +++ trunk/octave-forge/main/optim/DESCRIPTION 2008-05-27 16:23:05 UTC (rev 5084) @@ -7,5 +7,5 @@ Description: Unconstrained Non-linear Optimization toolkit. Depends: octave (>= 2.9.7), miscellaneous (>= 1.0.0) Autoload: yes -License: GPL version 2 or later +License: GPL version 2 or later and GFDL Url: http://octave.sf.net Modified: trunk/octave-forge/main/vrml/DESCRIPTION =================================================================== --- trunk/octave-forge/main/vrml/DESCRIPTION 2008-05-23 14:17:32 UTC (rev 5083) +++ trunk/octave-forge/main/vrml/DESCRIPTION 2008-05-27 16:23:05 UTC (rev 5084) @@ -8,5 +8,5 @@ Depends: octave (>= 2.9.7) Autoload: yes SystemRequirements: freewrl -License: GPL version 2 or later +License: GPL version 2 or later and GFDL Url: http://octave.sf.net This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hi...@us...> - 2008-06-05 07:06:05
|
Revision: 5089 http://octave.svn.sourceforge.net/octave/?rev=5089&view=rev Author: highegg Date: 2008-06-05 00:05:59 -0700 (Thu, 05 Jun 2008) Log Message: ----------- benchmark: initial commit Added Paths: ----------- trunk/octave-forge/main/benchmark/ trunk/octave-forge/main/benchmark/COPYING trunk/octave-forge/main/benchmark/DESCRIPTION trunk/octave-forge/main/benchmark/INDEX trunk/octave-forge/main/benchmark/README trunk/octave-forge/main/benchmark/inst/ trunk/octave-forge/main/benchmark/inst/benchmark_dtmm.m trunk/octave-forge/main/benchmark/inst/benchmark_stmm.m trunk/octave-forge/main/benchmark/inst/benchutil_default_arg.m trunk/octave-forge/main/benchmark/inst/benchutil_initialize.m trunk/octave-forge/main/benchmark/inst/benchutil_is_octave.m trunk/octave-forge/main/benchmark/inst/benchutil_parse_desc.m trunk/octave-forge/main/benchmark/inst/benchutil_set_result.m trunk/octave-forge/main/benchmark/inst/benchutil_verbose.m Added: trunk/octave-forge/main/benchmark/COPYING =================================================================== --- trunk/octave-forge/main/benchmark/COPYING (rev 0) +++ trunk/octave-forge/main/benchmark/COPYING 2008-06-05 07:05:59 UTC (rev 5089) @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 19yy <name of author> + + 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 + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. Added: trunk/octave-forge/main/benchmark/DESCRIPTION =================================================================== --- trunk/octave-forge/main/benchmark/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/benchmark/DESCRIPTION 2008-06-05 07:05:59 UTC (rev 5089) @@ -0,0 +1,10 @@ +Name: benchmark +Version: 1.0.0 +Date: 2008-06-05 +Author: Octave community +Title: Benchmarks for Octave +Maintainer: Jaroslav Hajek (hi...@gm...) +Description: The package contains code used to benchmark speed of Octave. +License: GPL v2 +Depends: octave (>= 2.9.7) + Added: trunk/octave-forge/main/benchmark/INDEX =================================================================== --- trunk/octave-forge/main/benchmark/INDEX (rev 0) +++ trunk/octave-forge/main/benchmark/INDEX 2008-06-05 07:05:59 UTC (rev 5089) @@ -0,0 +1,11 @@ +benchmark >> Benchmark +Utility + benchutil_default_arg.m + benchutil_initialize.m + benchutil_is_octave.m + benchutil_parse_desc.m + benchutil_set_result.m + benchutil_verbose.m +Benchmarks + benchmark_dtmm.m + benchmark_stmm.m Added: trunk/octave-forge/main/benchmark/README =================================================================== --- trunk/octave-forge/main/benchmark/README (rev 0) +++ trunk/octave-forge/main/benchmark/README 2008-06-05 07:05:59 UTC (rev 5089) @@ -0,0 +1,52 @@ +benchmark +-------------------------------------------------------------------------------- +This package contains codes used to measure Octave's speed, resource usage etc. +It can be used to benchmark Octave running on different platforms, compiled +with different configurations, of different versions, or even Octave vs. Matlab +(if applicable). + +Each benchmark should have the form + +benchmark_my_benchmark.m: + +% <Copyright> + +% function benchmark_my_benchmark (arg1, arg2) +% description: +% <description of the benchmark> +% +% arguments: +% arg1 = <description of arg1> +% arg2 = <description of arg2> +% +% results: +% result1 = <description of result1> +% result2 = <description of result2> + +function results = bechmark_my_benchmark (arg1, arg2) + +benchutil_default_arg ('arg1', <arg1 default value>) +benchutil_default_arg ('arg2', <arg2 default value>) + +% the argument is mandatory and MUST be mfilename! +benchutil_initialize (mfilename) + +tic; +<code for result1> +result1 = toc; +benchutil_set_result ('result1') + +tic; +<code for result2> +result1 = toc; +benchutil_set_result ('result2') + +% yes, that's all! + + +the benchmark can then be run +benchmark_my_benchmark +or +benchmark_my_benchmark (100, 100) + +for more info, see existing benchmarks Added: trunk/octave-forge/main/benchmark/inst/benchmark_dtmm.m =================================================================== --- trunk/octave-forge/main/benchmark/inst/benchmark_dtmm.m (rev 0) +++ trunk/octave-forge/main/benchmark/inst/benchmark_dtmm.m 2008-06-05 07:05:59 UTC (rev 5089) @@ -0,0 +1,82 @@ +% Copyright (C) 2008 Jaroslav Hajek <hi...@gm...> +% +% This file is part of OctaveForge. +% +% OctaveForge 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 software; see the file COPYING. If not, see +% <http://www.gnu.org/licenses/>. +% + +% function benchmark_dtmm (m, n, nvec) +% description: +% Dense transposed matrix-matrix and matrix-vector multiplication benchmark. +% This is to test the "compound operators" feature introduced in Octave. +% +% arguments: +% m = row dimension of matrices +% n = col dimension of matrices +% nvec = number of vector op repeats +% +% results: +% time_tmm = Time for A'*B (A,B m-by-n matrices) +% time_smm = Time for A'*A +% time_mtm = Time for A*B' (A,B n-by-m matrices) +% time_msm = Time for A*A' +% time_tmv = Time for A'*v nvec-times (A m-by-n matrix) +% time_mtv = Time for v*A' nvec-times (A m-by-n matrix) +% + +function results = benchmark_dtmm (m, n, nvec) + + benchutil_default_arg ('m', 40192); + benchutil_default_arg ('n', 150); + benchutil_default_arg ('nvec', 100); + + benchutil_initialize (mfilename) + + A = rand (m, n); + B = rand (m, n); + + tic; C = A'*B; time_tmm = toc; + benchutil_set_result ('time_tmm') + + tic; C = A'*A; time_smm = toc; + benchutil_set_result ('time_smm') + + A = A'; + B = B'; + + tic; C = A*B'; time_mtm = toc; + benchutil_set_result ('time_mtm') + + tic; C = A*A'; time_msm = toc; + benchutil_set_result ('time_msm') + + A = A'; + + v = rand (m, 1); + tic; + for i=1:nvec + c = A'*v; + end + time_tmv = toc; + benchutil_set_result ('time_tmv') + + v = rand (1, n); + tic; + for i=1:nvec + c = v*A'; + end + time_mtv = toc; + benchutil_set_result ('time_mtv') + Added: trunk/octave-forge/main/benchmark/inst/benchmark_stmm.m =================================================================== --- trunk/octave-forge/main/benchmark/inst/benchmark_stmm.m (rev 0) +++ trunk/octave-forge/main/benchmark/inst/benchmark_stmm.m 2008-06-05 07:05:59 UTC (rev 5089) @@ -0,0 +1,78 @@ +% Copyright (C) 2008 Jaroslav Hajek <hi...@gm...> +% +% This file is part of OctaveForge. +% +% OctaveForge 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 software; see the file COPYING. If not, see +% <http://www.gnu.org/licenses/>. +% + +% function benchmark_stmm (n, nvec) +% description: +% Sparse transposed matrix-vector multiplication benchmark. +% This is to test the "compound operators" feature introduced in Octave. +% +% arguments: +% n = dimension of matrix +% nvec = number of vector op repeats +% +% results: +% time_tmm = Time for A'*B (B n^2-by-nvec matrix) +% time_tmv = Time for A'*v nvec-times (v vector) +% time_mtm = Time for B*A' (B nvec-by-n^2 matrix) +% time_mtv = Time for v*A' nvec-times (v vector) +% + +function results = benchmark_stmm (n, nvec) + + benchutil_default_arg ('n', 300); + benchutil_default_arg ('nvec', 100); + + benchutil_initialize (mfilename) + + disp ('constructing sparse matrix') + n = 300; % size of the grid + m = n^2; % number of points + X = (n-1)*rand (m, 1); Y = (n-1)*rand (m, 1); + IX = ceil (X); JY = ceil (Y); + + A = sparse(m, n^2); + A = A + sparse (1:m, sub2ind ([n, n], IX , JY ), (IX+1-X).*(JY+1-Y), m, n^2); + A = A + sparse (1:m, sub2ind ([n, n], IX+1, JY ), (X - IX).*(JY+1-Y), m, n^2); + A = A + sparse (1:m, sub2ind ([n, n], IX , JY+1), (IX+1-X).*(Y - JY), m, n^2); + A = A + sparse (1:m, sub2ind ([n, n], IX+1, JY+1), (X - IX).*(Y - JY), m, n^2); + + v = ones (m, nvec); + tic; u = A'*v; time_tmm = toc; + benchutil_set_result ('time_tmm') + + v = ones (m, 1); + tic; + for i=1:nvec + u = A'*v; + end + time_tmv = toc; + benchutil_set_result ('time_tmv') + + v = ones (nvec, m); + tic; u = v*A'; time_mtm = toc; + benchutil_set_result ('time_mtm') + + v = ones (1, m); + tic; + for i=1:nvec + u = v*A'; + end + time_mtv = toc; + benchutil_set_result ('time_mtv') + Added: trunk/octave-forge/main/benchmark/inst/benchutil_default_arg.m =================================================================== --- trunk/octave-forge/main/benchmark/inst/benchutil_default_arg.m (rev 0) +++ trunk/octave-forge/main/benchmark/inst/benchutil_default_arg.m 2008-06-05 07:05:59 UTC (rev 5089) @@ -0,0 +1,28 @@ +% Copyright (C) 2008 Jaroslav Hajek <hi...@gm...> +% +% This file is part of OctaveForge. +% +% OctaveForge 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 software; see the file COPYING. If not, see +% <http://www.gnu.org/licenses/>. +% + +% benchmark_default_arg (name, value) +% set argument to a default value. This function is provided for +% compatibility with Matlab, which misses Octave's default arguments +% feature. +% +function benchutil_default_arg (name, value) + if (~ evalin ('caller', sprintf ('exist (''%s'', ''var'')', name))) + assignin ('caller', name, value); + end Added: trunk/octave-forge/main/benchmark/inst/benchutil_initialize.m =================================================================== --- trunk/octave-forge/main/benchmark/inst/benchutil_initialize.m (rev 0) +++ trunk/octave-forge/main/benchmark/inst/benchutil_initialize.m 2008-06-05 07:05:59 UTC (rev 5089) @@ -0,0 +1,44 @@ +% Copyright (C) 2008 Jaroslav Hajek <hi...@gm...> +% +% This file is part of OctaveForge. +% +% OctaveForge 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 software; see the file COPYING. If not, see +% <http://www.gnu.org/licenses/>. +% + +% function benchutil_initialize (mfname) +% initializes a benchmark. The argument passed must be the filename of the +% function. +% +function benchutil_initialize (mfname) + [bench_desc, arg_desc, result_desc] = ... + benchutil_parse_desc ([mfname, '.m']); + assignin ('caller', 'result_desc', result_desc); + if (benchutil_verbose) + fprintf (1, 'Running benchmark: %s\n', mfname); + fwrite (1, bench_desc); + fprintf (1, '\n'); + argns = fieldnames (arg_desc); + for argn = argns' + argn = argn{1}; + argv = evalin ('caller', argn); + fprintf (1, '%s (%s) = %g\n', arg_desc.(argn), argn, argv); + end + if (benchutil_is_octave) + fflush (1); + end + end + + + Added: trunk/octave-forge/main/benchmark/inst/benchutil_is_octave.m =================================================================== --- trunk/octave-forge/main/benchmark/inst/benchutil_is_octave.m (rev 0) +++ trunk/octave-forge/main/benchmark/inst/benchutil_is_octave.m 2008-06-05 07:05:59 UTC (rev 5089) @@ -0,0 +1,30 @@ +% Copyright (C) 2008 Jaroslav Hajek <hi...@gm...> +% +% This file is part of OctaveForge. +% +% OctaveForge 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 software; see the file COPYING. If not, see +% <http://www.gnu.org/licenses/>. +% + +% function benchutil_is_octave () +% returns true if this is Octave. If not, we're probably run on Matlab. +% + +function answer = benchutil_is_octave () + persistent isoctave; + if (isempty (isoctave)) + isoctave = ~ isempty (ver ('Octave')); + end + answer = isoctave; + Added: trunk/octave-forge/main/benchmark/inst/benchutil_parse_desc.m =================================================================== --- trunk/octave-forge/main/benchmark/inst/benchutil_parse_desc.m (rev 0) +++ trunk/octave-forge/main/benchmark/inst/benchutil_parse_desc.m 2008-06-05 07:05:59 UTC (rev 5089) @@ -0,0 +1,69 @@ +% Copyright (C) 2008 Jaroslav Hajek <hi...@gm...> +% +% This file is part of OctaveForge. +% +% OctaveForge 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 software; see the file COPYING. If not, see +% <http://www.gnu.org/licenses/>. +% + +% function [bench_desc, arg_desc, result_desc] = benchutil_parse_desc (mpath) +% parse the inline comment description from a benchmark +% + +function [bench_desc, arg_desc, result_desc] = benchutil_parse_desc (mpath) + fid = fopen (mpath, 'rt'); + + line = ''; + iseof = feof (fid); + while (~ (strncmp (line, '% description:', 14) || iseof)) + line = fgets (fid); + iseof = feof (fid); + end + + bench_desc = ''; + line = fgets (fid); + iseof = feof (fid); + while (~ (strncmp (line, '% arguments:', 12) || feof (fid))) + %TODO fix + bench_desc = [bench_desc, line(3:end)]; + line = fgets (fid); + iseof = feof (fid); + end + + line = fgetl (fid); + iseof = feof (fid); + while (~ (strncmp (line, '% results:', 10) || feof (fid))) + i = strfind (line, ' = '); + if (~ isempty (i)) + name = line (3:i(1)-1); + arg_desc.(name) = line (i(1)+3:end); + end + line = fgetl (fid); + iseof = feof (fid); + end + + line = fgetl (fid); + iseof = feof (fid); + while (strncmp (line, '%', 1) && ~ feof (fid)) + i = strfind (line, ' = '); + if (~ isempty (i)) + name = line (3:i(1)-1); + result_desc.(name) = line (i(1)+3:end); + end + line = fgetl (fid); + iseof = feof (fid); + end + + fclose (fid); + Added: trunk/octave-forge/main/benchmark/inst/benchutil_set_result.m =================================================================== --- trunk/octave-forge/main/benchmark/inst/benchutil_set_result.m (rev 0) +++ trunk/octave-forge/main/benchmark/inst/benchutil_set_result.m 2008-06-05 07:05:59 UTC (rev 5089) @@ -0,0 +1,32 @@ +% Copyright (C) 2008 Jaroslav Hajek <hi...@gm...> +% +% This file is part of OctaveForge. +% +% OctaveForge 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 software; see the file COPYING. If not, see +% <http://www.gnu.org/licenses/>. +% + +function benchutil_set_result (name) + if (~ benchutil_verbose || evalin ('caller', 'nargout') > 0) + evalin ('caller', sprintf ('results.%s = %s;', name, name)); + end + if (benchutil_verbose) + value_desc = evalin ('caller', sprintf ('result_desc.%s', name)); + value = evalin ('caller', name); + fprintf (1, '%s: %g\n', value_desc, value); + if (benchutil_is_octave) + fflush (1); + end + end + Added: trunk/octave-forge/main/benchmark/inst/benchutil_verbose.m =================================================================== --- trunk/octave-forge/main/benchmark/inst/benchutil_verbose.m (rev 0) +++ trunk/octave-forge/main/benchmark/inst/benchutil_verbose.m 2008-06-05 07:05:59 UTC (rev 5089) @@ -0,0 +1,33 @@ +% Copyright (C) 2008 Jaroslav Hajek <hi...@gm...> +% +% This file is part of OctaveForge. +% +% OctaveForge 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 software; see the file COPYING. If not, see +% <http://www.gnu.org/licenses/>. +% + +% function OLD_FLAG = benchutil_verbose (NEW_FLAG) +% sets or queries the benchmark verbosity flag +% +function flag = benchutil_verbose (setflag) + persistent verbose; + if (isempty (verbose)) + verbose = true; + end + if (nargin == 0 || nargout == 1) + flag = verbose; + end + if (nargin == 1) + verbose = setflag; + end This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |