xot 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ *.o
2
+ *.so
3
+ *.bundle
4
+ *.dll.a
5
+ *.gem
6
+ *.log
7
+ *.rdoc.cpp
8
+ *~
9
+ lib/*.a
10
+ .doc
11
+ .yardoc
12
+ .DS_Store
13
+ Makefile
14
+ depend.mf
data/Rakefile CHANGED
@@ -1,37 +1,22 @@
1
1
  # -*- mode: ruby; coding: utf-8 -*-
2
2
 
3
3
 
4
- %w[.].map {|s| "#{s}/lib"}.each do |path|
5
- $: << File.expand_path(File.join File.dirname(__FILE__), *path.split('/'))
6
- end
7
-
8
- require 'rubygems'
9
- require 'xot/rake/helpers'
4
+ require 'bundler/setup'
5
+ require 'xot/rake'
10
6
  require 'xot/module'
11
7
 
12
8
  include Xot::Rake
13
9
 
14
10
 
15
11
  MODULE = Xot
12
+ DLNAME = 'tester'
16
13
 
17
14
 
18
15
  task :default => :build
19
16
 
20
17
  task :build => :lib
21
18
 
22
- task :rebuild => [:clean, :build]
23
-
24
- task :lib => 'lib:build'
25
-
26
- task :doc => 'ext:doc'
27
-
28
- task :gem => 'gem:build'
29
-
30
- task :install => 'gem:install'
31
-
32
- task :uninstall => 'gem:uninstall'
33
-
34
- task :clean => ['lib:clean', 'gem:clean']
19
+ empty_task :test
35
20
 
36
21
 
37
22
  Xot.load_tasks
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
@@ -0,0 +1,56 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ require 'bundler/setup'
5
+ require 'mkmf'
6
+ require 'xot/rake/helpers'
7
+ require 'xot/module'
8
+
9
+ include Xot::Rake
10
+
11
+
12
+ debug = env :DEBUG, false
13
+
14
+
15
+ DEFS = []
16
+ INCDIRS = %w[
17
+ /opt/local/include
18
+ /opt/include
19
+ ]
20
+ LIBDIRS = []
21
+
22
+ HEADERS = %w[
23
+ boost/noncopyable.hpp
24
+ ruby.h
25
+ xot.h
26
+ ]
27
+ LIBS = %w[
28
+ stdc++
29
+ xot
30
+ ]
31
+
32
+
33
+ DEFS << '_DEBUG' if debug
34
+ DEFS << 'NDEBUG' unless debug
35
+ DEFS << 'WINDOWS' << 'WIN32' if win32?
36
+ DEFS << 'COCOA' if cocoa?
37
+ DEFS << $~[0].upcase if RUBY_PLATFORM =~ /mswin|ming|cygwin|darwin/i
38
+
39
+ $CPPFLAGS << DEFS.map {|s| " -D#{s}"}.join
40
+ $CPPFLAGS << INCDIRS.map {|s| " -I#{s}"}.join
41
+ $LDFLAGS << LIBDIRS.map {|s| " -L#{s}"}.join
42
+ $CFLAGS << ' --stdlib=libc++' if clang?
43
+
44
+ RbConfig::CONFIG.each do |key, val|
45
+ {'gcc' => 'g++', 'clang' => 'clang++'}.each {|from, to| val.gsub! from, to}
46
+ end
47
+
48
+
49
+ dir_config 'boost'
50
+ dir_config 'xot', Xot.root_dir
51
+
52
+ exit 1 unless HEADERS.all? {|s| have_header(s)}
53
+ exit 1 unless LIBS.all? {|s| have_library(s)}
54
+
55
+
56
+ create_makefile 'xot/tester'
@@ -0,0 +1,19 @@
1
+ #include <ruby.h>
2
+
3
+
4
+ static VALUE
5
+ test_native (VALUE self)
6
+ {
7
+ return true;
8
+ }
9
+
10
+
11
+ extern "C" void
12
+ Init_tester ()
13
+ {
14
+ VALUE mXot = rb_define_module( "Xot");
15
+ VALUE mTester = rb_define_module_under(mXot, "Tester");
16
+
17
+ rb_define_singleton_method(
18
+ mTester, "test_native", RUBY_METHOD_FUNC(test_native), 0);
19
+ }
data/include/xot.h CHANGED
@@ -6,6 +6,9 @@
6
6
 
7
7
  #include <xot/defs.h>
8
8
  #include <xot/string.h>
9
+ #include <xot/pimpl.h>
10
+ #include <xot/ref.h>
11
+ #include <xot/debug.h>
9
12
 
10
13
 
11
14
  #endif//EOH
@@ -0,0 +1,29 @@
1
+ // -*- c++ -*-
2
+ #pragma once
3
+ #ifndef __XOT_DEBUG_H__
4
+ #define __XOT_DEBUG_H__
5
+
6
+
7
+ namespace Xot
8
+ {
9
+
10
+
11
+ #ifdef _DEBUG
12
+
13
+ void dout (const char* format, ...);
14
+
15
+ void doutln (const char* format, ...);
16
+
17
+ #else
18
+
19
+ inline void dout(...) {}
20
+
21
+ inline void doutln(...) {}
22
+
23
+ #endif
24
+
25
+
26
+ }// Xot
27
+
28
+
29
+ #endif//EOH
data/include/xot/defs.h CHANGED
@@ -4,6 +4,20 @@
4
4
  #define __XOT_DEFS_H__
5
5
 
6
6
 
7
+ #include <stddef.h>
8
+
9
+
10
+ #ifdef CYGWIN
11
+
12
+ typedef unsigned short ushort;
13
+
14
+ typedef unsigned int uint;
15
+
16
+ typedef unsigned long ulong;
17
+
18
+ #endif
19
+
20
+
7
21
  namespace Xot
8
22
  {
9
23
 
@@ -12,13 +26,23 @@ namespace Xot
12
26
  {
13
27
 
14
28
 
15
- typedef unsigned char uchar;
29
+ typedef unsigned char uchar;
30
+
31
+ #ifdef CYGWIN
32
+
33
+ using ::ushort;
34
+ using ::uint;
35
+ using ::ulong;
36
+
37
+ #else
38
+
39
+ typedef unsigned short ushort;
16
40
 
17
- typedef unsigned short ushort;
41
+ typedef unsigned int uint;
18
42
 
19
- typedef unsigned int uint;
43
+ typedef unsigned long ulong;
20
44
 
21
- typedef unsigned long ulong;
45
+ #endif
22
46
 
23
47
  typedef long long longlong;
24
48
 
@@ -0,0 +1,67 @@
1
+ // -*- c++ -*-
2
+ #pragma once
3
+ #ifndef __XOT_PIMPL_H__
4
+ #define __XOT_PIMPL_H__
5
+
6
+
7
+ #include <boost/scoped_ptr.hpp>
8
+ #include <boost/shared_ptr.hpp>
9
+
10
+
11
+ namespace Xot
12
+ {
13
+
14
+
15
+ template <typename T, bool SHARED = false> class PImpl;
16
+
17
+
18
+ template <typename T>
19
+ class PImpl<T, false> : public boost::scoped_ptr<T>
20
+ {
21
+
22
+ typedef boost::scoped_ptr<T> Super;
23
+
24
+ typedef PImpl<T, false> This;
25
+
26
+ public:
27
+
28
+ PImpl () : Super(new T) {}
29
+
30
+ PImpl (T* p) : Super(p) {}
31
+
32
+ PImpl (const This& obj) : Super(new T(*obj)) {}
33
+
34
+ This& operator = (const This& obj)
35
+ {
36
+ if (&obj != this) reset(new T(*obj));
37
+ return *this;
38
+ }
39
+
40
+ bool shared () const {return false;}
41
+
42
+ };// PImpl
43
+
44
+
45
+ template <typename T>
46
+ class PImpl<T, true> : public boost::shared_ptr<T>
47
+ {
48
+
49
+ typedef boost::shared_ptr<T> Super;
50
+
51
+ typedef PImpl<T, true> This;
52
+
53
+ public:
54
+
55
+ PImpl () : Super(new T) {}
56
+
57
+ PImpl (T* p) : Super(p) {}
58
+
59
+ bool shared () const {return true;}
60
+
61
+ };// PImpl
62
+
63
+
64
+ }// Xot
65
+
66
+
67
+ #endif//EOH
data/include/xot/ref.h ADDED
@@ -0,0 +1,184 @@
1
+ // -*- c++ -*-
2
+ #pragma once
3
+ #ifndef __XOT_REF_H__
4
+ #define __XOT_REF_H__
5
+
6
+
7
+ #include <assert.h>
8
+ #include <typeinfo>
9
+ #include <boost/noncopyable.hpp>
10
+ #include <xot/defs.h>
11
+ #include <xot/debug.h>
12
+
13
+
14
+ //#define XOT_REF_DEBUG 1
15
+
16
+
17
+ namespace Xot
18
+ {
19
+
20
+
21
+ class EmptyClass {};
22
+
23
+
24
+ template <typename SuperClass = EmptyClass>
25
+ class RefCountable : public SuperClass
26
+ {
27
+
28
+ public:
29
+
30
+ virtual void retain ()
31
+ {
32
+ reference(+1);
33
+
34
+ #ifdef XOT_REF_DEBUG
35
+ doutln(
36
+ "%s: %d -> %d",
37
+ typeid(this).name(), count() - 1, count());
38
+ #endif
39
+ }
40
+
41
+ virtual void release ()
42
+ {
43
+ assert(count() >= 0);
44
+ bool del = !retained() || reference(-1) == 0;
45
+
46
+ #ifdef XOT_REF_DEBUG
47
+ doutln(
48
+ "%s: %d -> %d, refcount:%s, delete:%s",
49
+ typeid(this).name(), count() + 1, count(),
50
+ retained() ? "yes" : "no", del ? "yes" : "no");
51
+ #endif
52
+
53
+ if (del) delete this;
54
+ }
55
+
56
+ protected:
57
+
58
+ RefCountable ()
59
+ : refcount(0)
60
+ {
61
+ }
62
+
63
+ virtual ~RefCountable ()
64
+ {
65
+ }
66
+
67
+ private:
68
+
69
+ int refcount;
70
+
71
+ bool retained () const
72
+ {
73
+ return refcount & 0x1;
74
+ }
75
+
76
+ int count () const
77
+ {
78
+ return refcount >> 1;
79
+ }
80
+
81
+ int reference (int add)
82
+ {
83
+ assert(add != 0);
84
+ int c = count() + add;
85
+ refcount = c << 1 | 0x1;// bit for retained flag.
86
+ return c;
87
+ }
88
+
89
+ RefCountable (const RefCountable&);
90
+
91
+ RefCountable& operator = (const RefCountable&);
92
+
93
+ };// RefCountable
94
+
95
+
96
+ template <typename T>
97
+ class Ref
98
+ {
99
+
100
+ typedef Ref<T> This;
101
+
102
+ public:
103
+
104
+ Ref (T* ptr = NULL)
105
+ : ptr(ptr)
106
+ {
107
+ if (ptr) ptr->retain();
108
+ }
109
+
110
+ Ref (const This& obj)
111
+ : ptr(obj.ptr)
112
+ {
113
+ if (ptr) ptr->retain();
114
+ }
115
+
116
+ Ref& operator = (T* ptr)
117
+ {
118
+ reset(ptr);
119
+ return *this;
120
+ }
121
+
122
+ Ref& operator = (const This& obj)
123
+ {
124
+ if (&obj == this) return *this;
125
+ reset(obj.ptr);
126
+ return *this;
127
+ }
128
+
129
+ ~Ref ()
130
+ {
131
+ if (ptr) ptr->release();
132
+ }
133
+
134
+ void reset (T* ptr = NULL)
135
+ {
136
+ if (this->ptr == ptr) return;
137
+ if (this->ptr) this->ptr->release();
138
+ this->ptr = ptr;
139
+ if (this->ptr) this->ptr->retain();
140
+ }
141
+
142
+ T* get () {return ptr;}
143
+
144
+ const T* get () const {return ptr;}
145
+
146
+ T* operator -> () {return get();}
147
+
148
+ const T* operator -> () const {return get();}
149
+
150
+ T& operator * () {return *get();}
151
+
152
+ const T& operator * () const {return *get();}
153
+
154
+ operator T* () {return get();}
155
+
156
+ operator const T* () const {return get();}
157
+
158
+ bool operator == (T* ptr) const {return this->ptr == ptr;}
159
+
160
+ bool operator != (T* ptr) const {return !operator==(ptr);}
161
+
162
+ bool operator == (const T* ptr) const {return this->ptr == ptr;}
163
+
164
+ bool operator != (const T* ptr) const {return !operator==(ptr);}
165
+
166
+ bool operator == (const This& obj) const {return ptr == obj.ptr;}
167
+
168
+ bool operator != (const This& obj) const {return !operator==(obj);}
169
+
170
+ operator bool () const {return ptr != NULL;}
171
+
172
+ bool operator ! () const {return !operator bool();}
173
+
174
+ private:
175
+
176
+ T* ptr;
177
+
178
+ };// Ref
179
+
180
+
181
+ }// Xot
182
+
183
+
184
+ #endif//EOH