xot 0.1.6 → 0.1.7
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 → 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
|