o-concurrent-ruby-ext 1.1.11
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 +7 -0
- data/CHANGELOG.md +542 -0
- data/LICENSE.txt +21 -0
- data/README.md +404 -0
- data/ext/concurrent-ruby-ext/atomic_boolean.c +46 -0
- data/ext/concurrent-ruby-ext/atomic_boolean.h +16 -0
- data/ext/concurrent-ruby-ext/atomic_fixnum.c +72 -0
- data/ext/concurrent-ruby-ext/atomic_fixnum.h +14 -0
- data/ext/concurrent-ruby-ext/atomic_reference.c +113 -0
- data/ext/concurrent-ruby-ext/atomic_reference.h +20 -0
- data/ext/concurrent-ruby-ext/extconf.rb +22 -0
- data/ext/concurrent-ruby-ext/rb_concurrent.c +58 -0
- metadata +74 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
#ifndef __ATOMIC_REFERENCE_H__
|
2
|
+
#define __ATOMIC_REFERENCE_H__
|
3
|
+
|
4
|
+
#if defined(__sun)
|
5
|
+
#include <atomic.h>
|
6
|
+
#endif
|
7
|
+
|
8
|
+
#ifdef HAVE_LIBKERN_OSATOMIC_H
|
9
|
+
#include <libkern/OSAtomic.h>
|
10
|
+
#endif
|
11
|
+
|
12
|
+
void ir_mark(void*);
|
13
|
+
VALUE ir_alloc(VALUE);
|
14
|
+
VALUE ir_initialize(int, VALUE*, VALUE);
|
15
|
+
VALUE ir_get(VALUE);
|
16
|
+
VALUE ir_set(VALUE, VALUE);
|
17
|
+
VALUE ir_get_and_set(VALUE, VALUE);
|
18
|
+
VALUE ir_compare_and_set(volatile VALUE, VALUE, VALUE);
|
19
|
+
|
20
|
+
#endif
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
extension_name = 'concurrent_ruby_ext'
|
4
|
+
|
5
|
+
require 'mkmf'
|
6
|
+
dir_config(extension_name)
|
7
|
+
have_header "libkern/OSAtomic.h"
|
8
|
+
|
9
|
+
compiler_is_gcc = (CONFIG["GCC"] && !CONFIG["GCC"].empty?) ||
|
10
|
+
# This could stand to be more generic... but I am afraid.
|
11
|
+
CONFIG["CC"] =~ /\bgcc\b/
|
12
|
+
|
13
|
+
if compiler_is_gcc
|
14
|
+
case CONFIG["arch"]
|
15
|
+
when /mswin32|mingw|solaris/
|
16
|
+
$CFLAGS += " -march=native"
|
17
|
+
when 'i686-linux'
|
18
|
+
$CFLAGS += " -march=i686"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
create_makefile File.join('concurrent', extension_name)
|
@@ -0,0 +1,58 @@
|
|
1
|
+
#include <ruby.h>
|
2
|
+
|
3
|
+
#include "atomic_reference.h"
|
4
|
+
#include "atomic_boolean.h"
|
5
|
+
#include "atomic_fixnum.h"
|
6
|
+
|
7
|
+
// module and class definitions
|
8
|
+
|
9
|
+
static VALUE rb_mConcurrent;
|
10
|
+
static VALUE rb_cAtomicReference;
|
11
|
+
static VALUE rb_cAtomicBoolean;
|
12
|
+
static VALUE rb_cAtomicFixnum;
|
13
|
+
|
14
|
+
// Init_extension
|
15
|
+
|
16
|
+
void Init_concurrent_ruby_ext() {
|
17
|
+
|
18
|
+
// define modules and classes
|
19
|
+
rb_mConcurrent = rb_define_module("Concurrent");
|
20
|
+
rb_cAtomicReference = rb_define_class_under(rb_mConcurrent, "CAtomicReference", rb_cObject);
|
21
|
+
rb_cAtomicBoolean = rb_define_class_under(rb_mConcurrent, "CAtomicBoolean", rb_cObject);
|
22
|
+
rb_cAtomicFixnum = rb_define_class_under(rb_mConcurrent, "CAtomicFixnum", rb_cObject);
|
23
|
+
|
24
|
+
// CAtomicReference
|
25
|
+
rb_define_alloc_func(rb_cAtomicReference, ir_alloc);
|
26
|
+
rb_define_method(rb_cAtomicReference, "initialize", ir_initialize, -1);
|
27
|
+
rb_define_method(rb_cAtomicReference, "get", ir_get, 0);
|
28
|
+
rb_define_method(rb_cAtomicReference, "set", ir_set, 1);
|
29
|
+
rb_define_method(rb_cAtomicReference, "get_and_set", ir_get_and_set, 1);
|
30
|
+
rb_define_method(rb_cAtomicReference, "_compare_and_set", ir_compare_and_set, 2);
|
31
|
+
rb_define_alias(rb_cAtomicReference, "value", "get");
|
32
|
+
rb_define_alias(rb_cAtomicReference, "value=", "set");
|
33
|
+
rb_define_alias(rb_cAtomicReference, "swap", "get_and_set");
|
34
|
+
|
35
|
+
// CAtomicBoolean
|
36
|
+
rb_define_alloc_func(rb_cAtomicBoolean, atomic_boolean_allocate);
|
37
|
+
rb_define_method(rb_cAtomicBoolean, "initialize", method_atomic_boolean_initialize, -1);
|
38
|
+
rb_define_method(rb_cAtomicBoolean, "value", method_atomic_boolean_value, 0);
|
39
|
+
rb_define_method(rb_cAtomicBoolean, "value=", method_atomic_boolean_value_set, 1);
|
40
|
+
rb_define_method(rb_cAtomicBoolean, "true?", method_atomic_boolean_true_question, 0);
|
41
|
+
rb_define_method(rb_cAtomicBoolean, "false?", method_atomic_boolean_false_question, 0);
|
42
|
+
rb_define_method(rb_cAtomicBoolean, "make_true", method_atomic_boolean_make_true, 0);
|
43
|
+
rb_define_method(rb_cAtomicBoolean, "make_false", method_atomic_boolean_make_false, 0);
|
44
|
+
|
45
|
+
// CAtomicFixnum
|
46
|
+
rb_define_const(rb_cAtomicFixnum, "MIN_VALUE", LL2NUM(LLONG_MIN));
|
47
|
+
rb_define_const(rb_cAtomicFixnum, "MAX_VALUE", LL2NUM(LLONG_MAX));
|
48
|
+
rb_define_alloc_func(rb_cAtomicFixnum, atomic_fixnum_allocate);
|
49
|
+
rb_define_method(rb_cAtomicFixnum, "initialize", method_atomic_fixnum_initialize, -1);
|
50
|
+
rb_define_method(rb_cAtomicFixnum, "value", method_atomic_fixnum_value, 0);
|
51
|
+
rb_define_method(rb_cAtomicFixnum, "value=", method_atomic_fixnum_value_set, 1);
|
52
|
+
rb_define_method(rb_cAtomicFixnum, "increment", method_atomic_fixnum_increment, -1);
|
53
|
+
rb_define_method(rb_cAtomicFixnum, "decrement", method_atomic_fixnum_decrement, -1);
|
54
|
+
rb_define_method(rb_cAtomicFixnum, "compare_and_set", method_atomic_fixnum_compare_and_set, 2);
|
55
|
+
rb_define_method(rb_cAtomicFixnum, "update", method_atomic_fixnum_update, 0);
|
56
|
+
rb_define_alias(rb_cAtomicFixnum, "up", "increment");
|
57
|
+
rb_define_alias(rb_cAtomicFixnum, "down", "decrement");
|
58
|
+
}
|
metadata
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: o-concurrent-ruby-ext
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.11
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jerry D'Antonio
|
8
|
+
- The Ruby Concurrency Team
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2022-08-28 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: concurrent-ruby
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - '='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 1.1.11
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - '='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 1.1.11
|
28
|
+
description: |2
|
29
|
+
C extensions to optimize the concurrent-ruby gem when running under MRI.
|
30
|
+
Please see http://concurrent-ruby.com for more information.
|
31
|
+
email: concurrent-ruby@googlegroups.com
|
32
|
+
executables: []
|
33
|
+
extensions:
|
34
|
+
- ext/concurrent-ruby-ext/extconf.rb
|
35
|
+
extra_rdoc_files:
|
36
|
+
- README.md
|
37
|
+
- LICENSE.txt
|
38
|
+
- CHANGELOG.md
|
39
|
+
files:
|
40
|
+
- CHANGELOG.md
|
41
|
+
- LICENSE.txt
|
42
|
+
- README.md
|
43
|
+
- ext/concurrent-ruby-ext/atomic_boolean.c
|
44
|
+
- ext/concurrent-ruby-ext/atomic_boolean.h
|
45
|
+
- ext/concurrent-ruby-ext/atomic_fixnum.c
|
46
|
+
- ext/concurrent-ruby-ext/atomic_fixnum.h
|
47
|
+
- ext/concurrent-ruby-ext/atomic_reference.c
|
48
|
+
- ext/concurrent-ruby-ext/atomic_reference.h
|
49
|
+
- ext/concurrent-ruby-ext/extconf.rb
|
50
|
+
- ext/concurrent-ruby-ext/rb_concurrent.c
|
51
|
+
homepage: http://www.concurrent-ruby.com
|
52
|
+
licenses:
|
53
|
+
- MIT
|
54
|
+
metadata: {}
|
55
|
+
post_install_message:
|
56
|
+
rdoc_options: []
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '2.2'
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
requirements: []
|
70
|
+
rubygems_version: 3.3.15
|
71
|
+
signing_key:
|
72
|
+
specification_version: 4
|
73
|
+
summary: C extensions to optimize concurrent-ruby under MRI.
|
74
|
+
test_files: []
|