utilrb 1.6.6 → 2.0
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.
- 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
         
     |