ffts 0.0.1

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3cbeea7345418afbc3f3f317a2726a44767056e5
4
+ data.tar.gz: fb1001eb4c979c18ba5961c829cfb9cb64088c7d
5
+ SHA512:
6
+ metadata.gz: 56092d7d86e2f0b0813f2206ac11be5dbaa2f8672e31929f868416e764753fdd08dfd59c1fda15d81aec74581e3f4e50021af36d950abcfd4de97b34bf178714
7
+ data.tar.gz: 964aceab4d83fb854dbb0baa464e83354b98927953f354938fb4b8b67986fecfa1e5b43e2006a16469256e48989d39c15989c34fe37df65d82228f2965644589
checksums.yaml.gz.sig ADDED
Binary file
data/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # FFTS Ruby Gem
2
+
3
+ Ruby gem with native extension for FFTS library.
4
+
5
+ ## Requirements
6
+
7
+ * FFTS library, found at [https://github.com/anthonix/ffts](https://github.com/anthonix/ffts).
@@ -0,0 +1,36 @@
1
+ require 'mkmf'
2
+ require 'pry-byebug'
3
+
4
+ header_dirs = [
5
+ # First search /opt/local for macports
6
+ '/opt/local/include',
7
+
8
+ # Then search /usr/local for people that installed from source
9
+ '/usr/local/include',
10
+
11
+ # Finally fall back to /usr
12
+ '/usr/include',
13
+ ]
14
+
15
+ lib_dirs = [
16
+ # First search /opt/local for macports
17
+ '/opt/local/lib',
18
+
19
+ # Then search /usr/local for people that installed from source
20
+ '/usr/local/lib',
21
+
22
+ # Finally fall back to /usr
23
+ '/usr/lib',
24
+ ]
25
+
26
+ dir_config('ffts', header_dirs, lib_dirs)
27
+
28
+ unless find_header('ffts/ffts.h')
29
+ abort "FFTS is missing. Please install FFTS."
30
+ end
31
+
32
+ unless find_library('ffts', 'ffts_free', *lib_dirs)
33
+ abort "FFTS library cannot be found. Please install FFTS."
34
+ end
35
+
36
+ create_makefile 'ffts/ffts'
data/ext/ffts/ffts.c ADDED
@@ -0,0 +1,88 @@
1
+ #include <ruby.h>
2
+ #include <stdio.h>
3
+ #include <ffts/ffts.h>
4
+
5
+ // Declare variables.
6
+ VALUE mFFTS;
7
+ VALUE cPlan;
8
+ VALUE cCPlan;
9
+
10
+ static VALUE
11
+ ffts_plan_initialize(VALUE self, VALUE rb_frames, VALUE rb_sign) {
12
+ ffts_plan_t *plan;
13
+
14
+ size_t size = RARRAY_LEN(rb_frames);
15
+ if (size % 2 != 0) {
16
+ rb_raise(rb_eRuntimeError, "Frames must be a power of 2.");
17
+ return Qnil;
18
+ }
19
+
20
+ int sign_v = NUM2INT(rb_sign);
21
+ if (sign_v != -1 && sign_v != 1) {
22
+ rb_raise(rb_eRuntimeError, "Sign must be 1 or -1.");
23
+ return Qnil;
24
+ }
25
+
26
+ plan = ffts_init_1d(size, sign_v);
27
+
28
+ VALUE rb_plan = Data_Wrap_Struct(cCPlan, NULL, ffts_free, plan);
29
+
30
+ rb_funcall(self, rb_intern("n="), 1, INT2NUM(size));
31
+ rb_funcall(self, rb_intern("frames="), 1, rb_frames);
32
+ rb_funcall(self, rb_intern("sign="), 1, rb_sign);
33
+ rb_funcall(self, rb_intern("plan="), 1, rb_plan);
34
+
35
+ return self;
36
+ }
37
+
38
+ static VALUE
39
+ ffts_plan_execute(VALUE self) {
40
+
41
+
42
+ VALUE rb_plan = rb_funcall(self, rb_intern("plan"), 0);
43
+ VALUE rb_frames = rb_funcall(self, rb_intern("frames"), 0);
44
+ VALUE rb_n = rb_funcall(self, rb_intern("n"), 0);
45
+
46
+ ffts_plan_t *plan;
47
+ Data_Get_Struct(rb_plan, ffts_plan_t, plan);
48
+
49
+ int n = NUM2INT(rb_n);
50
+ if (n % 2 != 0) {
51
+ return Qnil;
52
+ }
53
+
54
+ size_t alloc_length = 2 * n * sizeof(float);
55
+ float __attribute__ ((aligned(32))) *input = valloc(alloc_length);
56
+ float __attribute__ ((aligned(32))) *output = valloc(alloc_length);
57
+
58
+ for (int i = 0; i < n; ++i) {
59
+ input[i] = (float)NUM2DBL(RARRAY_AREF(rb_frames, i));
60
+ }
61
+
62
+ ffts_execute(plan, input, output);
63
+
64
+ VALUE rb_output = rb_ary_new();
65
+ for (int i = 0; i < n; ++i) {
66
+ rb_ary_push(rb_output, DBL2NUM(output[i]));
67
+ }
68
+
69
+ free(input);
70
+ free(output);
71
+
72
+ return rb_output;
73
+ }
74
+
75
+ void
76
+ Init_ffts(void) {
77
+ mFFTS = rb_const_get(rb_cObject, rb_intern("FFTS"));
78
+ cPlan = rb_define_class_under(mFFTS, "Plan", rb_cObject);
79
+ cCPlan = rb_define_class_under(mFFTS, "CPlan", rb_cObject);
80
+
81
+ rb_define_method(cPlan, "initialize", ffts_plan_initialize, 2);
82
+ rb_define_method(cPlan, "execute", ffts_plan_execute, 0);
83
+
84
+ rb_define_attr(cPlan, "n", 1, 1);
85
+ rb_define_attr(cPlan, "frames", 1, 1);
86
+ rb_define_attr(cPlan, "sign", 1, 1);
87
+ rb_define_attr(cPlan, "plan", 1, 1);
88
+ }
@@ -0,0 +1,3 @@
1
+ module FFTS
2
+ VERSION = '0.0.1'
3
+ end
data/lib/ffts.rb ADDED
@@ -0,0 +1,5 @@
1
+ module FFTS
2
+ end
3
+
4
+ require 'ffts/ffts'
5
+ require 'ffts/version'
data.tar.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ I6�hSc��g�rJ��;�����
2
+ ^t:�8lN{L��̎���m���U��8���1��0��=�0jz��rH��as�{�*y.�\sXv��8.�q&�͡�p����e`��(�@� �����g�^>���c�� ��2���H�Z�lA����bS��]%l��@����\�h�`ws,qMhU���[G(�uӼ����ҶQ(#�LC\A:���x��l��2��-5���D5:�S%�΍�9�:s�X&��ş]����
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ffts
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Dan Rasband
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBBMRMwEQYDVQQDDApkYW5y
14
+ YXNiYW5kMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZFgNj
15
+ b20wHhcNMTUxMDI2MjEzNDA3WhcNMTYxMDI1MjEzNDA3WjBBMRMwEQYDVQQDDApk
16
+ YW5yYXNiYW5kMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZ
17
+ FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCWgl4NOeTSBFB0
18
+ yD1qyiADyWmGOZmDkeTYkbv+65+ns5nz20je9ee0R0y8BPtVe8oUS9wMzhdduXjh
19
+ 9wV3cCstBriqgAXqbv9twYYFdjc4FXUAVILtDeIZ47T9UwCAWyeZHaycSGn5PkIM
20
+ Ti4o33TfrSiEP66N+h/6B14RCyAtpf2zjvjZT/XsN6hR0toYinogH0KXBLJIRUdg
21
+ TQDQLrNtuMBzzzlP2d3HbqQhGaPn73Wf3mkz+ltVnUOdhK3Fv+xN8B/hOvosUfTN
22
+ m9Y9t97hBtsOE4zXXFd9A8hEHrHcOrgnOOjl8Kvoz0mKJGXq0rby/DGDz2ct+Elk
23
+ iiN+RTOJAgMBAAGjezB5MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
24
+ BBTdIBAg/2cHgQSFreX06uYBVAiGBjAfBgNVHREEGDAWgRRkYW5yYXNiYW5kQGdt
25
+ YWlsLmNvbTAfBgNVHRIEGDAWgRRkYW5yYXNiYW5kQGdtYWlsLmNvbTANBgkqhkiG
26
+ 9w0BAQUFAAOCAQEAB19wUzc7lO1sBUWNcnVXCtgB6/8ThHMFzhcbq1d4Cb6q4Quj
27
+ uUmfuwh8tmRX9TRMOn+oHnV88g849+nr/GhxF/2SdDykBYu2W5Yi+7tSuwxpuF7A
28
+ u6mFZ6eZb28uoMGwS76Yl1PSp0FIz9htECRL4+EvCXeoBnoCCNwBUiaN9JfqIn8p
29
+ doY1LTSooEKZ2zMTwfMIOifrJ9tlnfKTwPRgxOotxz9poQXQCiMBktyHcp0eoj+y
30
+ BiDRWkycv2ZreORGVsxZ+ch02vmRX9UqxIKp5++g/hJ5k+LJ4frajmbhgq5FNPFe
31
+ O1WpSI6ffxV1ZjyK6iS5qG0Rdze3zqFTKnPpeg==
32
+ -----END CERTIFICATE-----
33
+ date: 2015-10-26 00:00:00.000000000 Z
34
+ dependencies:
35
+ - !ruby/object:Gem::Dependency
36
+ name: rake-compiler
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: 0.9.0
42
+ type: :development
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: 0.9.0
49
+ - !ruby/object:Gem::Dependency
50
+ name: pry-byebug
51
+ requirement: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '3.2'
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '3.2'
63
+ description: A native extension for the FFTS library.
64
+ email: danrasband@gmail.com
65
+ executables: []
66
+ extensions:
67
+ - ext/ffts/extconf.rb
68
+ extra_rdoc_files: []
69
+ files:
70
+ - README.md
71
+ - ext/ffts/extconf.rb
72
+ - ext/ffts/ffts.c
73
+ - lib/ffts.rb
74
+ - lib/ffts/version.rb
75
+ homepage: https://github.com/danrasband/ruby-ffts
76
+ licenses:
77
+ - MIT
78
+ metadata: {}
79
+ post_install_message:
80
+ rdoc_options: []
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ requirements: []
94
+ rubyforge_project:
95
+ rubygems_version: 2.4.5.1
96
+ signing_key:
97
+ specification_version: 4
98
+ summary: FFTS
99
+ test_files: []
metadata.gz.sig ADDED
Binary file