utilrb 1.6.6 → 2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest.txt +10 -9
- data/README.rd +23 -0
- data/Rakefile +40 -37
- data/ext/utilrb/extconf.rb +36 -0
- data/ext/{proc.cc → utilrb/proc.c} +7 -6
- data/ext/utilrb/ruby_allocator.hh +76 -0
- data/ext/{ruby_internals-1.8.h → utilrb/ruby_internals-1.8.h} +0 -0
- data/ext/{ruby_internals-1.9.h → utilrb/ruby_internals-1.9.h} +0 -0
- data/ext/{swap.cc → utilrb/swap.cc} +0 -0
- data/ext/utilrb/utilrb.cc +79 -0
- data/ext/{value_set.cc → utilrb/value_set.cc} +5 -5
- data/ext/{weakref.cc → utilrb/weakref.cc} +0 -0
- data/lib/utilrb/common.rb +7 -2
- data/lib/utilrb/doc/rake.rb +46 -15
- data/lib/utilrb/kernel/load_dsl_file.rb +2 -2
- data/lib/utilrb/kernel/options.rb +6 -0
- data/lib/utilrb/logger/forward.rb +7 -0
- data/lib/utilrb/logger/hierarchy.rb +100 -42
- data/lib/utilrb/logger/indent.rb +38 -3
- data/lib/utilrb/logger/log_pp.rb +1 -1
- data/lib/utilrb/logger/root.rb +27 -12
- data/lib/utilrb/module/inherited_enumerable.rb +2 -196
- data/lib/utilrb/objectstats.rb +4 -1
- data/lib/utilrb/pkgconfig.rb +42 -6
- data/lib/utilrb/rake_common.rb +12 -0
- data/lib/utilrb/ruby_object_graph.rb +195 -46
- data/lib/utilrb/yard.rb +89 -89
- data/test/test_array.rb +1 -1
- data/test/test_dir.rb +1 -1
- data/test/test_enumerable.rb +7 -1
- data/test/test_event_loop.rb +407 -0
- data/test/test_exception.rb +1 -1
- data/test/test_gc.rb +1 -1
- data/test/test_hash.rb +57 -1
- data/test/test_kernel.rb +52 -21
- data/test/test_logger.rb +150 -1
- data/test/test_misc.rb +1 -1
- data/test/test_models.rb +212 -0
- data/test/test_module.rb +41 -71
- data/test/test_object.rb +1 -1
- data/test/test_objectstats.rb +1 -1
- data/test/test_pkgconfig.rb +7 -5
- data/test/test_proc.rb +1 -1
- data/test/test_set.rb +1 -1
- data/test/test_thread_pool.rb +409 -0
- data/test/test_time.rb +6 -6
- data/test/test_unbound_method.rb +1 -1
- metadata +157 -131
- data/README.txt +0 -45
- data/ext/extconf.rb +0 -29
- data/ext/utilrb_ext.cc +0 -144
data/Manifest.txt
CHANGED
@@ -2,18 +2,19 @@
|
|
2
2
|
History.txt
|
3
3
|
License.txt
|
4
4
|
Manifest.txt
|
5
|
-
README.
|
5
|
+
README.rd
|
6
6
|
Rakefile
|
7
7
|
bm/allocation.rb
|
8
8
|
bm/speed.rb
|
9
|
-
ext/extconf.rb
|
10
|
-
ext/proc.
|
11
|
-
ext/ruby_internals-1.8.h
|
12
|
-
ext/ruby_internals-1.9.h
|
13
|
-
ext/
|
14
|
-
ext/
|
15
|
-
ext/
|
16
|
-
ext/
|
9
|
+
ext/utilrb/extconf.rb
|
10
|
+
ext/utilrb/proc.c
|
11
|
+
ext/utilrb/ruby_internals-1.8.h
|
12
|
+
ext/utilrb/ruby_internals-1.9.h
|
13
|
+
ext/utilrb/ruby_allocator.hh
|
14
|
+
ext/utilrb/swap.cc
|
15
|
+
ext/utilrb/utilrb.cc
|
16
|
+
ext/utilrb/value_set.cc
|
17
|
+
ext/utilrb/weakref.cc
|
17
18
|
lib/utilrb.rb
|
18
19
|
lib/utilrb/array.rb
|
19
20
|
lib/utilrb/array/to_s.rb
|
data/README.rd
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
= Utilrb
|
2
|
+
|
3
|
+
homepage :: http://rock-robotics.org
|
4
|
+
mailing list :: http://www.dfki.de/mailman/cgi-bin/listinfo/rock-dev
|
5
|
+
bug tracker :: trac.rock-robotics.org
|
6
|
+
rubygem page :: http://rubygems.org/gems/utilrb
|
7
|
+
git repository :: http://gitorious.org/orocos-toolchain/utilrb.git
|
8
|
+
API documentation :: http://rubydoc.info/gems/utilrb/1.6.6/frames
|
9
|
+
|
10
|
+
== DESCRIPTION
|
11
|
+
|
12
|
+
Utilrb is yet another Ruby toolkit, in the spirit of facets. It includes all
|
13
|
+
the standard class extensions I use in other projects.
|
14
|
+
|
15
|
+
== LICENSE
|
16
|
+
|
17
|
+
Copyright (c) 2006-2013
|
18
|
+
Sylvain Joyeux <sylvain.joyeux@m4x.org>
|
19
|
+
DFKI <robotics@dfki.de>
|
20
|
+
LAAS/CNRS <openrobots@laas.fr>
|
21
|
+
|
22
|
+
This work is licensed under the BSD license. See License.txt for details
|
23
|
+
|
data/Rakefile
CHANGED
@@ -1,56 +1,59 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('lib', File.dirname(__FILE__))
|
1
2
|
require 'rake'
|
2
|
-
require './lib/utilrb/common'
|
3
|
-
require './lib/utilrb/rake_common'
|
4
|
-
require './lib/utilrb/doc/rake'
|
5
3
|
|
6
|
-
|
4
|
+
begin
|
5
|
+
require 'hoe'
|
6
|
+
|
7
|
+
Hoe::plugin :yard
|
8
|
+
|
7
9
|
hoe_spec = Hoe.spec 'utilrb' do
|
8
10
|
developer "Sylvain Joyeux", "sylvain.joyeux@m4x.org"
|
11
|
+
self.readme_file = 'README.rd'
|
12
|
+
|
9
13
|
extra_deps <<
|
10
14
|
['facets', '>= 2.4.0'] <<
|
11
|
-
['rake',
|
15
|
+
['rake', '>= 0.9'] <<
|
16
|
+
["rake-compiler", "~> 0.8.0"] <<
|
17
|
+
["hoe-yard", ">= 0.1.2"]
|
12
18
|
|
13
19
|
extra_dev_deps <<
|
14
|
-
['flexmock', '>= 0.8.6']
|
15
|
-
|
16
|
-
self.summary = 'Yet another Ruby toolkit'
|
17
|
-
self.description = paragraphs_of('README.txt', 3..5).join("\n\n")
|
18
|
-
end
|
19
|
-
hoe_spec.spec.extensions << 'ext/extconf.rb'
|
20
|
-
Rake.clear_tasks(/^default$/)
|
21
|
-
Rake.clear_tasks(/doc/)
|
22
|
-
end
|
20
|
+
['flexmock', '>= 0.8.6'] <<
|
21
|
+
['debugger-ruby_core_source', '>= 0']
|
23
22
|
|
24
|
-
|
23
|
+
licenses << 'BSD'
|
25
24
|
|
26
|
-
|
25
|
+
spec_extras[:extensions] = FileList["ext/**/extconf.rb"]
|
26
|
+
end
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
raise "cannot build the C extension"
|
33
|
-
end
|
28
|
+
require 'rubygems/package_task'
|
29
|
+
Gem::PackageTask.new(hoe_spec.spec) do |pkg|
|
30
|
+
pkg.need_zip = true
|
31
|
+
pkg.need_tar = true
|
34
32
|
end
|
35
|
-
FileUtils.ln_sf "../ext/utilrb_ext.so", "lib/utilrb_ext.so"
|
36
|
-
end
|
37
33
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
34
|
+
require 'rake/extensiontask'
|
35
|
+
utilrb_task = Rake::ExtensionTask.new('utilrb', hoe_spec.spec) do |ext|
|
36
|
+
ext.name = 'utilrb'
|
37
|
+
ext.ext_dir = 'ext/utilrb'
|
38
|
+
ext.lib_dir = 'lib/utilrb'
|
39
|
+
ext.config_options << "-DRUBINIUS"
|
40
|
+
ext.source_pattern ="*.{c,cc,cpp}"
|
45
41
|
end
|
46
|
-
|
47
|
-
|
42
|
+
|
43
|
+
Rake.clear_tasks(/^default$/)
|
44
|
+
task :default => :compile
|
45
|
+
|
46
|
+
task :docs => :yard
|
47
|
+
task :redocs => :yard
|
48
|
+
|
49
|
+
|
50
|
+
rescue LoadError => e
|
51
|
+
puts "'utilrb' cannot be build -- loading gem failed: #{e}"
|
48
52
|
end
|
49
53
|
|
50
54
|
task :full_test do
|
51
|
-
ENV
|
52
|
-
system(
|
55
|
+
ENV.delete_if { |name,val| name == "UTILRB_EXT_MODE" }
|
56
|
+
system('testrb -I. test')
|
53
57
|
ENV['UTILRB_EXT_MODE'] = 'yes'
|
54
|
-
system(
|
58
|
+
system('testrb -I. test')
|
55
59
|
end
|
56
|
-
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'mkmf'
|
2
|
+
|
3
|
+
CONFIG['LDSHARED'].gsub! '$(CC)', "$(CXX)"
|
4
|
+
if try_link("int main() { }", "-module")
|
5
|
+
$LDFLAGS += " -module"
|
6
|
+
end
|
7
|
+
|
8
|
+
if RUBY_VERSION >= "1.9"
|
9
|
+
$CFLAGS += " -DRUBY_IS_19"
|
10
|
+
begin
|
11
|
+
require 'debugger/ruby_core_source'
|
12
|
+
$CFLAGS += " -DHAS_RUBY_SOURCE"
|
13
|
+
hdrs = lambda { try_compile("#include <vm_core.h>") }
|
14
|
+
Debugger::RubyCoreSource.create_makefile_with_core(hdrs, "utilrb/utilrb")
|
15
|
+
rescue LoadError
|
16
|
+
puts "not building with core source"
|
17
|
+
create_makefile("utilrb/utilrb")
|
18
|
+
end
|
19
|
+
else
|
20
|
+
puts "not building with core source"
|
21
|
+
create_makefile("utilrb/utilrb")
|
22
|
+
end
|
23
|
+
|
24
|
+
## WORKAROUND a problem with mkmf.rb
|
25
|
+
# It seems that the newest version do define an 'install' target. However, that
|
26
|
+
# install target tries to install in the system directories
|
27
|
+
#
|
28
|
+
# The issue is that RubyGems *does* call make install. Ergo, gem install utilrb
|
29
|
+
# is broken right now
|
30
|
+
#lines = File.readlines("Makefile")
|
31
|
+
#lines.delete_if { |l| l =~ /^install:/ }
|
32
|
+
#lines << "install:"
|
33
|
+
#File.open("Makefile", 'w') do |io|
|
34
|
+
# io.write lines.join("\n")
|
35
|
+
#end
|
36
|
+
|
@@ -1,7 +1,5 @@
|
|
1
1
|
#ifdef HAS_RUBY_SOURCE
|
2
|
-
|
3
|
-
#include "/usr/include/ruby-1.9.1/ruby-1.9.3-p0/vm_core.h"
|
4
|
-
}
|
2
|
+
#include <vm_core.h>
|
5
3
|
|
6
4
|
static VALUE env_references(VALUE rbenv)
|
7
5
|
{
|
@@ -11,7 +9,8 @@ static VALUE env_references(VALUE rbenv)
|
|
11
9
|
GetEnvPtr(rbenv, env);
|
12
10
|
if (env->env)
|
13
11
|
{
|
14
|
-
|
12
|
+
int i;
|
13
|
+
for (i = 0; i < env->env_size; ++i)
|
15
14
|
rb_ary_push(result, rb_obj_id(env->env[i]));
|
16
15
|
}
|
17
16
|
return result;
|
@@ -26,11 +25,13 @@ static VALUE proc_references(VALUE rbproc)
|
|
26
25
|
return env_references(proc->envval);
|
27
26
|
return rb_ary_new();
|
28
27
|
}
|
28
|
+
#elif RUBY_IS_19
|
29
|
+
#warning "Ruby core sources cannot be found, Proc#references will not be available. Install the debugger-ruby_core_source gem to enable"
|
29
30
|
#else
|
30
|
-
#warning "
|
31
|
+
#warning "compiling on Ruby 1.8, Proc#references will not be available"
|
31
32
|
#endif
|
32
33
|
|
33
|
-
|
34
|
+
void Init_proc()
|
34
35
|
{
|
35
36
|
#ifdef HAS_RUBY_SOURCE
|
36
37
|
rb_define_method(rb_cProc, "references", RUBY_METHOD_FUNC(proc_references), 0);
|
@@ -0,0 +1,76 @@
|
|
1
|
+
#ifndef RUBY_ALLOCATOR_HH
|
2
|
+
#define RUBY_ALLOCATOR_HH
|
3
|
+
|
4
|
+
#include <ruby.h>
|
5
|
+
|
6
|
+
template <class T> class ruby_allocator
|
7
|
+
{
|
8
|
+
public:
|
9
|
+
typedef T value_type;
|
10
|
+
typedef value_type* pointer;
|
11
|
+
typedef const value_type* const_pointer;
|
12
|
+
typedef value_type& reference;
|
13
|
+
typedef const value_type& const_reference;
|
14
|
+
typedef std::size_t size_type;
|
15
|
+
typedef std::ptrdiff_t difference_type;
|
16
|
+
|
17
|
+
template <class U>
|
18
|
+
struct rebind { typedef ruby_allocator<U> other; };
|
19
|
+
|
20
|
+
ruby_allocator() {}
|
21
|
+
ruby_allocator(const ruby_allocator&) {}
|
22
|
+
template <class U>
|
23
|
+
ruby_allocator(const ruby_allocator<U>&) {}
|
24
|
+
~ruby_allocator() {}
|
25
|
+
|
26
|
+
pointer address(reference x) const { return &x; }
|
27
|
+
const_pointer address(const_reference x) const {
|
28
|
+
return x;
|
29
|
+
}
|
30
|
+
|
31
|
+
pointer allocate(size_type n, const_pointer = 0) {
|
32
|
+
void* p = ruby_xmalloc(n * sizeof(T));
|
33
|
+
if (!p)
|
34
|
+
throw std::bad_alloc();
|
35
|
+
return static_cast<pointer>(p);
|
36
|
+
}
|
37
|
+
|
38
|
+
void deallocate(pointer p, size_type) { ruby_xfree(p); }
|
39
|
+
|
40
|
+
size_type max_size() const {
|
41
|
+
return static_cast<size_type>(-1) / sizeof(T);
|
42
|
+
}
|
43
|
+
|
44
|
+
void construct(pointer p, const value_type& x) {
|
45
|
+
new(p) value_type(x);
|
46
|
+
}
|
47
|
+
void destroy(pointer p) { p->~value_type(); }
|
48
|
+
|
49
|
+
private:
|
50
|
+
void operator=(const ruby_allocator&);
|
51
|
+
};
|
52
|
+
|
53
|
+
template<> class ruby_allocator<void>
|
54
|
+
{
|
55
|
+
typedef void value_type;
|
56
|
+
typedef void* pointer;
|
57
|
+
typedef const void* const_pointer;
|
58
|
+
|
59
|
+
template <class U>
|
60
|
+
struct rebind { typedef ruby_allocator<U> other; };
|
61
|
+
};
|
62
|
+
|
63
|
+
|
64
|
+
template <class T>
|
65
|
+
inline bool operator==(const ruby_allocator<T>&,
|
66
|
+
const ruby_allocator<T>&) {
|
67
|
+
return true;
|
68
|
+
}
|
69
|
+
|
70
|
+
template <class T>
|
71
|
+
inline bool operator!=(const ruby_allocator<T>&,
|
72
|
+
const ruby_allocator<T>&) {
|
73
|
+
return false;
|
74
|
+
}
|
75
|
+
|
76
|
+
#endif
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,79 @@
|
|
1
|
+
#include <ruby.h>
|
2
|
+
#include <set>
|
3
|
+
|
4
|
+
static VALUE mUtilrb;
|
5
|
+
|
6
|
+
using namespace std;
|
7
|
+
|
8
|
+
#ifndef RUBINIUS
|
9
|
+
static VALUE enumerable_each_uniq_i(VALUE i, VALUE* memo)
|
10
|
+
{
|
11
|
+
set<VALUE>& seen = *reinterpret_cast< set<VALUE>* >(memo);
|
12
|
+
if (seen.find(i) == seen.end())
|
13
|
+
{
|
14
|
+
seen.insert(i);
|
15
|
+
return rb_yield(i);
|
16
|
+
}
|
17
|
+
else
|
18
|
+
return Qnil;
|
19
|
+
|
20
|
+
}
|
21
|
+
|
22
|
+
/* :nodoc: */
|
23
|
+
static VALUE enumerable_each_uniq(VALUE self)
|
24
|
+
{
|
25
|
+
set<VALUE> seen;
|
26
|
+
rb_iterate(rb_each, self,
|
27
|
+
RUBY_METHOD_FUNC(enumerable_each_uniq_i), (VALUE)&seen);
|
28
|
+
return self;
|
29
|
+
}
|
30
|
+
|
31
|
+
/* call-seq:
|
32
|
+
* Kernel.is_singleton?(object)
|
33
|
+
*
|
34
|
+
* Returns true if +self+ is a singleton class
|
35
|
+
*/
|
36
|
+
static VALUE kernel_is_singleton_p(VALUE self)
|
37
|
+
{
|
38
|
+
if (BUILTIN_TYPE(self) == T_CLASS && FL_TEST(self, FL_SINGLETON))
|
39
|
+
return Qtrue;
|
40
|
+
else
|
41
|
+
return Qfalse;
|
42
|
+
}
|
43
|
+
|
44
|
+
static VALUE kernel_is_immediate(VALUE klass, VALUE object)
|
45
|
+
{ return IMMEDIATE_P(object) ? Qtrue : Qfalse; }
|
46
|
+
#endif
|
47
|
+
|
48
|
+
static VALUE kernel_crash(VALUE klass)
|
49
|
+
{
|
50
|
+
*((int*)0) = 10;
|
51
|
+
// Return something to shut gcc up
|
52
|
+
return Qfalse;
|
53
|
+
}
|
54
|
+
|
55
|
+
extern "C" void Init_value_set();
|
56
|
+
extern "C" void Init_swap();
|
57
|
+
extern "C" void Init_weakref(VALUE mUtilrb);
|
58
|
+
extern "C" void Init_proc();
|
59
|
+
|
60
|
+
extern "C" void Init_utilrb()
|
61
|
+
{
|
62
|
+
mUtilrb = rb_define_module("Utilrb");
|
63
|
+
|
64
|
+
#ifndef RUBINIUS
|
65
|
+
rb_define_method(rb_mEnumerable, "each_uniq", RUBY_METHOD_FUNC(enumerable_each_uniq), 0);
|
66
|
+
rb_define_method(rb_mKernel, "is_singleton?", RUBY_METHOD_FUNC(kernel_is_singleton_p), 0);
|
67
|
+
|
68
|
+
rb_define_singleton_method(rb_mKernel, "crash!", RUBY_METHOD_FUNC(kernel_crash), 0);
|
69
|
+
rb_define_singleton_method(rb_mKernel, "immediate?", RUBY_METHOD_FUNC(kernel_is_immediate), 1);
|
70
|
+
|
71
|
+
Init_swap();
|
72
|
+
Init_weakref(mUtilrb);
|
73
|
+
#endif
|
74
|
+
|
75
|
+
Init_proc();
|
76
|
+
|
77
|
+
Init_value_set();
|
78
|
+
}
|
79
|
+
|
@@ -1,13 +1,14 @@
|
|
1
1
|
#include <ruby.h>
|
2
2
|
#include <set>
|
3
3
|
#include <algorithm>
|
4
|
+
#include "ruby_allocator.hh"
|
4
5
|
|
5
6
|
using namespace std;
|
6
7
|
|
7
8
|
static VALUE cValueSet;
|
8
9
|
static ID id_new;
|
9
10
|
|
10
|
-
typedef std::set<VALUE> ValueSet;
|
11
|
+
typedef std::set<VALUE, std::less<VALUE>, ruby_allocator<VALUE> > ValueSet;
|
11
12
|
static ValueSet& get_wrapped_set(VALUE self)
|
12
13
|
{
|
13
14
|
ValueSet* object = 0;
|
@@ -252,7 +253,8 @@ static VALUE value_set_difference_bang(VALUE vself, VALUE vother)
|
|
252
253
|
ValueSet result;
|
253
254
|
std::set_difference(self.begin(), self.end(), other.begin(), other.end(),
|
254
255
|
std::inserter(result, result.end()));
|
255
|
-
self.
|
256
|
+
if (result.size() != self.size())
|
257
|
+
self.swap(result);
|
256
258
|
return vself;
|
257
259
|
}
|
258
260
|
|
@@ -335,9 +337,7 @@ static VALUE value_set_clear(VALUE self)
|
|
335
337
|
*/
|
336
338
|
static VALUE value_set_initialize_copy(VALUE vself, VALUE vother)
|
337
339
|
{
|
338
|
-
|
339
|
-
set<VALUE> new_set(other.begin(), other.end());
|
340
|
-
get_wrapped_set(vself).swap(new_set);
|
340
|
+
get_wrapped_set(vself) = get_wrapped_set(vother);
|
341
341
|
return vself;
|
342
342
|
}
|
343
343
|
|
File without changes
|
data/lib/utilrb/common.rb
CHANGED
@@ -1,17 +1,22 @@
|
|
1
|
+
|
2
|
+
# Utilrb is yet another Ruby toolkit, in the spirit of facets. It includes all
|
3
|
+
# the standard class extensions used by www.rock-robotics.org projects.
|
1
4
|
module Utilrb
|
2
5
|
unless defined? Utilrb::VERSION
|
3
|
-
VERSION = "
|
6
|
+
VERSION = "2.0"
|
4
7
|
RUBY_IS_19 = (RUBY_VERSION >= "1.9.2")
|
5
8
|
RUBY_IS_191 = (RUBY_VERSION >= "1.9") && (RUBY_VERSION < "1.9.2")
|
6
9
|
end
|
7
10
|
|
11
|
+
LIB_DIR = File.expand_path(File.dirname(__FILE__))
|
12
|
+
|
8
13
|
unless defined? UTILRB_EXT_MODE
|
9
14
|
if ENV['UTILRB_EXT_MODE'] == 'no'
|
10
15
|
UTILRB_EXT_MODE = nil
|
11
16
|
STDERR.puts "Utilrb: not loading the C extension"
|
12
17
|
else
|
13
18
|
begin
|
14
|
-
require '
|
19
|
+
require 'utilrb/utilrb'
|
15
20
|
UTILRB_EXT_MODE = true
|
16
21
|
STDERR.puts "Utilrb: loaded C extension" if ENV['UTILRB_EXT_MODE']
|
17
22
|
rescue LoadError => e
|