xot 0.1.6 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/{ChangeLog → README.md} +0 -0
- data/Rakefile +7 -6
- data/VERSION +1 -1
- data/ext/xot/extconf.rb +10 -49
- data/ext/xot/tester.cpp +93 -0
- data/include/xot.h +4 -1
- data/include/xot/exception.h +70 -0
- data/include/xot/ref.h +171 -41
- data/include/xot/string.h +35 -16
- data/include/xot/time.h +17 -0
- data/include/xot/util.h +26 -0
- data/lib/xot.rb +3 -2
- data/lib/xot/bit_flag.rb +52 -0
- data/lib/xot/extconf.rb +59 -0
- data/lib/xot/invoker.rb +48 -0
- data/lib/xot/module.rb +11 -7
- data/lib/xot/rake.rb +99 -14
- data/lib/xot/setter.rb +5 -6
- data/lib/xot/test.rb +20 -0
- data/src/debug.cpp +5 -1
- data/src/exception.cpp +89 -0
- data/src/string.cpp +39 -0
- data/src/time.cpp +24 -0
- data/task/ext.rake +13 -27
- data/task/lib.rake +20 -36
- data/task/mac.rake +45 -0
- data/test/helper.rb +6 -3
- data/test/test_bit_flag.rb +66 -0
- data/test/test_invoker.rb +41 -0
- data/test/test_setter.rb +3 -2
- data/xot.gemspec +3 -4
- metadata +26 -26
- data/.gitignore +0 -14
- data/README +0 -0
- data/lib/xot/load_path.rb +0 -28
- data/src/defs.cpp +0 -6
- data/task/git.rake +0 -32
- data/task/submodule.rake +0 -51
data/lib/xot/setter.rb
CHANGED
@@ -7,10 +7,8 @@ module Xot
|
|
7
7
|
module Setter
|
8
8
|
|
9
9
|
def set (*args)
|
10
|
-
return if args.empty?
|
11
|
-
|
12
10
|
first = args.shift
|
13
|
-
if first.
|
11
|
+
if first.kind_of? Hash
|
14
12
|
first.each {|name, value| set_value__ name, value}
|
15
13
|
else
|
16
14
|
set_value__ first, *args
|
@@ -19,9 +17,10 @@ module Xot
|
|
19
17
|
|
20
18
|
private
|
21
19
|
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
def set_value__ (name, *values)
|
21
|
+
raise ArgumentError unless name && !values.empty?
|
22
|
+
__send__ "#{name}=", *values
|
23
|
+
end
|
25
24
|
|
26
25
|
end# Setter
|
27
26
|
|
data/lib/xot/test.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
|
4
|
+
module Xot
|
5
|
+
|
6
|
+
|
7
|
+
module Test
|
8
|
+
|
9
|
+
def assert_not (expression, *args)
|
10
|
+
assert !expression, *args
|
11
|
+
end
|
12
|
+
|
13
|
+
def assert_not_includes (collection, obj, *args)
|
14
|
+
assert !collection.include?(obj), *args
|
15
|
+
end
|
16
|
+
|
17
|
+
end# Test
|
18
|
+
|
19
|
+
|
20
|
+
end# Xot
|
data/src/debug.cpp
CHANGED
data/src/exception.cpp
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
#include "xot/exception.h"
|
2
|
+
|
3
|
+
|
4
|
+
namespace Xot
|
5
|
+
{
|
6
|
+
|
7
|
+
|
8
|
+
XotError::XotError (const char* str)
|
9
|
+
: Super(str ? str : "")
|
10
|
+
{
|
11
|
+
}
|
12
|
+
|
13
|
+
|
14
|
+
InvalidStateError::InvalidStateError (const char* str)
|
15
|
+
: Super(str)
|
16
|
+
{
|
17
|
+
}
|
18
|
+
|
19
|
+
|
20
|
+
SystemError::SystemError (const char* str)
|
21
|
+
: Super(str)
|
22
|
+
{
|
23
|
+
}
|
24
|
+
|
25
|
+
|
26
|
+
NotImplementedError::NotImplementedError (const char* str)
|
27
|
+
: Super(str)
|
28
|
+
{
|
29
|
+
}
|
30
|
+
|
31
|
+
|
32
|
+
String
|
33
|
+
error_text (const char* file, int line, const char* str)
|
34
|
+
{
|
35
|
+
String s = str;
|
36
|
+
if (file) s = stringf("%s:%d: ", file, line) + s;
|
37
|
+
return s;
|
38
|
+
}
|
39
|
+
|
40
|
+
|
41
|
+
namespace ErrorFunctions
|
42
|
+
{
|
43
|
+
|
44
|
+
void
|
45
|
+
xot_error (const char* file, int line, const char* format, ...)
|
46
|
+
{
|
47
|
+
XOT_STRINGF(format, s);
|
48
|
+
throw XotError(error_text(file, line, s));
|
49
|
+
}
|
50
|
+
|
51
|
+
void
|
52
|
+
argument_error (const char* file, int line, const char* format, ...)
|
53
|
+
{
|
54
|
+
XOT_STRINGF(format, s);
|
55
|
+
throw std::invalid_argument(error_text(file, line, s));
|
56
|
+
}
|
57
|
+
|
58
|
+
void
|
59
|
+
index_error (const char* file, int line, const char* format, ...)
|
60
|
+
{
|
61
|
+
XOT_STRINGF(format, s);
|
62
|
+
throw std::out_of_range(error_text(file, line, s));
|
63
|
+
}
|
64
|
+
|
65
|
+
void
|
66
|
+
invalid_state_error (const char* file, int line, const char* format, ...)
|
67
|
+
{
|
68
|
+
XOT_STRINGF(format, s);
|
69
|
+
throw InvalidStateError(error_text(file, line, s));
|
70
|
+
}
|
71
|
+
|
72
|
+
void
|
73
|
+
system_error (const char* file, int line, const char* format, ...)
|
74
|
+
{
|
75
|
+
XOT_STRINGF(format, s);
|
76
|
+
throw SystemError(error_text(file, line, s));
|
77
|
+
}
|
78
|
+
|
79
|
+
void
|
80
|
+
not_implemented_error (const char* file, int line, const char* format, ...)
|
81
|
+
{
|
82
|
+
XOT_STRINGF(format, s);
|
83
|
+
throw NotImplementedError(error_text(file, line, s));
|
84
|
+
}
|
85
|
+
|
86
|
+
}// ErrorFunctions
|
87
|
+
|
88
|
+
|
89
|
+
}// Xot
|
data/src/string.cpp
CHANGED
@@ -9,6 +9,45 @@ namespace Xot
|
|
9
9
|
{
|
10
10
|
|
11
11
|
|
12
|
+
String::String ()
|
13
|
+
{
|
14
|
+
}
|
15
|
+
|
16
|
+
String::String (const char* str)
|
17
|
+
: Super(str)
|
18
|
+
{
|
19
|
+
}
|
20
|
+
|
21
|
+
String::operator const char* () const
|
22
|
+
{
|
23
|
+
return c_str();
|
24
|
+
}
|
25
|
+
|
26
|
+
String
|
27
|
+
operator + (const String& lhs, const String& rhs)
|
28
|
+
{
|
29
|
+
String t = lhs;
|
30
|
+
t += rhs;
|
31
|
+
return t;
|
32
|
+
}
|
33
|
+
|
34
|
+
String
|
35
|
+
operator + (const String& lhs, const char* rhs)
|
36
|
+
{
|
37
|
+
String t = lhs;
|
38
|
+
t += rhs;
|
39
|
+
return t;
|
40
|
+
}
|
41
|
+
|
42
|
+
String
|
43
|
+
operator + (const char* lhs, const String& rhs)
|
44
|
+
{
|
45
|
+
String t = lhs;
|
46
|
+
t += rhs;
|
47
|
+
return t;
|
48
|
+
}
|
49
|
+
|
50
|
+
|
12
51
|
String
|
13
52
|
stringf (const char* format, ...)
|
14
53
|
{
|
data/src/time.cpp
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
#include "xot/time.h"
|
2
|
+
|
3
|
+
|
4
|
+
#include <boost/date_time/posix_time/posix_time.hpp>
|
5
|
+
|
6
|
+
namespace pt = boost::posix_time;
|
7
|
+
|
8
|
+
|
9
|
+
namespace Xot
|
10
|
+
{
|
11
|
+
|
12
|
+
|
13
|
+
double
|
14
|
+
time (bool local)
|
15
|
+
{
|
16
|
+
static pt::ptime zero = pt::from_time_t(0);
|
17
|
+
pt::ptime now = local ?
|
18
|
+
pt::microsec_clock::local_time() :
|
19
|
+
pt::microsec_clock::universal_time();
|
20
|
+
return (now - zero).total_milliseconds() / 1000.0;
|
21
|
+
}
|
22
|
+
|
23
|
+
|
24
|
+
}// Xot
|
data/task/ext.rake
CHANGED
@@ -17,6 +17,7 @@ namespace :ext do
|
|
17
17
|
rbconf = RbConfig::CONFIG
|
18
18
|
|
19
19
|
mod = MODULE
|
20
|
+
mods = env :MODULES, [], :array
|
20
21
|
modname = env :MODNAME, mod.name.downcase
|
21
22
|
dlname = env :DLNAME, 'native'
|
22
23
|
dlext = env :DLEXT, rbconf['DLEXT'] || 'so'
|
@@ -25,35 +26,20 @@ namespace :ext do
|
|
25
26
|
ruby = env :RUBY, 'ruby'
|
26
27
|
make = env :MAKE, 'make'
|
27
28
|
cxx = env :CXX, rbconf['CXX'] || 'g++'
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
cppflags = env :CPPFLAGS, rbconf['CPPFLAGS']
|
30
|
+
cxxflags = env :CXXFLAGS, rbconf['CXXFLAGS']
|
31
|
+
defs = env :DEFS, [], :array
|
32
|
+
incdirs = env(:INCDIRS, [], :array) + mods.reverse.map {|m| m.include_dir}
|
33
|
+
|
34
|
+
cppflags = cppflags cppflags, defs, incdirs
|
35
|
+
cxxflags = cflags cxxflags
|
32
36
|
|
33
37
|
outname = "#{dlname}.#{dlext}"
|
34
38
|
extout = File.join extdir, outname
|
35
39
|
libout = File.join libdir, outname
|
36
40
|
|
37
41
|
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
|
42
|
+
libs = FileList["#{libdir}/../lib*.a"]
|
57
43
|
|
58
44
|
extconf = File.join extdir, 'extconf.rb'
|
59
45
|
makefile = File.join extdir, 'Makefile'
|
@@ -75,15 +61,15 @@ namespace :ext do
|
|
75
61
|
sh %( cd #{extdir} && #{make} )
|
76
62
|
end
|
77
63
|
|
78
|
-
file makefile => [extconf, depend] do
|
64
|
+
file makefile => [extconf, depend] + libs do
|
79
65
|
sh %( cd #{extdir} && #{ruby} #{File.basename extconf} )
|
80
66
|
end
|
81
67
|
|
82
68
|
file depend => srcs do
|
83
|
-
inc = incdirs.map{|s| " -I#{s}"}.join
|
84
|
-
src = srcs.map{|cpp| File.basename cpp}.join ' '
|
69
|
+
inc = incdirs.map {|s| " -I#{s}"}.join
|
70
|
+
src = srcs.map {|cpp| File.basename cpp}.join ' '
|
85
71
|
dep = File.basename depend
|
86
|
-
sh %( cd #{extdir} && #{cxx} -M #{
|
72
|
+
sh %( cd #{extdir} && #{cxx} -M #{cppflags} #{inc} #{src} > #{dep} )
|
87
73
|
end
|
88
74
|
|
89
75
|
|
data/task/lib.rake
CHANGED
@@ -18,48 +18,32 @@ namespace :lib do
|
|
18
18
|
rbconf = RbConfig::CONFIG
|
19
19
|
|
20
20
|
mod = MODULE
|
21
|
-
|
21
|
+
mods = env :MODULES, [], :array
|
22
|
+
modname = env :MODNAME, MODULE.name.downcase
|
22
23
|
incdir = env :INCDIR, 'include'
|
23
24
|
srcdir = env :SRCDIR, 'src'
|
24
25
|
libdir = env :LIBDIR, 'lib'
|
25
26
|
cxx = env :CXX, rbconf['CXX'] || 'g++'
|
26
27
|
ar = env :AR, rbconf['AR'] || 'ar'
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
cppflags = env :CPPFLAGS, rbconf['CPPFLAGS']
|
29
|
+
cxxflags = env :CXXFLAGS, rbconf['CXXFLAGS']
|
30
|
+
arflags = env :ARFLAGS, 'crs'
|
31
|
+
defs = env :DEFS, [], :array
|
32
|
+
incdirs = env(:INCDIRS, [], :array) + mods.reverse.map {|m| m.include_dir}
|
32
33
|
|
33
|
-
|
34
|
+
cppflags = cppflags cppflags, defs, incdirs
|
35
|
+
cxxflags = cflags cxxflags
|
36
|
+
|
37
|
+
outname = "lib#{modname}.a"
|
34
38
|
out = File.join libdir, outname
|
35
39
|
|
36
40
|
erbs = glob *[incdir, srcdir].map {|s| "#{s}/**/*.erb"}
|
37
41
|
erbs = convertions erbs, {".erb" => ""}
|
38
|
-
|
39
|
-
srcs
|
40
|
-
srcs += glob("src/**/*.mm") if cocoa?
|
42
|
+
srcs = glob("#{srcdir}/**/*.cpp") | erbs.values.grep(/\.cpp$/)
|
43
|
+
srcs += glob("#{srcdir}/**/*.mm") if osx? || ios?
|
41
44
|
srcs = srcs.reject {|s| s =~ %r(/win32/)} unless win32?
|
42
|
-
srcs = srcs.reject {|s| s =~ %r(/
|
43
|
-
|
44
|
-
incroot = rbconf['rubyhdrdir']
|
45
|
-
incdirs.concat Xot.include_dirs + [
|
46
|
-
incroot,
|
47
|
-
"#{incroot}/#{RUBY_PLATFORM}",
|
48
|
-
'/opt/local/include',
|
49
|
-
'/opt/include'
|
50
|
-
]
|
51
|
-
incdirs.uniq!
|
52
|
-
|
53
|
-
defs << '_DEBUG' if debug
|
54
|
-
defs << 'NDEBUG' unless debug
|
55
|
-
defs << 'WIN32' if win32?
|
56
|
-
defs << 'COCOA' if cocoa?
|
57
|
-
defs << $~[0].upcase if RUBY_PLATFORM =~ /mswin|ming|cygwin|darwin/i
|
58
|
-
cxxflags << ' ' << rbconf['debugflags'] if debug
|
59
|
-
cxxflags.gsub! /-O\d?/, '' if debug
|
60
|
-
cxxflags << ' --stdlib=libc++' if clang?
|
61
|
-
cxxflags << defs.map{|s| " -D#{s}"}.join
|
62
|
-
cxxflags << incdirs.map{|s| " -I#{s}"}.join
|
45
|
+
srcs = srcs.reject {|s| s =~ %r(/osx/)} unless osx?
|
46
|
+
srcs = srcs.reject {|s| s =~ %r(/ios/)} unless ios?
|
63
47
|
|
64
48
|
depend = 'depend.mf'
|
65
49
|
objs = convertions srcs, {".cpp" => ".o", ".mm" => ".o"}
|
@@ -77,11 +61,11 @@ namespace :lib do
|
|
77
61
|
task :erb => erbs.values
|
78
62
|
|
79
63
|
file out => objs.values do
|
80
|
-
sh %( #{ar} #{arflags} #{out} #{objs.values.join " "} )
|
64
|
+
sh %( #{ar} #{arflags} #{out} #{objs.values.join " "} ) unless objs.values.empty?
|
81
65
|
end
|
82
66
|
|
83
67
|
file depend => erbs.values do
|
84
|
-
sh %( #{cxx} -M #{
|
68
|
+
sh %( #{cxx} -M #{cppflags} #{srcs.join ' '} > #{depend} )
|
85
69
|
input = open(depend) {|f| f.read}
|
86
70
|
open(depend, 'w') do |output|
|
87
71
|
output << input.gsub(/\w+\.o/, srcdir + '/\0')
|
@@ -90,13 +74,13 @@ namespace :lib do
|
|
90
74
|
|
91
75
|
import depend if File.exist? depend
|
92
76
|
|
93
|
-
objs.each do |
|
77
|
+
objs.each do |src, obj|
|
94
78
|
file obj => [depend, src] + erbs.values do
|
95
|
-
sh %( #{cxx} -c #{cxxflags} -o #{obj} #{src} )
|
79
|
+
sh %( #{cxx} -c #{cppflags} #{cxxflags} -o #{obj} #{src} )
|
96
80
|
end
|
97
81
|
end
|
98
82
|
|
99
|
-
erbs.each do |
|
83
|
+
erbs.each do |erb, out|
|
100
84
|
file out => erb do
|
101
85
|
print "#{erb}: compiling to #{out} ..."
|
102
86
|
compile erb, out
|
data/task/mac.rake
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# -*- mode: ruby; coding: utf-8 -*-
|
2
|
+
|
3
|
+
|
4
|
+
task :app => 'app:build'
|
5
|
+
|
6
|
+
%w[clean run].each do |t|
|
7
|
+
task t.intern => "app:#{t}"
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
namespace :app do
|
12
|
+
|
13
|
+
|
14
|
+
mod = MODULE
|
15
|
+
name = env :NAME, MODULE.name.downcase
|
16
|
+
bindir = env :BINDIR, 'bin'
|
17
|
+
ruby = env :RUBY, 'ruby'
|
18
|
+
|
19
|
+
bin = "#{bindir}/#{name}"
|
20
|
+
appname = name.capitalize
|
21
|
+
appdir = "#{appname}.app"
|
22
|
+
appbindir = "#{appdir}/Contents/MacOS"
|
23
|
+
out = "#{appbindir}/#{name}"
|
24
|
+
|
25
|
+
tmps = [appdir]
|
26
|
+
|
27
|
+
|
28
|
+
task :build => out
|
29
|
+
|
30
|
+
task :clean do
|
31
|
+
sh %( rm -rf #{tmps.join ' '} )
|
32
|
+
end
|
33
|
+
|
34
|
+
task :run => :app do
|
35
|
+
sh %( #{ruby} #{bin} )
|
36
|
+
end
|
37
|
+
|
38
|
+
file out => [bin, appbindir] do
|
39
|
+
sh %( cp #{bin} #{appbindir} )
|
40
|
+
end
|
41
|
+
|
42
|
+
directory appbindir
|
43
|
+
|
44
|
+
|
45
|
+
end# :app
|
data/test/helper.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
%w[.]
|
5
|
+
.map {|s| File.expand_path "../../#{s}/lib", __FILE__}
|
6
|
+
.each {|s| $:.unshift s if !$:.include?(s) && File.directory?(s)}
|
7
7
|
|
8
8
|
require 'test/unit'
|
9
9
|
require 'xot'
|
10
|
+
require 'xot/test'
|
10
11
|
require 'xot/tester'
|
12
|
+
|
13
|
+
include Xot::Test
|