balanced_ternary_integer 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 89fc746a8c8f70b887b76558ccb40303dbf0726c806524b3419c52429f4a6f62
4
- data.tar.gz: 2ba8bef0b752cac8e05c4ad4d644978feb98c6f0291ad2877cb0c735c8bbaa5a
3
+ metadata.gz: d2bbe5fbcb23d5d4abf13b8a09caee8872dfee3ad60da15b01034b6faed8a96c
4
+ data.tar.gz: a3435a829155844b16d210d910b7e67344ce37ab5b2a6360736595efa4f1605d
5
5
  SHA512:
6
- metadata.gz: 241674df581118d7ff24a4ac29bbb9a77ae5daa15c08c77e0203a104825bb07064b718345ceaf9e43702c741b498944a4cec0887d9733e2e2b7a93215ffbe775
7
- data.tar.gz: d987b8e3c144ced047e21e768bede2dede04730e9f39243362c5f1a4391d1bfdb29670654ec2cad0873d7abb5d766ceaf04cbda6ff7b69bffb8ca4c7b190895a
6
+ metadata.gz: fecd7b75c16afb2d808498e016664f1ff8c569316c6d7e69aa52766dac5cde8940da3dee0e288f695bd02f977cae8aa661f781af7e162ddd935a6dfb738238ff
7
+ data.tar.gz: fac248f8af6dfdccd1c5f84db77f5d7dbc0c53c1a4e8bba602158c63549dc7cd0af58e35c339515fa900289d5be2944808154e4f362aa4fd3c94b9c31f0f8b74
@@ -1,2 +1,8 @@
1
1
  ### 0.1.0 - 2020-04-20
2
- - Implemented BalancedTernaryInteger.from_int and BalancedTernaryInteger.to_int
2
+ - Implemented BalancedTernaryInteger.from_int and BalancedTernaryInteger.to_int
3
+
4
+ ### 0.2.0 - 2020-05-07
5
+ - Translated BalancedTernaryInteger.to_int to C
6
+
7
+ ### 0.2.1 - 2020-05-07
8
+ - Fix gemspec for native extension
data/Rakefile CHANGED
@@ -1,6 +1,11 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
+ require "rake/extensiontask"
3
4
 
4
5
  RSpec::Core::RakeTask.new(:spec)
5
6
 
6
- task :default => :spec
7
+ task :build => :compile
8
+
9
+ Rake::ExtensionTask.new("balanced_ternary_integer") do |ext|
10
+ ext.lib_dir = "lib/balanced_ternary_integer" # .co - file
11
+ end
@@ -26,10 +26,12 @@ Gem::Specification.new do |spec|
26
26
  spec.bindir = "exe"
27
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
28
  spec.require_paths = ["lib"]
29
+ spec.extensions = %w[ext/balanced_ternary_integer/extconf.rb]
29
30
 
30
31
  spec.add_development_dependency "bundler", "~> 1.17"
31
32
  spec.add_development_dependency "rake", ">= 12.3.3"
32
33
  spec.add_development_dependency "rspec", "~> 3.0"
34
+ spec.add_development_dependency "rake-compiler", "~> 1.1"
33
35
 
34
36
  spec.required_ruby_version = '>= 2.4.0'
35
37
  end
@@ -0,0 +1,8 @@
1
+ #include "balanced_ternary_integer.h"
2
+
3
+ VALUE mBalancedTernaryInteger;
4
+
5
+ void Init_balanced_ternary_integer(void) {
6
+ mBalancedTernaryInteger = rb_define_module("BalancedTernaryInteger");
7
+ Init_to_int(mBalancedTernaryInteger);
8
+ }
@@ -0,0 +1,3 @@
1
+ #include "ruby.h"
2
+
3
+ extern void Init_to_int(VALUE mBalancedTernaryInteger);
@@ -0,0 +1,4 @@
1
+ require 'mkmf'
2
+
3
+ dir_config('balanced_ternary_integer')
4
+ create_makefile('balanced_ternary_integer/balanced_ternary_integer')
@@ -0,0 +1,35 @@
1
+ #include "balanced_ternary_integer.h"
2
+
3
+ short char_to_num(char digit) {
4
+ switch(digit) {
5
+ case 'T':
6
+ return -1;
7
+ case '0':
8
+ return 0;
9
+ case '1':
10
+ return 1;
11
+ default:
12
+ rb_raise(rb_eArgError, "String must contain only 0, 1, T symbols");
13
+ }
14
+ }
15
+
16
+ VALUE rb_balanced_ternary_integer_to_int(VALUE self, VALUE rb_string) {
17
+ Check_Type(rb_string, T_STRING); // raise TypeError (wrong argument type Integer (expected String))
18
+
19
+ char *chars = RSTRING_PTR(rb_string);
20
+ long len = RSTRING_LEN(rb_string);
21
+ VALUE exp = INT2FIX(1);
22
+ VALUE result = INT2FIX(0);
23
+ short digit;
24
+
25
+ for (int i = len - 1; i >= 0; i--) {
26
+ digit = INT2NUM(char_to_num(chars[i]));
27
+ result = rb_funcall(result, '+', 1, rb_funcall(digit, '*', 1, exp)); // result += digit * exp
28
+ exp = rb_funcall(exp, '*', 1, INT2FIX(3)); // множитель (1, 3, 9 и тд)
29
+ }
30
+ return result;
31
+ }
32
+
33
+ void Init_to_int(VALUE mBalancedTernaryInteger) {
34
+ rb_define_singleton_method(mBalancedTernaryInteger, "to_int", rb_balanced_ternary_integer_to_int, 1);
35
+ }
@@ -1,4 +1,5 @@
1
1
  require 'balanced_ternary_integer/version'
2
+ require 'balanced_ternary_integer/balanced_ternary_integer' # .co file
2
3
 
3
4
  module BalancedTernaryInteger
4
5
  class << self
@@ -13,15 +14,5 @@ module BalancedTernaryInteger
13
14
  end until number.zero?
14
15
  digits
15
16
  end
16
-
17
- def to_int(string)
18
- raise ArgumentError, "String expected, got #{string.class}" unless string.instance_of?(String)
19
- raise ArgumentError, 'String must contain only 0, 1, T symbols' unless string.match?(/\A[01T]*\z/)
20
-
21
- string.chars.reverse.map.with_index.sum do |char, index|
22
- num = char == 'T' ? -1 : char.to_i
23
- num * 3**index
24
- end
25
- end
26
17
  end
27
18
  end
@@ -1,3 +1,3 @@
1
1
  module BalancedTernaryInteger
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: balanced_ternary_integer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vasiliy Petrov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-20 00:00:00.000000000 Z
11
+ date: 2020-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,11 +52,26 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake-compiler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.1'
55
69
  description: Conversion integers from/to balanced ternary and decimal numeral system.
56
70
  email:
57
71
  - saugardas@yandex.ru
58
72
  executables: []
59
- extensions: []
73
+ extensions:
74
+ - ext/balanced_ternary_integer/extconf.rb
60
75
  extra_rdoc_files: []
61
76
  files:
62
77
  - ".gitignore"
@@ -69,6 +84,10 @@ files:
69
84
  - balanced_ternary_integer.gemspec
70
85
  - bin/console
71
86
  - bin/setup
87
+ - ext/balanced_ternary_integer/balanced_ternary_integer.c
88
+ - ext/balanced_ternary_integer/balanced_ternary_integer.h
89
+ - ext/balanced_ternary_integer/extconf.rb
90
+ - ext/balanced_ternary_integer/to_int.c
72
91
  - lib/balanced_ternary_integer.rb
73
92
  - lib/balanced_ternary_integer/version.rb
74
93
  homepage: https://github.com/Saugardas/balanced_ternary_integer
@@ -91,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
110
  - !ruby/object:Gem::Version
92
111
  version: '0'
93
112
  requirements: []
94
- rubygems_version: 3.0.3
113
+ rubygems_version: 3.1.2
95
114
  signing_key:
96
115
  specification_version: 4
97
116
  summary: Conversion integers from/to balanced ternary and decimal numeral system.