geokdtree 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +5 -0
- data/README.md +20 -24
- data/Rakefile +8 -11
- data/ext/geokdtree/Rakefile +6 -0
- data/geokdtree.gemspec +6 -3
- data/lib/geokdtree.rb +2 -2
- data/lib/geokdtree/version.rb +1 -1
- metadata +45 -6
- data/ext/geokdtree/extconf.rb +0 -7
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# Geokdtree v0.2.0
|
2
2
|
|
3
3
|
Ruby & JRuby gem with a fast **k-d tree** C implementation using FFI bindings with support for latitude/longitude and **geo distance range search**.
|
4
4
|
|
@@ -6,33 +6,21 @@ A [k-d tree](https://en.wikipedia.org/wiki/K-d_tree) is a space-partitioning dat
|
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
9
|
-
Tested on OSX 10.8.2 with
|
10
|
-
- MRI Ruby 1.9.3 p362
|
11
|
-
- MRI Ruby 1.9.3 p385
|
9
|
+
Tested on **OSX 10.8.2** and **Linux 12.10** with
|
10
|
+
- MRI Ruby 1.9.3 p362, 1.9.3 p385
|
12
11
|
- JRuby 1.7.2 (1.9.3 p327)
|
13
12
|
|
14
13
|
Add this line to your application's Gemfile:
|
15
|
-
|
14
|
+
```
|
16
15
|
gem 'geokdtree'
|
17
|
-
|
16
|
+
```
|
18
17
|
And then execute:
|
19
|
-
|
18
|
+
```
|
20
19
|
$ bundle
|
21
|
-
|
22
|
-
Or install it yourself as:
|
23
|
-
|
24
|
-
$ gem install geokdtree
|
25
|
-
|
26
|
-
## JRuby Notes
|
27
|
-
|
28
|
-
if the gem installation fails with the following error message, this is because JRuby disabled native extensions by default.
|
29
20
|
```
|
30
|
-
|
21
|
+
Or install it yourself as:
|
31
22
|
```
|
32
|
-
|
33
|
-
To fix this simply set the following JRuby runtime option
|
34
|
-
``` sh
|
35
|
-
$ export JRUBY_OPTS=-Xcext.enabled=true
|
23
|
+
$ gem install geokdtree
|
36
24
|
```
|
37
25
|
|
38
26
|
## Usage
|
@@ -103,12 +91,20 @@ $ export JRUBY_OPTS=-Xcext.enabled=true
|
|
103
91
|
puts(d.inspect) # => 403
|
104
92
|
```
|
105
93
|
|
94
|
+
## Developement
|
95
|
+
|
96
|
+
1. Fort it
|
97
|
+
2. Install gems `$ bundle install`
|
98
|
+
3. Compile lib `$ rake compile`
|
99
|
+
4. Run specs `$ rake spec`
|
100
|
+
5. Clean compiler generated files `$ rake clean`
|
101
|
+
|
106
102
|
## Contributing
|
107
103
|
|
108
104
|
1. Fork it
|
109
|
-
2. Create your feature branch
|
110
|
-
3. Commit your changes
|
111
|
-
4. Push to the branch
|
105
|
+
2. Create your feature branch `git checkout -b my-new-feature`
|
106
|
+
3. Commit your changes `git commit -am 'Add some feature'`
|
107
|
+
4. Push to the branch `git push origin my-new-feature`
|
112
108
|
5. Create new Pull Request
|
113
109
|
|
114
110
|
## Credits
|
@@ -118,4 +114,4 @@ $ export JRUBY_OPTS=-Xcext.enabled=true
|
|
118
114
|
Colin Surprenant, [@colinsurprenant](http://twitter.com/colinsurprenant), [http://github.com/colinsurprenant](http://github.com/colinsurprenant), colin.surprenant@gmail.com
|
119
115
|
|
120
116
|
## License
|
121
|
-
|
117
|
+
Geokdtree is distributed under the Apache License, Version 2.0.
|
data/Rakefile
CHANGED
@@ -3,28 +3,25 @@ require 'rake'
|
|
3
3
|
require 'rake/clean'
|
4
4
|
require 'bundler/gem_tasks'
|
5
5
|
require 'rspec/core/rake_task'
|
6
|
+
require 'ffi-compiler/compile_task'
|
6
7
|
|
7
8
|
task :default => :spec
|
8
9
|
|
9
|
-
desc "
|
10
|
+
desc "run specs"
|
10
11
|
task :spec do
|
11
12
|
RSpec::Core::RakeTask.new
|
12
13
|
end
|
13
14
|
|
14
|
-
desc "
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
desc "compiler tasks"
|
16
|
+
namespace "ffi-compiler" do
|
17
|
+
FFI::Compiler::CompileTask.new('ext/geokdtree/geokdtree') do |c|
|
18
|
+
c.have_library?('pthread')
|
19
|
+
c.cflags << "-DUSE_LIST_NODE_ALLOCATOR"
|
19
20
|
end
|
20
|
-
cp "ext/geokdtree/geokdtree.bundle", "lib/"
|
21
21
|
end
|
22
|
+
task :compile => ["ffi-compiler:default"]
|
22
23
|
|
23
24
|
CLEAN.include('ext/**/*{.o,.log,.so,.bundle}')
|
24
25
|
CLEAN.include('lib/**/*{.o,.log,.so,.bundle}')
|
25
26
|
CLEAN.include('ext/**/Makefile')
|
26
27
|
|
27
|
-
def jruby?
|
28
|
-
!!(defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby')
|
29
|
-
end
|
30
|
-
|
data/geokdtree.gemspec
CHANGED
@@ -16,8 +16,11 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ["lib"]
|
19
|
-
gem.extensions = ["ext/geokdtree/
|
19
|
+
gem.extensions = ["ext/geokdtree/Rakefile"]
|
20
20
|
|
21
|
-
gem.
|
22
|
-
gem.
|
21
|
+
gem.add_dependency 'rake'
|
22
|
+
gem.add_dependency 'ffi'
|
23
|
+
gem.add_dependency 'ffi-compiler'
|
24
|
+
|
25
|
+
gem.add_development_dependency 'rspec'
|
23
26
|
end
|
data/lib/geokdtree.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'ffi'
|
2
|
+
require 'ffi-compiler/loader'
|
2
3
|
|
3
4
|
module Geokdtree
|
4
5
|
module C
|
5
6
|
extend FFI::Library
|
6
|
-
|
7
|
-
ffi_lib File.dirname(__FILE__) + "/" + (FFI::Platform.mac? ? "geokdtree.bundle" : FFI.map_library_name("geokdtree"))
|
7
|
+
ffi_lib FFI::Compiler::Loader.find('geokdtree')
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
data/lib/geokdtree/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geokdtree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,17 +9,17 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-02-
|
12
|
+
date: 2013-02-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: rake
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: '0'
|
22
|
-
type: :
|
22
|
+
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
@@ -43,24 +43,57 @@ dependencies:
|
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: ffi-compiler
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
46
78
|
description: Ruby & JRuby gem with a fast k-d tree C implementation using FFI bindings
|
47
79
|
with support for latitude/longitude and geo distance range search
|
48
80
|
email:
|
49
81
|
- colin.surprenant@gmail.com
|
50
82
|
executables: []
|
51
83
|
extensions:
|
52
|
-
- ext/geokdtree/
|
84
|
+
- ext/geokdtree/Rakefile
|
53
85
|
extra_rdoc_files: []
|
54
86
|
files:
|
55
87
|
- .gitignore
|
88
|
+
- CHANGELOG.md
|
56
89
|
- Gemfile
|
57
90
|
- LICENSE.txt
|
58
91
|
- README.md
|
59
92
|
- Rakefile
|
60
93
|
- example/usage.rb
|
94
|
+
- ext/geokdtree/Rakefile
|
61
95
|
- ext/geokdtree/distance.c
|
62
96
|
- ext/geokdtree/distance.h
|
63
|
-
- ext/geokdtree/extconf.rb
|
64
97
|
- ext/geokdtree/kdtree.c
|
65
98
|
- ext/geokdtree/kdtree.h
|
66
99
|
- geokdtree.gemspec
|
@@ -81,12 +114,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
81
114
|
- - ! '>='
|
82
115
|
- !ruby/object:Gem::Version
|
83
116
|
version: '0'
|
117
|
+
segments:
|
118
|
+
- 0
|
119
|
+
hash: 1969207989393657853
|
84
120
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
121
|
none: false
|
86
122
|
requirements:
|
87
123
|
- - ! '>='
|
88
124
|
- !ruby/object:Gem::Version
|
89
125
|
version: '0'
|
126
|
+
segments:
|
127
|
+
- 0
|
128
|
+
hash: 1969207989393657853
|
90
129
|
requirements: []
|
91
130
|
rubyforge_project:
|
92
131
|
rubygems_version: 1.8.23
|