summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorxantares2015-06-08 21:50:47 +0200
committerxantares2015-06-08 21:50:47 +0200
commit8c4683eead7eec13681d3126dee00499b20d446b (patch)
treed6386554e67a948ee1d7f3006c17398e1a564e0a
downloadaur-8c4683eead7eec13681d3126dee00499b20d446b.tar.gz
Initial import
-rw-r--r--.SRCINFO19
-rw-r--r--PKGBUILD44
-rw-r--r--parallel.patch156
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
+ };