diff options
author | xantares | 2015-06-08 21:50:47 +0200 |
---|---|---|
committer | xantares | 2015-06-08 21:50:47 +0200 |
commit | 8c4683eead7eec13681d3126dee00499b20d446b (patch) | |
tree | d6386554e67a948ee1d7f3006c17398e1a564e0a | |
download | aur-8c4683eead7eec13681d3126dee00499b20d446b.tar.gz |
Initial import
-rw-r--r-- | .SRCINFO | 19 | ||||
-rw-r--r-- | PKGBUILD | 44 | ||||
-rw-r--r-- | parallel.patch | 156 |
3 files changed, 219 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..18260ef914ff --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,19 @@ +pkgbase = mingw-w64-ann + pkgdesc = Approximate nearest neighbor library. (mingw-w64) + pkgver = 1.1.2 + pkgrel = 1 + url = http://www.cs.umd.edu/~mount/ANN/ + arch = any + license = LGPL + makedepends = mingw-w64-gcc + depends = mingw-w64-crt + options = !buildflags + options = !strip + options = staticlibs + source = http://www.cs.umd.edu/~mount/ANN/Files/1.1.2/ann_1.1.2.tar.gz + source = parallel.patch + md5sums = 7ffaacc7ea79ca39d4958a6378071365 + md5sums = b332924dd27ee8a7fc479f28761a4381 + +pkgname = mingw-w64-ann + diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..27ecdc2629b4 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,44 @@ +pkgname=mingw-w64-ann +pkgver=1.1.2 +pkgrel=1 +pkgdesc="Approximate nearest neighbor library. (mingw-w64)" +url="http://www.cs.umd.edu/~mount/ANN/" +arch=('any') +license="LGPL" +depends=('mingw-w64-crt') +makedepends=('mingw-w64-gcc') +options=('!buildflags' '!strip' 'staticlibs') +source=("http://www.cs.umd.edu/~mount/ANN/Files/$pkgver/ann_$pkgver.tar.gz" + parallel.patch) +md5sums=('7ffaacc7ea79ca39d4958a6378071365' + 'b332924dd27ee8a7fc479f28761a4381') + +_architectures="i686-w64-mingw32 x86_64-w64-mingw32" + +prepare () { + cd "$srcdir/ann_$pkgver" + patch -p1 < $srcdir/parallel.patch +} + +build() { + cd "$srcdir" + for _arch in ${_architectures}; do + cp -r ann_$pkgver build-${_arch} && pushd build-${_arch} + sed -i "s|C++|CXX|g" src/Makefile + make ANNLIB=libANN.a CXX=${_arch}-g++ \ + CFLAGS="-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 -DDLL_EXPORTS" \ + MAKELIB="${_arch}-ar ruv" RANLIB=${_arch}-ranlib targets -C src + popd + done +} + +package () { + for _arch in ${_architectures}; do + cd "$srcdir/build-${_arch}" + install -d "$pkgdir"/usr/${_arch}/{lib,include/ANN} + install -m644 lib/libANN.a "$pkgdir"/usr/${_arch}/lib + install -m644 include/ANN/* "$pkgdir"/usr/${_arch}/include/ANN +# ${_arch}-strip --strip-unneeded "$pkgdir"/usr/${_arch}/bin/*.dll + ${_arch}-strip -g "$pkgdir"/usr/${_arch}/lib/*.a + done +} diff --git a/parallel.patch b/parallel.patch new file mode 100644 index 000000000000..1d5e3ebb4ca4 --- /dev/null +++ b/parallel.patch @@ -0,0 +1,156 @@ +# HG changeset patch +# User Dmitriy Morozov <dmitriy@mrzv.org> +# Date 1247864070 25200 +# Node ID f1e962ffa1c22e979d80ab282aa26ab07d263390 +# Parent 689462154b3a1e285a559ed5747063498660f1df +ANNkd_tree:annkSearch() is reentrant, in particular it works with OpenMP + +diff -r 689462154b3a -r f1e962ffa1c2 src/bd_search.cpp +--- a/src/bd_search.cpp Tue Jul 14 09:25:24 2009 -0700 ++++ b/src/bd_search.cpp Fri Jul 17 13:54:30 2009 -0700 +@@ -36,6 +36,8 @@ + // bd_shrink::ann_search - search a shrinking node + //---------------------------------------------------------------------- + ++ANNpoint ANNkdQ; // query point ++ANNmin_k *ANNkdPointMK; // set of k closest points + void ANNbd_shrink::ann_search(ANNdist box_dist) + { + // check dist calc term cond. +diff -r 689462154b3a -r f1e962ffa1c2 src/kd_search.cpp +--- a/src/kd_search.cpp Tue Jul 14 09:25:24 2009 -0700 ++++ b/src/kd_search.cpp Fri Jul 17 13:54:30 2009 -0700 +@@ -77,10 +77,8 @@ + //---------------------------------------------------------------------- + + int ANNkdDim; // dimension of space +-ANNpoint ANNkdQ; // query point + double ANNkdMaxErr; // max tolerable squared error + ANNpointArray ANNkdPts; // the points +-ANNmin_k *ANNkdPointMK; // set of k closest points + + //---------------------------------------------------------------------- + // annkSearch - search for the k nearest neighbors +@@ -93,6 +91,8 @@ + ANNdistArray dd, // the approximate nearest neighbor + double eps) // the error bound + { ++ ANNpoint ANNkdQ; // query point ++ ANNmin_k *ANNkdPointMK; // set of k closest points + + ANNkdDim = dim; // copy arguments to static equivs + ANNkdQ = q; +@@ -108,7 +108,7 @@ + + ANNkdPointMK = new ANNmin_k(k); // create set for closest k points + // search starting at the root +- root->ann_search(annBoxDistance(q, bnd_box_lo, bnd_box_hi, dim)); ++ root->ann_search(ANNkdQ, ANNkdPointMK, annBoxDistance(q, bnd_box_lo, bnd_box_hi, dim)); + + for (int i = 0; i < k; i++) { // extract the k-th closest points + dd[i] = ANNkdPointMK->ith_smallest_key(i); +@@ -121,7 +121,7 @@ + // kd_split::ann_search - search a splitting node + //---------------------------------------------------------------------- + +-void ANNkd_split::ann_search(ANNdist box_dist) ++void ANNkd_split::ann_search(ANNpoint& ANNkdQ, ANNmin_k* ANNkdPointMK, ANNdist box_dist) + { + // check dist calc term condition + if (ANNmaxPtsVisited != 0 && ANNptsVisited > ANNmaxPtsVisited) return; +@@ -130,7 +130,7 @@ + ANNcoord cut_diff = ANNkdQ[cut_dim] - cut_val; + + if (cut_diff < 0) { // left of cutting plane +- child[ANN_LO]->ann_search(box_dist);// visit closer child first ++ child[ANN_LO]->ann_search(ANNkdQ, ANNkdPointMK, box_dist);// visit closer child first + + ANNcoord box_diff = cd_bnds[ANN_LO] - ANNkdQ[cut_dim]; + if (box_diff < 0) // within bounds - ignore +@@ -141,11 +141,11 @@ + + // visit further child if close enough + if (box_dist * ANNkdMaxErr < ANNkdPointMK->max_key()) +- child[ANN_HI]->ann_search(box_dist); ++ child[ANN_HI]->ann_search(ANNkdQ, ANNkdPointMK, box_dist); + + } + else { // right of cutting plane +- child[ANN_HI]->ann_search(box_dist);// visit closer child first ++ child[ANN_HI]->ann_search(ANNkdQ, ANNkdPointMK, box_dist);// visit closer child first + + ANNcoord box_diff = ANNkdQ[cut_dim] - cd_bnds[ANN_HI]; + if (box_diff < 0) // within bounds - ignore +@@ -156,7 +156,7 @@ + + // visit further child if close enough + if (box_dist * ANNkdMaxErr < ANNkdPointMK->max_key()) +- child[ANN_LO]->ann_search(box_dist); ++ child[ANN_LO]->ann_search(ANNkdQ, ANNkdPointMK, box_dist); + + } + ANN_FLOP(10) // increment floating ops +@@ -169,7 +169,7 @@ + // some fine tuning to replace indexing by pointer operations. + //---------------------------------------------------------------------- + +-void ANNkd_leaf::ann_search(ANNdist box_dist) ++void ANNkd_leaf::ann_search(ANNpoint& ANNkdQ, ANNmin_k* ANNkdPointMK, ANNdist box_dist) + { + register ANNdist dist; // distance to data point + register ANNcoord* pp; // data coordinate pointer +diff -r 689462154b3a -r f1e962ffa1c2 src/kd_search.h +--- a/src/kd_search.h Tue Jul 14 09:25:24 2009 -0700 ++++ b/src/kd_search.h Fri Jul 17 13:54:30 2009 -0700 +@@ -39,10 +39,10 @@ + //---------------------------------------------------------------------- + + extern int ANNkdDim; // dimension of space (static copy) +-extern ANNpoint ANNkdQ; // query point (static copy) ++// extern ANNpoint ANNkdQ; // query point (static copy) + extern double ANNkdMaxErr; // max tolerable squared error + extern ANNpointArray ANNkdPts; // the points (static copy) +-extern ANNmin_k *ANNkdPointMK; // set of k closest points ++// extern ANNmin_k *ANNkdPointMK; // set of k closest points + extern int ANNptsVisited; // number of points visited + + #endif +diff -r 689462154b3a -r f1e962ffa1c2 src/kd_tree.h +--- a/src/kd_tree.h Tue Jul 14 09:25:24 2009 -0700 ++++ b/src/kd_tree.h Fri Jul 17 13:54:30 2009 -0700 +@@ -28,6 +28,7 @@ + #define ANN_kd_tree_H + + #include <ANN/ANNx.h> // all ANN includes ++#include "pr_queue_k.h" // k-element priority queue + + using namespace std; // make std:: available + +@@ -47,7 +48,8 @@ + public: + virtual ~ANNkd_node() {} // virtual distroyer + +- virtual void ann_search(ANNdist) = 0; // tree search ++ virtual void ann_search(ANNdist) {} // tree search ++ virtual void ann_search(ANNpoint& ANNkdQ, ANNmin_k* ANNkdPointMK, ANNdist) {} // tree search + virtual void ann_pri_search(ANNdist) = 0; // priority search + virtual void ann_FR_search(ANNdist) = 0; // fixed-radius search + +@@ -110,7 +112,7 @@ + virtual void print(int level, ostream &out);// print node + virtual void dump(ostream &out); // dump node + +- virtual void ann_search(ANNdist); // standard search ++ virtual void ann_search(ANNpoint& ANNkdQ, ANNmin_k* ANNkdPointMK, ANNdist); // standard search + virtual void ann_pri_search(ANNdist); // priority search + virtual void ann_FR_search(ANNdist); // fixed-radius search + }; +@@ -176,7 +178,7 @@ + virtual void print(int level, ostream &out);// print node + virtual void dump(ostream &out); // dump node + +- virtual void ann_search(ANNdist); // standard search ++ virtual void ann_search(ANNpoint& ANNkdQ, ANNmin_k* ANNkdPointMK, ANNdist); // standard search + virtual void ann_pri_search(ANNdist); // priority search + virtual void ann_FR_search(ANNdist); // fixed-radius search + }; |