extract-curves 0.1.1-mswin32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. data/Changelog +21 -0
  2. data/bin/ec_rect2polar +22 -0
  3. data/bin/ec_rect2polar.rb +22 -0
  4. data/bin/ec_rev_lines +5 -0
  5. data/bin/ec_rev_lines.rb +5 -0
  6. data/bin/ec_sph_area +30 -0
  7. data/bin/ec_sph_area.rb +30 -0
  8. data/bin/extract_curves +1670 -0
  9. data/bin/extract_curves.rb +1670 -0
  10. data/ruby_ext/pav/extconf.rb +22 -0
  11. data/ruby_ext/pav/pav.dll +0 -0
  12. data/ruby_libs/pav/attr_cache.rb +211 -0
  13. data/ruby_libs/pav/attr_cache.t1.rb +32 -0
  14. data/ruby_libs/pav/cache.rb +31 -0
  15. data/ruby_libs/pav/collection/std.rb +58 -0
  16. data/ruby_libs/pav/dbg_log.rb +458 -0
  17. data/ruby_libs/pav/floatsio.rb +53 -0
  18. data/ruby_libs/pav/generator_cache.rb +165 -0
  19. data/ruby_libs/pav/graph/node.rb +602 -0
  20. data/ruby_libs/pav/graph/node_grp.rb +865 -0
  21. data/ruby_libs/pav/gtk.rb +6 -0
  22. data/ruby_libs/pav/gtk/button.rb +118 -0
  23. data/ruby_libs/pav/gtk/dialog.rb +29 -0
  24. data/ruby_libs/pav/gtk/guiobj.rb +772 -0
  25. data/ruby_libs/pav/gtk/icons.rb +124 -0
  26. data/ruby_libs/pav/gtk/rulers.rb +264 -0
  27. data/ruby_libs/pav/gtk/toolbar.rb +189 -0
  28. data/ruby_libs/pav/guiobj.rb +2 -0
  29. data/ruby_libs/pav/guiobj/info_asm.rb +41 -0
  30. data/ruby_libs/pav/guiobj/method.rb +211 -0
  31. data/ruby_libs/pav/guiobj/obj.rb +134 -0
  32. data/ruby_libs/pav/guiobj/signals.rb +9 -0
  33. data/ruby_libs/pav/heap.rb +54 -0
  34. data/ruby_libs/pav/icons/alt_handle.xpm +3832 -0
  35. data/ruby_libs/pav/icons/alt_handle_hover.xpm +3368 -0
  36. data/ruby_libs/pav/icons/alt_handle_pressed.xpm +3828 -0
  37. data/ruby_libs/pav/icons/blob.gif +0 -0
  38. data/ruby_libs/pav/icons/contour.gif +0 -0
  39. data/ruby_libs/pav/icons/contour_carpet.gif +0 -0
  40. data/ruby_libs/pav/icons/curve.gif +0 -0
  41. data/ruby_libs/pav/icons/curve_carpet.gif +0 -0
  42. data/ruby_libs/pav/icons/expand_closed.xpm +1791 -0
  43. data/ruby_libs/pav/icons/expand_closed_hover.xpm +1775 -0
  44. data/ruby_libs/pav/icons/expand_open.xpm +1788 -0
  45. data/ruby_libs/pav/icons/expand_open_hover.xpm +1752 -0
  46. data/ruby_libs/pav/icons/extract_curves/extract_curves-icon-rgb.ppm +14 -0
  47. data/ruby_libs/pav/icons/extract_curves/extract_curves-logo-rgb.gif +0 -0
  48. data/ruby_libs/pav/icons/extract_curves/trace_mark.xpm +38 -0
  49. data/ruby_libs/pav/icons/handle.xpm +213 -0
  50. data/ruby_libs/pav/icons/loop.gif +0 -0
  51. data/ruby_libs/pav/icons/loop_carpet.gif +0 -0
  52. data/ruby_libs/pav/icons/next.xpm +29 -0
  53. data/ruby_libs/pav/icons/next_hover.xpm +315 -0
  54. data/ruby_libs/pav/icons/next_pressed.xpm +144 -0
  55. data/ruby_libs/pav/icons/prev.xpm +29 -0
  56. data/ruby_libs/pav/icons/prev_hover.xpm +315 -0
  57. data/ruby_libs/pav/icons/prev_pressed.xpm +144 -0
  58. data/ruby_libs/pav/icons/shaved-core.gif +0 -0
  59. data/ruby_libs/pav/icons/vnext.xpm +29 -0
  60. data/ruby_libs/pav/icons/vprev.xpm +29 -0
  61. data/ruby_libs/pav/numeric/ext.rb +21 -0
  62. data/ruby_libs/pav/patterns/hsep.gif +0 -0
  63. data/ruby_libs/pav/patterns/tnode.gif +0 -0
  64. data/ruby_libs/pav/patterns/tnode_w_link.gif +0 -0
  65. data/ruby_libs/pav/patterns/vlink.gif +0 -0
  66. data/ruby_libs/pav/patterns/vsep.gif +0 -0
  67. data/ruby_libs/pav/patterns/yg_hrope.xpm +492 -0
  68. data/ruby_libs/pav/patterns/yg_hrope_thick.xpm +1904 -0
  69. data/ruby_libs/pav/patterns/yg_hrope_thin.xpm +130 -0
  70. data/ruby_libs/pav/patterns/yg_tnode.xpm +180 -0
  71. data/ruby_libs/pav/patterns/yg_tnode_thick.xpm +615 -0
  72. data/ruby_libs/pav/patterns/yg_tnode_thin.xpm +55 -0
  73. data/ruby_libs/pav/patterns/yg_tnode_w_link.xpm +190 -0
  74. data/ruby_libs/pav/patterns/yg_tnode_w_link_thick.xpm +676 -0
  75. data/ruby_libs/pav/patterns/yg_tnode_w_link_thin.xpm +62 -0
  76. data/ruby_libs/pav/patterns/yg_vrope.xpm +563 -0
  77. data/ruby_libs/pav/patterns/yg_vrope_thick.xpm +2047 -0
  78. data/ruby_libs/pav/patterns/yg_vrope_thin.xpm +166 -0
  79. data/ruby_libs/pav/pav_find.rb +90 -0
  80. data/ruby_libs/pav/pix.rb +402 -0
  81. data/ruby_libs/pav/pix/aapix.rb +378 -0
  82. data/ruby_libs/pav/pix/blob.rb +678 -0
  83. data/ruby_libs/pav/pix/circle.rb +73 -0
  84. data/ruby_libs/pav/pix/contour.rb +676 -0
  85. data/ruby_libs/pav/pix/contour/calc_situations.rb +9 -0
  86. data/ruby_libs/pav/pix/contour/carp_calc.rb +212 -0
  87. data/ruby_libs/pav/pix/contour/situations.dmp +0 -0
  88. data/ruby_libs/pav/pix/contour/situations.rb +21 -0
  89. data/ruby_libs/pav/pix/curve.rb +1544 -0
  90. data/ruby_libs/pav/pix/img_obj.rb +865 -0
  91. data/ruby_libs/pav/pix/node.rb +159 -0
  92. data/ruby_libs/pav/pix/shaved_core.rb +697 -0
  93. data/ruby_libs/pav/pix/subpix.rb +212 -0
  94. data/ruby_libs/pav/rand_accessible.rb +16 -0
  95. data/ruby_libs/pav/rangeset.rb +63 -0
  96. data/ruby_libs/pav/search.rb +210 -0
  97. data/ruby_libs/pav/set.rb +130 -0
  98. data/ruby_libs/pav/string/bits.rb +523 -0
  99. data/ruby_libs/pav/string/ext.rb +58 -0
  100. data/ruby_libs/pav/string/observable.rb +155 -0
  101. data/ruby_libs/pav/string/text.rb +79 -0
  102. data/ruby_libs/pav/string/words.rb +42 -0
  103. data/ruby_libs/pav/sub_arr.rb +56 -0
  104. data/ruby_libs/pav/traced_obj.rb +79 -0
  105. data/web/index.html +280 -0
  106. data/web/media/icons/alt_handle.xpm +3832 -0
  107. data/web/media/icons/alt_handle_hover.xpm +3368 -0
  108. data/web/media/icons/alt_handle_pressed.xpm +3828 -0
  109. data/web/media/icons/blob.gif +0 -0
  110. data/web/media/icons/contour.gif +0 -0
  111. data/web/media/icons/contour_carpet.gif +0 -0
  112. data/web/media/icons/curve.gif +0 -0
  113. data/web/media/icons/curve_carpet.gif +0 -0
  114. data/web/media/icons/expand_closed.xpm +1791 -0
  115. data/web/media/icons/expand_closed_hover.xpm +1775 -0
  116. data/web/media/icons/expand_open.xpm +1788 -0
  117. data/web/media/icons/expand_open_hover.xpm +1752 -0
  118. data/web/media/icons/extract_curves/extract_curves-icon-rgb.ppm +14 -0
  119. data/web/media/icons/extract_curves/extract_curves-logo-rgb.gif +0 -0
  120. data/web/media/icons/extract_curves/trace_mark.xpm +38 -0
  121. data/web/media/icons/handle.xpm +213 -0
  122. data/web/media/icons/loop.gif +0 -0
  123. data/web/media/icons/loop_carpet.gif +0 -0
  124. data/web/media/icons/next.xpm +29 -0
  125. data/web/media/icons/next_hover.xpm +315 -0
  126. data/web/media/icons/next_pressed.xpm +144 -0
  127. data/web/media/icons/prev.xpm +29 -0
  128. data/web/media/icons/prev_hover.xpm +315 -0
  129. data/web/media/icons/prev_pressed.xpm +144 -0
  130. data/web/media/icons/shaved-core.gif +0 -0
  131. data/web/media/icons/vnext.xpm +29 -0
  132. data/web/media/icons/vprev.xpm +29 -0
  133. data/web/media/title.jpeg +0 -0
  134. data/web/stylesheets/default.css +20 -0
  135. metadata +192 -0
@@ -0,0 +1,58 @@
1
+ class String
2
+ def starts_with(str)
3
+ self[0, str.length] == str
4
+ end
5
+
6
+ def ends_with(str)
7
+ self[-str.length, str.length] == str
8
+ end
9
+
10
+ def expand_tabs(tab_stop=8)
11
+ self.gsub(/([^\t]{#{tab_stop}})|([^\t]*)\t/n) {
12
+ [$+].pack("A#{tab_stop}") }
13
+ end
14
+
15
+ def expand_tabs!(tab_stop=8)
16
+ self.gsub!(/([^\t]{#{tab_stop}})|([^\t]*)\t/n) {
17
+ [$+].pack("A#{tab_stop}") }
18
+ end
19
+
20
+ def eval_backspace(bs="\b")
21
+ self.gsub(/([^#{bs}]*)(#{bs}+)/n) { $1[0, $1.length-$2.length] }
22
+ end
23
+
24
+ def eval_backspace!(bs="\b")
25
+ self.gsub!(/([^#{bs}]*)(#{bs}+)/n){ $1[0, $1.length-$2.length] }
26
+ end
27
+
28
+ def cap_first
29
+ return "" if self.length < 1
30
+ self[0,1].upcase + self[1, self.length-1]
31
+ end
32
+
33
+ def downcase_first
34
+ return "" if self.length < 1
35
+ self[0,1].downcase + self[1, self.length-1]
36
+ end
37
+
38
+ def ^(other)
39
+ res = self.dup
40
+ 0.upto([self.length, other.length].min - 1) { |i|
41
+ res[i] ^= other[i]
42
+ }
43
+ res
44
+ end
45
+
46
+ def xor!(mask_str)
47
+ 0.upto([self.length, mask_str.length].min - 1) { |i|
48
+ self[i] ^= mask_str[i]
49
+ }
50
+ self
51
+ end
52
+
53
+ def bits_to_i
54
+ res = 0
55
+ self.each_byte { |b| res = (res << 8) + b }
56
+ res
57
+ end
58
+ end
@@ -0,0 +1,155 @@
1
+ require 'observer'
2
+ #require 'irb/frame'
3
+
4
+ class PMethName
5
+
6
+ # Is +name+ the name of a method that usually changes the object?
7
+ def self.obj_changer?(name)
8
+ name[-1,1] == "!" ||
9
+ (name.length > 1 && name[-1,1] == "=" &&
10
+ !["=", ">", "<", "+", "-", "*", "/"].member?(name[-2,1])) ||
11
+ name == "<<"
12
+ end
13
+
14
+ end
15
+
16
+ # If the only way to change a string is through the built-in string changing
17
+ # functions, we don't need to be so dynamic.
18
+
19
+ class String
20
+ include Observable
21
+
22
+ alias_method :__add_observer_o__, :add_observer
23
+
24
+ def wrap_changer_meth(id)
25
+ # if method wrapped in self's anonymous class:
26
+ if self.respond_to?("__pso_#{id.to_i}_o__")
27
+ return
28
+ end
29
+ eval <<-"end_eval"
30
+ class <<self
31
+ def #{id.id2name}(*args, &block)
32
+ tc = Thread::critical=(true)
33
+ begin
34
+ res= super(*args,&block)
35
+ ensure
36
+ Thread::critical = tc
37
+ end
38
+ self.changed(true)
39
+ self.notify_observers(self,
40
+ #{id.id2name.inspect}, args,
41
+ block)
42
+ res
43
+ end
44
+ end
45
+ end_eval
46
+ end
47
+
48
+ def add_observer(obj)
49
+ tc = Thread::critical=(true)
50
+ if !self.respond_to?(:__add_observer_o__)
51
+ Thread::critical = tc
52
+ return self.add_observer(obj)
53
+ end
54
+ class <<self
55
+ @@__pso_adding_meth__ = false
56
+ alias_method :add_observer, :__add_observer_o__
57
+ private :__add_observer_o__
58
+ # if self.public_instance_methods.member? "extend_object"
59
+ # alias_method :__pso_extend_object_o__,
60
+ # :extend_object unless
61
+ # respond_to? :__pso_extend_object_o__
62
+ # def self.extend_object(id)
63
+ # Thread::critical =
64
+ # (tc = Thread::critical) || true
65
+ # if PMethName::obj_changer?(id.id2name)&&
66
+ # !@@__pso_adding_meth__
67
+ # @@__pso_adding_meth__ = true
68
+ # module_eval <<-"end_eval"
69
+ # alias_method :__pso_#{id.to_i}_o__,
70
+ # #{id.inspect}
71
+ # def #{id.id2name}(*args, &block)
72
+ # Thread::critical =
73
+ # (tc = Thread::critical) || true
74
+ # begin
75
+ # res = __pso_#{id.to_i}_o__(
76
+ # *args, &block)
77
+ # ensure
78
+ # Thread::critical = tc
79
+ # end
80
+ # self.changed(true)
81
+ # self.notify_observers(self,
82
+ # #{id.id2name.inspect},
83
+ # args, block)
84
+ # res
85
+ # end
86
+ # end_eval
87
+ # @@__pso_adding_meth__ = false
88
+ # end
89
+ # Thread::critical = tc
90
+ # __pso_method_added_o__(id)
91
+ # end
92
+ # else
93
+ # def self.extend_object(id)
94
+ # Thread::critical =
95
+ # (tc = Thread::critical) || true
96
+ # if PMethName::obj_changer?(id.id2name)&&
97
+ # !@@__pso_adding_meth__
98
+ # @@__pso_adding_meth__ = true
99
+ # module_eval <<-"end_eval"
100
+ # alias_method :__pso_#{id.to_i}_o__,
101
+ # #{id.inspect}
102
+ # def #{id.id2name}(*args, &block)
103
+ # Thread::critical =
104
+ # (tc = Thread::critical) || true
105
+ # begin
106
+ # res = __pso_#{id.to_i}_o__(
107
+ # *args, &block)
108
+ # ensure
109
+ # Thread::critical = tc
110
+ # end
111
+ # self.changed(true)
112
+ # self.notify_observers(self,
113
+ # #{id.id2name.inspect},
114
+ # args, block)
115
+ # res
116
+ # end
117
+ # end_eval
118
+ # @@__pso_adding_meth__ = false
119
+ # end
120
+ # Thread::critical = tc
121
+ # end
122
+ # end
123
+ end
124
+ for m in self.methods.delete_if{|m| !PMethName::obj_changer?(m)}
125
+ self.wrap_changer_meth(m.to_sym)
126
+ end
127
+ Thread::critical = tc
128
+ self.add_observer(obj)
129
+ end
130
+
131
+ # if respond_to? :method_added
132
+ # alias_method :__pso_m_method_added_o__, :method_added unless
133
+ # respond_to? :__pso_m_method_added_o__
134
+ # def self.method_added(id)
135
+ # if PMethName.obj_changer?(id.id2name)
136
+ # ObjectSpace.each_object(self) { |o|
137
+ # if !o.respond_to? :__add_observer_o__
138
+ # o.wrap_changer_meth(id)
139
+ # end
140
+ # }
141
+ # end
142
+ # self.__pso_m_method_added_o__(id)
143
+ # end
144
+ # else
145
+ # def self.method_added(id)
146
+ # if PMethName.obj_changer?(id.id2name)
147
+ # ObjectSpace.each_object(self) { |o|
148
+ # if !o.respond_to? :__add_observer_o__
149
+ # o.wrap_changer_meth(id)
150
+ # end
151
+ # }
152
+ # end
153
+ # end
154
+ # end
155
+ end
@@ -0,0 +1,79 @@
1
+ require 'pav/string/ext'
2
+ require 'pav/string/observable'
3
+
4
+ class StringLns
5
+ attr_reader :ln_start_idxs, :str
6
+
7
+ include Enumerable
8
+
9
+ def initialize(str)
10
+ @str = str
11
+ @ln_start_idxs = []
12
+ i = 0
13
+ str.each_line { |ln|
14
+ @ln_start_idxs << i
15
+ i += ln.length
16
+ }
17
+ @ln_start_idxs << i
18
+ end
19
+
20
+ def [](*args)
21
+ if args.length == 1
22
+ is = args
23
+ elsif args.length == 2
24
+ is = args[0]..args[0]+args[1]-1
25
+ else
26
+ raise ArgumentError, "Unknown number of arguments"
27
+ end
28
+ res = is.collect{ |i|
29
+ if i < 0
30
+ if i <= -@ln_start_idxs.length
31
+ nil
32
+ else
33
+ @str[@ln_start_idxs[i-1]...
34
+ @ln_start_idxs[i]]
35
+ end
36
+ else
37
+ if i+1 >= @ln_start_idxs.length
38
+ nil
39
+ else
40
+ @str[@ln_start_idxs[i]...
41
+ @ln_start_idxs[i+1]]
42
+ end
43
+ end
44
+ }
45
+ if args.length == 1 && args[0].kind_of?(Numeric) then res[0]
46
+ else res end
47
+ end
48
+
49
+ def each
50
+ [0..@ln_start_idxs-1].each { |i|
51
+ yield @str[@ln_start_idxs[i]..@ln_start_idxs[i+1]]
52
+ }
53
+ end
54
+
55
+ def length
56
+ @ln_start_idxs.length - 1
57
+ end
58
+ end
59
+
60
+ class StringLnsObserver
61
+ def self.update(str, meth, args, block)
62
+ str.kill_lns
63
+ end
64
+ end
65
+
66
+ class String
67
+ def lns
68
+ self.add_observer(StringLnsObserver)
69
+ def lns
70
+ @lns = StringLns.new(self) unless @lns
71
+ @lns
72
+ end
73
+ self.lns
74
+ end
75
+
76
+ def kill_lns
77
+ @lns = nil
78
+ end
79
+ end
@@ -0,0 +1,42 @@
1
+ require 'pav/string/ext'
2
+
3
+ class String
4
+ PLURAL_ES = %w[tomatoes potatoes branches ses zes xes]
5
+ PLURAL_EN = %w[oxen]
6
+ PLURAL_VES_F = %w[dwarves shelves elves]
7
+ PLURAL_VES_FE = %w[lives knives]
8
+ PLURAL_ICES_EX = %w[indices vertices vortices]
9
+
10
+ PLURAL_TRANSFORMS = self.constants.find_all { |c|
11
+ c.starts_with("PLURAL_") }.collect { |c|
12
+ to, from = *c["PLURAL_".length...c.length].split("_")
13
+ to.downcase!
14
+ if from then from.downcase! else from = ""; end
15
+ [to, from, self.const_get(c)]
16
+ }
17
+ SINGULAR_TRANSFORMS = PLURAL_TRANSFORMS.collect { |pl_t|
18
+ [pl_t[1], pl_t[0], pl_t[2].collect{|w| w[0,w.length-pl_t[0].length].
19
+ concat(pl_t[1])}]
20
+ }
21
+
22
+ def singular
23
+ dn_case = self.downcase
24
+ PLURAL_TRANSFORMS.each { |t| t[2].each { |word|
25
+ return self[0, self.length-t[0].length].concat(t[1]) if
26
+ dn_case.ends_with(word)
27
+ }}
28
+ if dn_case.ends_with("s")
29
+ return self[0, self.length-1]
30
+ end
31
+ self.dup
32
+ end
33
+
34
+ def plural
35
+ dn_case = self.downcase
36
+ SINGULAR_TRANSFORMS.each { |t| t[2].each { |word|
37
+ return self[0, self.length-t[0].length].concat(t[1]) if
38
+ dn_case.ends_with(word)
39
+ }}
40
+ self + "s"
41
+ end
42
+ end
@@ -0,0 +1,56 @@
1
+ require 'pav/dbg_log'
2
+ require 'pav/numeric/ext'
3
+ require 'pav/rand_accessible'
4
+
5
+ class SubArr
6
+ include RandomlyReadable
7
+ include Enumerable
8
+
9
+ attr_reader :arr
10
+ attr_accessor :start_i, :end_i
11
+
12
+ def initialize(arr, start_i=0, end_i=nil)
13
+ @arr = arr
14
+ @start_i = start_i
15
+ @end_i = end_i ? end_i : @arr.length
16
+ end
17
+
18
+ def at(i)
19
+ i = self.length + i if i < 0
20
+ i += @start_i
21
+ return nil if i < @start_i || i >= @end_i
22
+ @arr.at(i % @arr.length)
23
+ end
24
+
25
+ def length
26
+ end_i - start_i
27
+ end
28
+
29
+ def empty?
30
+ self.length < 1
31
+ end
32
+
33
+ def first
34
+ self.at(0)
35
+ end
36
+
37
+ def each
38
+ return if @arr.empty?
39
+ for i in @start_i...@end_i
40
+ yield(@arr.at(i % @arr.length))
41
+ end
42
+ end
43
+
44
+ def to_a
45
+ res = Array.new(self.length)
46
+ self.each_with_index { |lm, i| res[i] = lm }
47
+ res
48
+ end
49
+
50
+ def to_s(expand_arr=false)
51
+ "<#{self.class.name}:#{self.object_id.mem_hex} @start_i=#{
52
+ @start_i}, @end_i=#{end_i} @arr: #{expand_arr&&expand_arr!=0 ?
53
+ @arr.inspect : @arr.length.to_s + " element" +
54
+ (@arr.length==1 ? "" : "s")}>"
55
+ end
56
+ end
@@ -0,0 +1,79 @@
1
+ require 'pav/dbg_log'
2
+
3
+ class TracedObj
4
+ attr_reader :__to_filters__, :__to_obj__
5
+ attr_accessor :__to_processor__
6
+
7
+ def initialize(obj, excl_meths=[])
8
+ @__to_obj__ = obj
9
+ if excl_meths && !excl_meths.empty?
10
+ @__to_filters__ = [ proc { |obj, id, args, block|
11
+ !excl_meths.include?(id) } ]
12
+ else
13
+ @__to_filters__ = []
14
+ end
15
+ @__to_processor__ = proc { |obj, id, args, block|
16
+ $PDbgLog.sig_call(self)
17
+ $PDbgLog.puts_msg "#{obj.class.name}#{(
18
+ obj.kind_of?(Class) || obj.kind_of?(Module)) ? "#" :
19
+ "."}#{id}(#{args.collect {|a| a.inspect}.join(", ")
20
+ }) #{caller(2).join("\n")}"
21
+ res = obj.send(id, *args, &block)
22
+ $PDbgLog.sig_return(res.inspect)
23
+ res
24
+ }
25
+ end
26
+
27
+ def method_missing(id, *args, &block)
28
+ for filt in @__to_filters__
29
+ return @__to_obj__.send(id, *args, &block) unless
30
+ filt.call(@__to_obj__, id, args, block)
31
+ end
32
+ @__to_processor__.call(@__to_obj__, id, args, block)
33
+ end
34
+
35
+ def __to_add_filter__(block=Proc.new)
36
+ if block
37
+ @__to_filters__.push(block)
38
+ @__to_filters__.length-1
39
+ else
40
+ nil
41
+ end
42
+ end
43
+
44
+ def to_s(*args, &block)
45
+ id = "to_s"
46
+ for filt in @__to_filters__
47
+ return @__to_obj__.send(id, *args, &block) unless
48
+ filt.call(@__to_obj__, id, args, block)
49
+ end
50
+ @__to_processor__.call(@__to_obj__, id, args, block)
51
+ end
52
+
53
+ def to_a(*args, &block)
54
+ id = "to_a"
55
+ for filt in @__to_filters__
56
+ return @__to_obj__.send(id, *args, &block) unless
57
+ filt.call(@__to_obj__, id, args, block)
58
+ end
59
+ @__to_processor__.call(@__to_obj__, id, args, block)
60
+ end
61
+
62
+ def inspect(*args, &block)
63
+ id = "inspect"
64
+ for filt in @__to_filters__
65
+ return @__to_obj__.send(id, *args, &block) unless
66
+ filt.call(@__to_obj__, id, args, block)
67
+ end
68
+ @__to_processor__.call(@__to_obj__, id, args, block)
69
+ end
70
+
71
+ def hash(*args, &block)
72
+ id = "hash"
73
+ for filt in @__to_filters__
74
+ return @__to_obj__.send(id, *args, &block) unless
75
+ filt.call(@__to_obj__, id, args, block)
76
+ end
77
+ @__to_processor__.call(@__to_obj__, id, args, block)
78
+ end
79
+ end