xot 0.1.3 → 0.1.4

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/include/xot/string.h CHANGED
@@ -25,4 +25,19 @@ namespace Xot
25
25
  }// Xot
26
26
 
27
27
 
28
+ #define XOT_STRINGF(format, result) \
29
+ Xot::String result; \
30
+ do \
31
+ { \
32
+ if (format) \
33
+ { \
34
+ va_list args; \
35
+ va_start(args, format); \
36
+ result = Xot::stringf(format, args); \
37
+ va_end(args); \
38
+ } \
39
+ } \
40
+ while (false)
41
+
42
+
28
43
  #endif//EOH
@@ -0,0 +1,26 @@
1
+ // -*- c++ -*-
2
+ #pragma once
3
+ #ifndef __XOT_UTIL_H__
4
+ #define __XOT_UTIL_H__
5
+
6
+
7
+ namespace Xot
8
+ {
9
+
10
+
11
+ int bit2byte (int bits);
12
+
13
+ int byte2bit (int bytes);
14
+
15
+
16
+ template <typename T>
17
+ inline T clip (T minval, T maxval, T value)
18
+ {
19
+ return value > maxval ? maxval : (value < minval ? minval : value);
20
+ }
21
+
22
+
23
+ }// Xot
24
+
25
+
26
+ #endif//EOH
data/lib/xot.rb ADDED
@@ -0,0 +1,7 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ require 'xot/module'
5
+ require 'xot/hookable'
6
+ require 'xot/setter'
7
+ require 'xot/blockutil'
@@ -0,0 +1,26 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ module Xot
5
+
6
+
7
+ module BlockUtil
8
+
9
+ extend module ClassMethods
10
+
11
+ def instance_eval_or_block_call (recv, *args, &block)
12
+ if block.arity == 0
13
+ recv.instance_eval &block
14
+ else
15
+ block.call recv, *args
16
+ end
17
+ end
18
+
19
+ self
20
+
21
+ end# ClassMethods
22
+
23
+ end# BlockUtil
24
+
25
+
26
+ end# Xot
@@ -0,0 +1,38 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ module Xot
5
+
6
+
7
+ module Hookable
8
+
9
+ def hook (name, &block)
10
+ c = class << self; self; end
11
+ c.__send__ :define_method, name, &block
12
+ self
13
+ end
14
+
15
+ def on (name, &block)
16
+ hook name do |*a, &b|
17
+ block.call *a, &b
18
+ end
19
+ end
20
+
21
+ def before (name, &block)
22
+ hook name do |*a, &b|
23
+ super *a, &b unless block.call(*a, &b) == :skip
24
+ end
25
+ end
26
+
27
+ def after (name, &block)
28
+ hook name do |*a, &b|
29
+ ret = super *a, &b
30
+ block.call *a, &b
31
+ ret
32
+ end
33
+ end
34
+
35
+ end# Hookable
36
+
37
+
38
+ end# Xot
data/lib/xot/module.rb CHANGED
@@ -22,8 +22,15 @@ module Xot
22
22
  File.join root_dir, 'task'
23
23
  end
24
24
 
25
- def load_tasks ()
26
- Dir["#{task_dir}/**/*.rake"].each {|path| load path}
25
+ def load_tasks (*names)
26
+ if names.empty?
27
+ Dir["#{task_dir}/**/*.rake"].each {|path| load path}
28
+ else
29
+ names.each do |name|
30
+ path = "#{task_dir}/#{name}.rake"
31
+ load path if File.exist? path
32
+ end
33
+ end
27
34
  end
28
35
 
29
36
  def version ()
data/lib/xot/rake.rb ADDED
@@ -0,0 +1,5 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ require 'xot/rake/task'
5
+ require 'xot/rake/helpers'
@@ -51,17 +51,42 @@ module Xot
51
51
  end
52
52
 
53
53
  def env (name, defval = nil)
54
- Object.const_get(name) rescue ENV[name.to_s] || defval
54
+ case val = (ENV[name.to_s] || Object.const_get(name) rescue defval)
55
+ when /^\d+$/ then val.to_i
56
+ when 'true' then true
57
+ when 'false' then false
58
+ else val
59
+ end
60
+ end
61
+
62
+ def header (mod)
63
+ puts "-- #{mod.to_s.capitalize} " + "-" * 50
55
64
  end
56
65
 
57
66
  def win32? ()
58
67
  RUBY_PLATFORM =~ /mswin|ming|cygwin/
59
68
  end
60
69
 
70
+ def mswin? ()
71
+ RUBY_PLATFORM =~ /mswin/
72
+ end
73
+
74
+ def ming? ()
75
+ RUBY_PLATFORM =~ /ming/
76
+ end
77
+
78
+ def cygwin? ()
79
+ RUBY_PLATFORM =~ /cygwin/
80
+ end
81
+
61
82
  def cocoa? ()
62
83
  RUBY_PLATFORM =~ /darwin/
63
84
  end
64
85
 
86
+ def clang? ()
87
+ RbConfig::CONFIG['CXX'] =~ /clang/
88
+ end
89
+
65
90
 
66
91
  end# Rake
67
92
 
@@ -0,0 +1,20 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ module Xot
5
+
6
+
7
+ module Rake
8
+
9
+
10
+ def empty_task (*names)
11
+ names.each do |name|
12
+ task name => '.'
13
+ end
14
+ end
15
+
16
+
17
+ end# Rake
18
+
19
+
20
+ end#Xot
data/lib/xot/setter.rb ADDED
@@ -0,0 +1,29 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ module Xot
5
+
6
+
7
+ module Setter
8
+
9
+ def set (*args)
10
+ return if args.empty?
11
+
12
+ first = args.shift
13
+ if first.class == Hash
14
+ first.each {|name, value| set_value__ name, value}
15
+ else
16
+ set_value__ first, *args
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def set_value__ (name, *value)
23
+ __send__ name.to_s + '=', *value
24
+ end
25
+
26
+ end# Setter
27
+
28
+
29
+ end# Xot
data/src/debug.cpp ADDED
@@ -0,0 +1,36 @@
1
+ #include "xot/debug.h"
2
+
3
+
4
+ #include <stdio.h>
5
+ #include <stdarg.h>
6
+ #include <xot/string.h>
7
+
8
+
9
+ namespace Xot
10
+ {
11
+
12
+
13
+ #ifdef _DEBUG
14
+
15
+ void
16
+ dout (const char* format, ...)
17
+ {
18
+ va_list args;
19
+ va_start(args, format);
20
+ printf("%s", stringf(format, args).c_str());
21
+ va_end(args);
22
+ }
23
+
24
+ void
25
+ doutln (const char* format, ...)
26
+ {
27
+ va_list args;
28
+ va_start(args, format);
29
+ printf("%s\n", stringf(format, args).c_str());
30
+ va_end(args);
31
+ }
32
+
33
+ #endif
34
+
35
+
36
+ }// Xot
data/src/defs.cpp ADDED
@@ -0,0 +1,6 @@
1
+ #include "xot/defs.h"
2
+
3
+
4
+ // compile to check
5
+ #include <xot/pimpl.h>
6
+ #include <xot/ref.h>
data/src/util.cpp ADDED
@@ -0,0 +1,22 @@
1
+ #include "xot/util.h"
2
+
3
+
4
+ namespace Xot
5
+ {
6
+
7
+
8
+ int
9
+ bit2byte (int bits)
10
+ {
11
+ if ((bits % 8) != 0) return -1;
12
+ return bits / 8;
13
+ }
14
+
15
+ int
16
+ byte2bit (int bytes)
17
+ {
18
+ return bytes * 8;
19
+ }
20
+
21
+
22
+ }// Xot
data/task/ext.rake ADDED
@@ -0,0 +1,90 @@
1
+ # -*- mode: ruby; coding: utf-8 -*-
2
+
3
+
4
+ require 'rbconfig'
5
+
6
+
7
+ task :ext => 'ext:build'
8
+
9
+ %w[clean].each do |t|
10
+ task t.intern => "ext:#{t}"
11
+ end
12
+
13
+
14
+ namespace :ext do
15
+
16
+
17
+ rbconf = RbConfig::CONFIG
18
+
19
+ mod = MODULE
20
+ modname = env :MODNAME, mod.name.downcase
21
+ dlname = env :DLNAME, 'native'
22
+ dlext = env :DLEXT, rbconf['DLEXT'] || 'so'
23
+ extdir = env :EXTDIR, "ext/#{modname}"
24
+ libdir = env :LIBDIR, "lib/#{modname}"
25
+ ruby = env :RUBY, 'ruby'
26
+ make = env :MAKE, 'make'
27
+ cxx = env :CXX, rbconf['CXX'] || 'g++'
28
+ defs = env :DEFS, []
29
+ debug = env :DEBUG, false
30
+ incdirs = env :INCDIRS, []
31
+ cxxflags = env(:CXXFLAGS, rbconf['CXXFLAGS']).dup
32
+
33
+ outname = "#{dlname}.#{dlext}"
34
+ extout = File.join extdir, outname
35
+ libout = File.join libdir, outname
36
+
37
+ srcs = FileList["#{extdir}/**/*.cpp"]
38
+
39
+ incroot = rbconf['rubyhdrdir']
40
+ incdirs += [
41
+ incroot,
42
+ "#{incroot}/#{RUBY_PLATFORM}",
43
+ '/opt/local/include',
44
+ '/opt/include'
45
+ ]
46
+ incdirs.uniq!
47
+
48
+ defs << '_DEBUG' if debug
49
+ defs << 'NDEBUG' unless debug
50
+ defs << 'WIN32' if win32?
51
+ defs << 'COCOA' if cocoa?
52
+ defs << $~[0].upcase if RUBY_PLATFORM =~ /mswin|ming|cygwin|darwin/i
53
+ cxxflags << ' ' << rbconf['debugflags'] if debug
54
+ cxxflags << ' --stdlib=libc++' if clang?
55
+ cxxflags << defs.map{|s| " -D#{s}"}.join
56
+ cxxflags << incdirs.map{|s| " -I#{s}"}.join
57
+
58
+ extconf = File.join extdir, 'extconf.rb'
59
+ makefile = File.join extdir, 'Makefile'
60
+ depend = File.join extdir, 'depend.mf'
61
+
62
+
63
+ task :build => libout
64
+
65
+ task :clean do
66
+ sh %( cd #{extdir} && #{make} clean ) if File.exist? makefile
67
+ sh %( rm -rf #{makefile} #{depend} #{libout} )
68
+ end
69
+
70
+ file libout => extout do
71
+ sh %( cp #{extout} #{libout} )
72
+ end
73
+
74
+ file extout => [:lib, makefile] do
75
+ sh %( cd #{extdir} && #{make} )
76
+ end
77
+
78
+ file makefile => [extconf, depend] do
79
+ sh %( cd #{extdir} && #{ruby} #{File.basename extconf} )
80
+ end
81
+
82
+ file depend => srcs do
83
+ inc = incdirs.map{|s| " -I#{s}"}.join
84
+ src = srcs.map{|cpp| File.basename cpp}.join ' '
85
+ dep = File.basename depend
86
+ sh %( cd #{extdir} && #{cxx} -M #{cxxflags} #{inc} #{src} > #{dep} )
87
+ end
88
+
89
+
90
+ end# :ext
data/task/gem.rake CHANGED
@@ -1,11 +1,14 @@
1
1
  # -*- mode: ruby; coding: utf-8 -*-
2
2
 
3
3
 
4
- namespace :ext do
5
- task :rdoc => "ext"
6
- directory "ext"
4
+ task :gem => 'gem:build'
5
+
6
+ %w[clean install uninstall upload].each do |t|
7
+ task t.intern => "gem:#{t}"
7
8
  end
8
9
 
10
+ empty_task :lib, :ext, :rdoc
11
+
9
12
 
10
13
  namespace :gem do
11
14
 
@@ -21,6 +24,10 @@ namespace :gem do
21
24
 
22
25
  task :build => gemfile
23
26
 
27
+ task :clean do
28
+ sh %( rm -f #{gemfile} )
29
+ end
30
+
24
31
  task :install => gemfile do
25
32
  sh %( #{gem} install #{gemfile} )
26
33
  end
@@ -29,15 +36,11 @@ namespace :gem do
29
36
  sh %( #{gem} uninstall #{name} )
30
37
  end
31
38
 
32
- task :clean do
33
- sh %( rm -f #{gemfile} )
34
- end
35
-
36
39
  task :upload => gemfile do
37
40
  sh %( #{gem} push #{gemfile} )
38
41
  end
39
42
 
40
- file gemfile => ["lib:build", "ext:rdoc"] do
43
+ file gemfile => [:lib, :ext, :rdoc] do
41
44
  sh %( #{gem} build #{gemspec} )
42
45
  end
43
46