v2d 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig ADDED
Binary file
data/Manifest ADDED
@@ -0,0 +1,6 @@
1
+ README
2
+ Rakefile
3
+ ext/extconf.rb
4
+ ext/v2d.c
5
+ spec/v2d_spec.rb
6
+ Manifest
data/README ADDED
@@ -0,0 +1,21 @@
1
+ Installation:
2
+ ruby extconf.rb
3
+ make
4
+ make install
5
+
6
+ Usage:
7
+ require 'v2d'
8
+
9
+ v1 = V2D[1.0, 2.0] # or v1 = V2D.new(1.0, 2.0)
10
+ v2 = V2D[0, 0]
11
+
12
+ v2.x = v1.x + 10 # v2 = V2D[11, 0]
13
+ v2.y = v1.y + 10 # v2 = V2D[11, 12]
14
+ (v1 + v2) == V2D[12, 14]
15
+ (v1 - v2) == V2D[-10, -10]
16
+ (v1 * 3) == V2D[3, 6]
17
+ (v2 / 4) == V2D[2.75, 3]
18
+ V2D[3, 4].abs == 5
19
+
20
+ Tests:
21
+ spec v2d_spec.rb
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'echoe'
4
+
5
+ Echoe.new('v2d', '0.0.1') do |p|
6
+ p.description = "2D Vector implemented as Ruby extension"
7
+ p.url = "http://github.com/cypok/v2d"
8
+ p.author = "Vladimir Parfinenko"
9
+ p.email = "vladimir.parfinenko@gmail.com"
10
+ p.ignore_pattern = ["tmp/*", "script/*"]
11
+ p.development_dependencies = []
12
+ end
13
+
data/ext/extconf.rb ADDED
@@ -0,0 +1,4 @@
1
+ require 'mkmf'
2
+
3
+ dir_config("v2d")
4
+ create_makefile("v2d")
data/ext/v2d.c ADDED
@@ -0,0 +1,136 @@
1
+ #include <ruby.h>
2
+ #include <math.h>
3
+
4
+ VALUE cV2D;
5
+
6
+ ID ix, iy;
7
+
8
+ /* DEFINITIONS */
9
+
10
+ /*VALUE v2d_initialize(VALUE self);*/
11
+ VALUE v2d_initialize_with_x_and_y(VALUE self, VALUE x, VALUE y);
12
+ VALUE v2d_square_brackets(VALUE klass, VALUE x, VALUE y);
13
+ VALUE v2d_get_x(VALUE self);
14
+ VALUE v2d_get_y(VALUE self);
15
+ VALUE v2d_set_x(VALUE self, VALUE x);
16
+ VALUE v2d_set_y(VALUE self, VALUE y);
17
+ VALUE v2d_add(VALUE self, VALUE other);
18
+ VALUE v2d_sub(VALUE self, VALUE other);
19
+ VALUE v2d_mul(VALUE self, VALUE multiplier);
20
+ VALUE v2d_div(VALUE self, VALUE divisor);
21
+ VALUE v2d_abs(VALUE self);
22
+ VALUE v2d_equals(VALUE self, VALUE other);
23
+
24
+ void Init_v2d() {
25
+ cV2D = rb_define_class("V2D", rb_cObject);
26
+
27
+ /*rb_define_method(cV2D, "initialize", v2d_initialize, 0);*/
28
+ rb_define_method(cV2D, "initialize", v2d_initialize_with_x_and_y, 2);
29
+ rb_define_singleton_method(cV2D, "[]", v2d_square_brackets, 2);
30
+ rb_define_method(cV2D, "x", v2d_get_x, 0);
31
+ rb_define_method(cV2D, "y", v2d_get_y, 0);
32
+ rb_define_method(cV2D, "x=", v2d_set_x, 1);
33
+ rb_define_method(cV2D, "y=", v2d_set_y, 1);
34
+ rb_define_method(cV2D, "+", v2d_add, 1);
35
+ rb_define_method(cV2D, "-", v2d_sub, 1);
36
+ rb_define_method(cV2D, "*", v2d_mul, 1);
37
+ rb_define_method(cV2D, "/", v2d_div, 1);
38
+ rb_define_method(cV2D, "abs", v2d_abs, 0);
39
+ rb_define_method(cV2D, "==", v2d_equals, 1);
40
+
41
+ ix = rb_intern("@x");
42
+ iy = rb_intern("@y");
43
+ }
44
+
45
+ /* IMPLEMENTATION */
46
+
47
+ /*VALUE v2d_initialize(VALUE self) {*/
48
+ /*return self;*/
49
+ /*}*/
50
+
51
+ VALUE v2d_initialize_with_x_and_y(VALUE self, VALUE x, VALUE y) {
52
+ rb_ivar_set(self, ix, x);
53
+ rb_ivar_set(self, iy, y);
54
+ return self;
55
+ }
56
+
57
+ VALUE v2d_square_brackets(VALUE klass, VALUE x, VALUE y) {
58
+ VALUE args[] = {x, y};
59
+ return rb_class_new_instance(2, args, cV2D);
60
+ }
61
+
62
+ VALUE v2d_get_x(VALUE self) {
63
+ return rb_ivar_get(self, ix);
64
+ }
65
+
66
+ VALUE v2d_get_y(VALUE self) {
67
+ return rb_ivar_get(self, iy);
68
+ }
69
+
70
+ VALUE v2d_set_x(VALUE self, VALUE x) {
71
+ return rb_ivar_set(self, ix, x);
72
+ }
73
+
74
+ VALUE v2d_set_y(VALUE self, VALUE y) {
75
+ return rb_ivar_set(self, iy, y);
76
+ }
77
+
78
+ VALUE v2d_add(VALUE self, VALUE other) {
79
+ double left_x = NUM2DBL(rb_ivar_get(self, ix));
80
+ double left_y = NUM2DBL(rb_ivar_get(self, iy));
81
+ double right_x = NUM2DBL(rb_ivar_get(other, ix));
82
+ double right_y = NUM2DBL(rb_ivar_get(other, iy));
83
+ VALUE args[] = {
84
+ rb_float_new(left_x + right_x),
85
+ rb_float_new(left_y + right_y)
86
+ };
87
+ return rb_class_new_instance(2, args, cV2D);
88
+ }
89
+
90
+ VALUE v2d_sub(VALUE self, VALUE other) {
91
+ double left_x = NUM2DBL(rb_ivar_get(self, ix));
92
+ double left_y = NUM2DBL(rb_ivar_get(self, iy));
93
+ double right_x = NUM2DBL(rb_ivar_get(other, ix));
94
+ double right_y = NUM2DBL(rb_ivar_get(other, iy));
95
+ VALUE args[] = {
96
+ rb_float_new(left_x - right_x),
97
+ rb_float_new(left_y - right_y)
98
+ };
99
+ return rb_class_new_instance(2, args, cV2D);
100
+ }
101
+
102
+ VALUE v2d_mul(VALUE self, VALUE multiplier) {
103
+ double left_x = NUM2DBL(rb_ivar_get(self, ix));
104
+ double left_y = NUM2DBL(rb_ivar_get(self, iy));
105
+ double right = NUM2DBL(multiplier);
106
+ VALUE args[] = {
107
+ rb_float_new(left_x * right),
108
+ rb_float_new(left_y * right)
109
+ };
110
+ return rb_class_new_instance(2, args, cV2D);
111
+ }
112
+
113
+ VALUE v2d_div(VALUE self, VALUE divisor) {
114
+ double left_x = NUM2DBL(rb_ivar_get(self, ix));
115
+ double left_y = NUM2DBL(rb_ivar_get(self, iy));
116
+ double right = NUM2DBL(divisor);
117
+ VALUE args[] = {
118
+ rb_float_new(left_x / right),
119
+ rb_float_new(left_y / right)
120
+ };
121
+ return rb_class_new_instance(2, args, cV2D);
122
+ }
123
+
124
+ VALUE v2d_abs(VALUE self) {
125
+ double x = NUM2DBL(rb_ivar_get(self, ix));
126
+ double y = NUM2DBL(rb_ivar_get(self, iy));
127
+ return rb_float_new(sqrt(x*x + y*y));
128
+ }
129
+
130
+ VALUE v2d_equals(VALUE self, VALUE other) {
131
+ double left_x = NUM2DBL(rb_ivar_get(self, ix));
132
+ double left_y = NUM2DBL(rb_ivar_get(self, iy));
133
+ double right_x = NUM2DBL(rb_ivar_get(other, ix));
134
+ double right_y = NUM2DBL(rb_ivar_get(other, iy));
135
+ return (left_x == right_x && left_y == right_y) ? Qtrue : Qfalse;
136
+ }
data/spec/v2d_spec.rb ADDED
@@ -0,0 +1,71 @@
1
+ require 'v2d'
2
+
3
+ describe V2D do
4
+ it "#new should create with arguments" do
5
+ v = V2D.new(1,2)
6
+ v.x.should == 1
7
+ end
8
+
9
+ it "#[] should create with arguments" do
10
+ v = V2D[1, 2]
11
+ v.x.should == 1
12
+ end
13
+
14
+ it "#x should return first coordinate" do
15
+ V2D[1, 2].x.should == 1
16
+ end
17
+
18
+ it "#y should return second coordinate" do
19
+ V2D[1, 2].y.should == 2
20
+ end
21
+
22
+ it "#x= should set first coordinate" do
23
+ v = V2D[1, 2]
24
+ v.x = 3
25
+ v.should == V2D[3, 2]
26
+ end
27
+
28
+ it "#y should set second coordinate" do
29
+ v = V2D[1, 2]
30
+ v.y = 3
31
+ v.should == V2D[1, 3]
32
+ end
33
+
34
+ describe "operations" do
35
+ before do
36
+ @v1 = V2D[1.0, 2]
37
+ @v2 = V2D[3, 9.0]
38
+ end
39
+
40
+ describe "#+" do
41
+ it "should return new vector as sum" do
42
+ (@v1+@v2).should == V2D[4, 11]
43
+ end
44
+ end
45
+
46
+ describe "#-" do
47
+ it "should return new vector as difference" do
48
+ (@v1-@v2).should == V2D[-2, -7]
49
+ end
50
+ end
51
+
52
+ describe "#*" do
53
+ it "should return new vector as product" do
54
+ (@v1*3).should == V2D[3, 6]
55
+ end
56
+ end
57
+
58
+ describe "#/" do
59
+ it "should return new vector as quotient" do
60
+ (@v1/2).should == V2D[0.5, 1]
61
+ end
62
+ end
63
+
64
+ describe "#abs" do
65
+ it "should return absolute value of vector" do
66
+ @v1.abs.should == Math::sqrt(5)
67
+ end
68
+ end
69
+ end
70
+ end
71
+
data/v2d.gemspec ADDED
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{v2d}
5
+ s.version = "0.0.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Vladimir Parfinenko"]
9
+ s.cert_chain = ["/Users/cypok/gem-public_cert.pem"]
10
+ s.date = %q{2010-09-15}
11
+ s.description = %q{2D Vector implemented as Ruby extension}
12
+ s.email = %q{vladimir.parfinenko@gmail.com}
13
+ s.extensions = ["ext/extconf.rb"]
14
+ s.extra_rdoc_files = ["README", "ext/extconf.rb", "ext/v2d.c"]
15
+ s.files = ["README", "Rakefile", "ext/extconf.rb", "ext/v2d.c", "spec/v2d_spec.rb", "Manifest", "v2d.gemspec"]
16
+ s.homepage = %q{http://github.com/cypok/v2d}
17
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "V2d", "--main", "README"]
18
+ s.require_paths = ["ext"]
19
+ s.rubyforge_project = %q{v2d}
20
+ s.rubygems_version = %q{1.3.7}
21
+ s.signing_key = %q{/Users/cypok/gem-private_key.pem}
22
+ s.summary = %q{2D Vector implemented as Ruby extension}
23
+
24
+ if s.respond_to? :specification_version then
25
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
26
+ s.specification_version = 3
27
+
28
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
29
+ else
30
+ end
31
+ else
32
+ end
33
+ end
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: v2d
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Vladimir Parfinenko
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain:
17
+ - |
18
+ -----BEGIN CERTIFICATE-----
19
+ MIIDSDCCAjCgAwIBAgIBADANBgkqhkiG9w0BAQUFADBKMRwwGgYDVQQDDBN2bGFk
20
+ aW1pci5wYXJmaW5lbmtvMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJ
21
+ k/IsZAEZFgNjb20wHhcNMTAwOTE1MDg0MTM2WhcNMTEwOTE1MDg0MTM2WjBKMRww
22
+ GgYDVQQDDBN2bGFkaW1pci5wYXJmaW5lbmtvMRUwEwYKCZImiZPyLGQBGRYFZ21h
23
+ aWwxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
24
+ ggEKAoIBAQCvZkpRSuCHyoPAGvQzWo6JTxJIYpPglVbJalWLUouWhcGewCFcoGpy
25
+ jSkyG1nFUa2AdfEf9x39ZJeRRN7rbH1pcWsXbyMXojWjJ6XhjPL7IlWR1U70qYKO
26
+ c27RdnFhtnd7acXkx/tPrOk/Z/MYVdl9zYXa1gT+uXIWd+M/CS8sRgjSsf3Uxty/
27
+ hObfwgNzWcBCC2iLbi+WTWrvAqO6nj9uRiktEowVH3hUQeg0RQ5PALtmwEGxlfJ6
28
+ HtcL7sKP5lGUkJ8/ZDUofOgkatJmA8V98Qpz3SSEGbPcGw9vtm2lKThwb/6BJ8mO
29
+ fsBh9jiK1ccDVCJmtSJpsIBfxgIyZz7zAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYD
30
+ VR0PBAQDAgSwMB0GA1UdDgQWBBTPzkzZ+7oNX5uWByxqDPaCcxL2izANBgkqhkiG
31
+ 9w0BAQUFAAOCAQEAd0d1BgRz8j+M599IbrQtJOE7IwcmmKM7oQ36mtfb/+MpMZtt
32
+ AI6gbwF5mO9PgWduOjsefH0YI54gjbEH5LeU+eX18WyZPjFtPPQA9oV2e87EcLMU
33
+ N9DLKwhaZrZw0Hkpj9RxguPmoOKds8sRK9OLg1iiLx42sLQ+T6eIn5g0y6QHN9fW
34
+ f8O73LNFaCcG5dfl0dQU0gjJEJ4OsgSpSob1Vxhcoz6U1XTQmj7ZUqMn5qKq9Nh0
35
+ a2F49GO07YddCacBqSjA4DZoQxVsdruI7dtOcvHYvoOB8tY7Ue9XKPcRcyyZa6XN
36
+ 78F0qvtLjR0DAnN6uYs98PR+jHE+0ckLX3D9sw==
37
+ -----END CERTIFICATE-----
38
+
39
+ date: 2010-09-15 00:00:00 +07:00
40
+ default_executable:
41
+ dependencies: []
42
+
43
+ description: 2D Vector implemented as Ruby extension
44
+ email: vladimir.parfinenko@gmail.com
45
+ executables: []
46
+
47
+ extensions:
48
+ - ext/extconf.rb
49
+ extra_rdoc_files:
50
+ - README
51
+ - ext/extconf.rb
52
+ - ext/v2d.c
53
+ files:
54
+ - README
55
+ - Rakefile
56
+ - ext/extconf.rb
57
+ - ext/v2d.c
58
+ - spec/v2d_spec.rb
59
+ - Manifest
60
+ - v2d.gemspec
61
+ has_rdoc: true
62
+ homepage: http://github.com/cypok/v2d
63
+ licenses: []
64
+
65
+ post_install_message:
66
+ rdoc_options:
67
+ - --line-numbers
68
+ - --inline-source
69
+ - --title
70
+ - V2d
71
+ - --main
72
+ - README
73
+ require_paths:
74
+ - ext
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ hash: 3
81
+ segments:
82
+ - 0
83
+ version: "0"
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ hash: 11
90
+ segments:
91
+ - 1
92
+ - 2
93
+ version: "1.2"
94
+ requirements: []
95
+
96
+ rubyforge_project: v2d
97
+ rubygems_version: 1.3.7
98
+ signing_key:
99
+ specification_version: 3
100
+ summary: 2D Vector implemented as Ruby extension
101
+ test_files: []
102
+
metadata.gz.sig ADDED
@@ -0,0 +1 @@
1
+ K] ��"HYQݤ���0�[���\^�r9�d