carats 0.3.0

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.
Files changed (422) hide show
  1. data/ChangeLog +2 -0
  2. data/LICENSE +5 -0
  3. data/README +67 -0
  4. data/Reapfile +72 -0
  5. data/ToDo +24 -0
  6. data/bench/b_harray.rb +49 -0
  7. data/bench/b_range.rb +64 -0
  8. data/demo/ansicolor/cdiff.rb +20 -0
  9. data/demo/ansicolor/example.rb +82 -0
  10. data/demo/io-reactor/chatserver.rb +347 -0
  11. data/doc/classes/Array.html +172 -0
  12. data/doc/classes/BBCode.html +638 -0
  13. data/doc/classes/BinaryReader.html +675 -0
  14. data/doc/classes/Binding.html +223 -0
  15. data/doc/classes/ByteOrder.html +284 -0
  16. data/doc/classes/Class.html +189 -0
  17. data/doc/classes/Constant.html +785 -0
  18. data/doc/classes/Constant/CGS.html +609 -0
  19. data/doc/classes/Continuation.html +113 -0
  20. data/doc/classes/Coroutine.html +387 -0
  21. data/doc/classes/CountingSemaphore.html +337 -0
  22. data/doc/classes/CrossCase.html +561 -0
  23. data/doc/classes/DynamicMixin.html +185 -0
  24. data/doc/classes/EnumerableWithArgs.html +550 -0
  25. data/doc/classes/Expect.html +428 -0
  26. data/doc/classes/Expect/DefaultChain.html +113 -0
  27. data/doc/classes/Expect/SeparatedPattern.html +223 -0
  28. data/doc/classes/Expect/Timeout.html +167 -0
  29. data/doc/classes/Expect/UnmatchedMessage.html +160 -0
  30. data/doc/classes/FileList.html +833 -0
  31. data/doc/classes/FloatString.html +534 -0
  32. data/doc/classes/Functor.html +211 -0
  33. data/doc/classes/HArray.html +1872 -0
  34. data/doc/classes/HTML.html +328 -0
  35. data/doc/classes/Heap.html +683 -0
  36. data/doc/classes/Heap/EmptyHeapException.html +111 -0
  37. data/doc/classes/Heap/Max.html +176 -0
  38. data/doc/classes/Heap/Min.html +176 -0
  39. data/doc/classes/IO.html +108 -0
  40. data/doc/classes/IO/Reactor.html +790 -0
  41. data/doc/classes/IO/Redirect.html +289 -0
  42. data/doc/classes/Infinity.html +320 -0
  43. data/doc/classes/Interval.html +1014 -0
  44. data/doc/classes/InvalidNackError.html +161 -0
  45. data/doc/classes/Kernel.html +204 -0
  46. data/doc/classes/Lisp.html +1132 -0
  47. data/doc/classes/Lisp/DottedPair.html +379 -0
  48. data/doc/classes/Lisp/Format.html +178 -0
  49. data/doc/classes/Lisp/Format/ArgumentError.html +126 -0
  50. data/doc/classes/Lisp/Format/Directives.html +155 -0
  51. data/doc/classes/Lisp/Format/Directives/ArgJump.html +178 -0
  52. data/doc/classes/Lisp/Format/Directives/Ascii.html +119 -0
  53. data/doc/classes/Lisp/Format/Directives/BeginCaseConversion.html +185 -0
  54. data/doc/classes/Lisp/Format/Directives/BeginConditional.html +307 -0
  55. data/doc/classes/Lisp/Format/Directives/BeginIteration.html +338 -0
  56. data/doc/classes/Lisp/Format/Directives/Binary.html +157 -0
  57. data/doc/classes/Lisp/Format/Directives/Character.html +228 -0
  58. data/doc/classes/Lisp/Format/Directives/CharacterDirective.html +203 -0
  59. data/doc/classes/Lisp/Format/Directives/ClauseSeparator.html +166 -0
  60. data/doc/classes/Lisp/Format/Directives/Decimal.html +119 -0
  61. data/doc/classes/Lisp/Format/Directives/Directive.html +397 -0
  62. data/doc/classes/Lisp/Format/Directives/DollarFP.html +205 -0
  63. data/doc/classes/Lisp/Format/Directives/EndCaseConversion.html +174 -0
  64. data/doc/classes/Lisp/Format/Directives/EndConditional.html +159 -0
  65. data/doc/classes/Lisp/Format/Directives/EndIteration.html +163 -0
  66. data/doc/classes/Lisp/Format/Directives/ExpFP.html +252 -0
  67. data/doc/classes/Lisp/Format/Directives/FFFP.html +224 -0
  68. data/doc/classes/Lisp/Format/Directives/Factory.html +180 -0
  69. data/doc/classes/Lisp/Format/Directives/FreshLine.html +175 -0
  70. data/doc/classes/Lisp/Format/Directives/GeneralFP.html +265 -0
  71. data/doc/classes/Lisp/Format/Directives/Hexadecimal.html +157 -0
  72. data/doc/classes/Lisp/Format/Directives/Indirection.html +183 -0
  73. data/doc/classes/Lisp/Format/Directives/Literal.html +187 -0
  74. data/doc/classes/Lisp/Format/Directives/NewLine.html +158 -0
  75. data/doc/classes/Lisp/Format/Directives/NewPage.html +158 -0
  76. data/doc/classes/Lisp/Format/Directives/Number.html +243 -0
  77. data/doc/classes/Lisp/Format/Directives/Octal.html +157 -0
  78. data/doc/classes/Lisp/Format/Directives/Plural.html +177 -0
  79. data/doc/classes/Lisp/Format/Directives/Print.html +237 -0
  80. data/doc/classes/Lisp/Format/Directives/Radix.html +432 -0
  81. data/doc/classes/Lisp/Format/Directives/SExpression.html +157 -0
  82. data/doc/classes/Lisp/Format/Directives/SkipWhitespace.html +165 -0
  83. data/doc/classes/Lisp/Format/Directives/Tabulate.html +198 -0
  84. data/doc/classes/Lisp/Format/Directives/Tilde.html +158 -0
  85. data/doc/classes/Lisp/Format/Directives/UnknownDirectiveError.html +117 -0
  86. data/doc/classes/Lisp/Format/Formatter.html +193 -0
  87. data/doc/classes/Lisp/Format/IncompleteParameterError.html +119 -0
  88. data/doc/classes/Lisp/Format/IndexError.html +126 -0
  89. data/doc/classes/Lisp/Format/Lexer.html +479 -0
  90. data/doc/classes/Lisp/Format/MalformedError.html +119 -0
  91. data/doc/classes/Lisp/Format/MissingParameterError.html +119 -0
  92. data/doc/classes/Lisp/Format/ModifierError.html +119 -0
  93. data/doc/classes/Lisp/Format/Output.html +239 -0
  94. data/doc/classes/Lisp/Format/ParameterError.html +126 -0
  95. data/doc/classes/Lisp/Format/Parameters.html +123 -0
  96. data/doc/classes/Lisp/Format/Parameters/Argument.html +172 -0
  97. data/doc/classes/Lisp/Format/Parameters/ArgumentCount.html +159 -0
  98. data/doc/classes/Lisp/Format/Parameters/Character.html +119 -0
  99. data/doc/classes/Lisp/Format/Parameters/Default.html +120 -0
  100. data/doc/classes/Lisp/Format/Parameters/Integer.html +119 -0
  101. data/doc/classes/Lisp/Format/Parameters/Parameter.html +206 -0
  102. data/doc/classes/Lisp/Format/Parser.html +212 -0
  103. data/doc/classes/Lisp/Format/Positioned.html +166 -0
  104. data/doc/classes/Lisp/Format/State.html +455 -0
  105. data/doc/classes/Lisp/Format/SyntaxError.html +126 -0
  106. data/doc/classes/Method.html +274 -0
  107. data/doc/classes/Method/DuckHunter.html +281 -0
  108. data/doc/classes/Module.html +709 -0
  109. data/doc/classes/Multiton.html +284 -0
  110. data/doc/classes/Multiton/New.html +164 -0
  111. data/doc/classes/Multiton/Semi.html +155 -0
  112. data/doc/classes/NackClass.html +322 -0
  113. data/doc/classes/NilClass.html +231 -0
  114. data/doc/classes/NilComparable.html +179 -0
  115. data/doc/classes/NotCopyable.html +273 -0
  116. data/doc/classes/Object.html +261 -0
  117. data/doc/classes/OpenStructable.html +346 -0
  118. data/doc/classes/OrderedHash.html +939 -0
  119. data/doc/classes/Parser.html +515 -0
  120. data/doc/classes/Parser/Main.html +178 -0
  121. data/doc/classes/Parser/Marker.html +475 -0
  122. data/doc/classes/Parser/Registry.html +354 -0
  123. data/doc/classes/Parser/Token.html +399 -0
  124. data/doc/classes/Parser/UnitToken.html +222 -0
  125. data/doc/classes/Ref.html +230 -0
  126. data/doc/classes/SimpleStringIO.html +183 -0
  127. data/doc/classes/StaticHash.html +202 -0
  128. data/doc/classes/String.html +172 -0
  129. data/doc/classes/Struct.html +181 -0
  130. data/doc/classes/SuperStruct.html +382 -0
  131. data/doc/classes/Term.html +156 -0
  132. data/doc/classes/Term/ANSIColor.html +185 -0
  133. data/doc/classes/Text.html +138 -0
  134. data/doc/classes/Text/Soundex.html +222 -0
  135. data/doc/classes/TextTagIterator.html +911 -0
  136. data/doc/classes/Time.html +119 -0
  137. data/doc/classes/Time/Limit.html +303 -0
  138. data/doc/classes/Time/Limit/Dummy.html +181 -0
  139. data/doc/classes/Timer.html +351 -0
  140. data/doc/classes/TracePoint.html +532 -0
  141. data/doc/classes/Tuple.html +178 -0
  142. data/doc/classes/Uninheritable.html +213 -0
  143. data/doc/classes/Version.html +783 -0
  144. data/doc/created.rid +1 -0
  145. data/doc/files/LICENSE.html +113 -0
  146. data/doc/files/README.html +201 -0
  147. data/doc/files/lib/carat/1st_rb.html +107 -0
  148. data/doc/files/lib/carat/ansicolor_rb.html +146 -0
  149. data/doc/files/lib/carat/attr_rb.html +101 -0
  150. data/doc/files/lib/carat/bbcode_rb.html +152 -0
  151. data/doc/files/lib/carat/binaryreader_rb.html +114 -0
  152. data/doc/files/lib/carat/binding-of-caller_rb.html +108 -0
  153. data/doc/files/lib/carat/byteorder_rb.html +107 -0
  154. data/doc/files/lib/carat/constant_rb.html +167 -0
  155. data/doc/files/lib/carat/coroutine_rb.html +156 -0
  156. data/doc/files/lib/carat/crosscase_rb.html +224 -0
  157. data/doc/files/lib/carat/duckhunter_rb.html +165 -0
  158. data/doc/files/lib/carat/dynamic-mixin_rb.html +101 -0
  159. data/doc/files/lib/carat/enumerable-args_rb.html +140 -0
  160. data/doc/files/lib/carat/expect_rb.html +137 -0
  161. data/doc/files/lib/carat/filelist_rb.html +130 -0
  162. data/doc/files/lib/carat/floatstring_rb.html +126 -0
  163. data/doc/files/lib/carat/functor_rb.html +140 -0
  164. data/doc/files/lib/carat/harray_rb.html +128 -0
  165. data/doc/files/lib/carat/heap_rb.html +154 -0
  166. data/doc/files/lib/carat/html-helpers_rb.html +116 -0
  167. data/doc/files/lib/carat/infinity_rb.html +142 -0
  168. data/doc/files/lib/carat/init_rb.html +127 -0
  169. data/doc/files/lib/carat/interval_rb.html +162 -0
  170. data/doc/files/lib/carat/io-reactor_rb.html +211 -0
  171. data/doc/files/lib/carat/io-redirect_rb.html +132 -0
  172. data/doc/files/lib/carat/lisp-format_rb.html +187 -0
  173. data/doc/files/lib/carat/lisp_rb.html +152 -0
  174. data/doc/files/lib/carat/macro_rb.html +129 -0
  175. data/doc/files/lib/carat/multiton_rb.html +178 -0
  176. data/doc/files/lib/carat/nack_rb.html +193 -0
  177. data/doc/files/lib/carat/nil-comparable_rb.html +126 -0
  178. data/doc/files/lib/carat/nil-missing_rb.html +101 -0
  179. data/doc/files/lib/carat/notcopyable_rb.html +166 -0
  180. data/doc/files/lib/carat/orderedhash_rb.html +107 -0
  181. data/doc/files/lib/carat/ostructable_rb.html +157 -0
  182. data/doc/files/lib/carat/parser-old_rb.html +239 -0
  183. data/doc/files/lib/carat/parser_rb.html +244 -0
  184. data/doc/files/lib/carat/ref_rb.html +107 -0
  185. data/doc/files/lib/carat/semaphore_rb.html +132 -0
  186. data/doc/files/lib/carat/snapshot_rb.html +152 -0
  187. data/doc/files/lib/carat/soundex_rb.html +128 -0
  188. data/doc/files/lib/carat/sstruct_rb.html +142 -0
  189. data/doc/files/lib/carat/statichash_rb.html +150 -0
  190. data/doc/files/lib/carat/tagiter_rb.html +236 -0
  191. data/doc/files/lib/carat/timelimit_rb.html +136 -0
  192. data/doc/files/lib/carat/timer_rb.html +153 -0
  193. data/doc/files/lib/carat/tracepoint_rb.html +160 -0
  194. data/doc/files/lib/carat/tuple_rb.html +123 -0
  195. data/doc/files/lib/carat/uninheritable_rb.html +101 -0
  196. data/doc/files/lib/carat/version_rb.html +141 -0
  197. data/doc/fr_class_index.html +159 -0
  198. data/doc/fr_file_index.html +78 -0
  199. data/doc/fr_method_index.html +663 -0
  200. data/doc/index.html +24 -0
  201. data/doc/rdoc-style.css +208 -0
  202. data/lib/carat-dev/README +11 -0
  203. data/lib/carat-dev/access-blocks/access_blocks.rb +42 -0
  204. data/lib/carat-dev/association/association.rb +70 -0
  205. data/lib/carat-dev/blankslate/blankslate.rb +51 -0
  206. data/lib/carat-dev/breakpoint.rb +518 -0
  207. data/lib/carat-dev/class-constructor/constructor_methods.rb +78 -0
  208. data/lib/carat-dev/class-constructor/tc_constructor.rb +35 -0
  209. data/lib/carat-dev/closecall/closecall-test.rb +39 -0
  210. data/lib/carat-dev/closecall/closecall.rb +101 -0
  211. data/lib/carat-dev/commandrunner/commandrunner.rb +100 -0
  212. data/lib/carat-dev/conditional/conditionals.rb +106 -0
  213. data/lib/carat-dev/daemon/daemon.rb +70 -0
  214. data/lib/carat-dev/detach/detach.rb +363 -0
  215. data/lib/carat-dev/detach/tc_detach.rb +57 -0
  216. data/lib/carat-dev/import-module/import-module-0.81.tar.gz +0 -0
  217. data/lib/carat-dev/import-module/import-module-0.81/LICENSE +1 -0
  218. data/lib/carat-dev/import-module/import-module-0.81/Makefile +11 -0
  219. data/lib/carat-dev/import-module/import-module-0.81/README +4 -0
  220. data/lib/carat-dev/import-module/import-module-0.81/dev-lib/import-module-hash.rb +49 -0
  221. data/lib/carat-dev/import-module/import-module-0.81/dev-lib/import-module-pip.rb +71 -0
  222. data/lib/carat-dev/import-module/import-module-0.81/dev-lib/import-module-unbound-method.rb +36 -0
  223. data/lib/carat-dev/import-module/import-module-0.81/doc/README-ja.html +293 -0
  224. data/lib/carat-dev/import-module/import-module-0.81/doc/README-ja.rd +306 -0
  225. data/lib/carat-dev/import-module/import-module-0.81/doc/README.html +290 -0
  226. data/lib/carat-dev/import-module/import-module-0.81/doc/README.rd +303 -0
  227. data/lib/carat-dev/import-module/import-module-0.81/doc/style.css +85 -0
  228. data/lib/carat-dev/import-module/import-module-0.81/install.rb +99 -0
  229. data/lib/carat-dev/import-module/import-module-0.81/lib/import-module-single-thread.rb +84 -0
  230. data/lib/carat-dev/import-module/import-module-0.81/lib/import-module.rb +493 -0
  231. data/lib/carat-dev/import-module/import-module-0.81/test/Makefile +2 -0
  232. data/lib/carat-dev/import-module/import-module-0.81/test/test +91 -0
  233. data/lib/carat-dev/import-module/import-module-0.81/test/test-import-module.rb +936 -0
  234. data/lib/carat-dev/import-module/import-module-0.81/test/test-import_scope.rb +33 -0
  235. data/lib/carat-dev/import-module/import-module-0.81/test/test-scope_import.rb +33 -0
  236. data/lib/carat-dev/import-module/import-module-0.81/test/test-time.rb +184 -0
  237. data/lib/carat-dev/import-module/import-module-0.81/test/test.sh +91 -0
  238. data/lib/carat-dev/import-module/import-module-0.81/test/time.rb +135 -0
  239. data/lib/carat-dev/import-module/import-module-0.81/test/times-do.sh +10 -0
  240. data/lib/carat-dev/interface_work/SCRAP/i-contracts.rb +37 -0
  241. data/lib/carat-dev/interface_work/SCRAP/interface.rb +105 -0
  242. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0.zip +0 -0
  243. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/CHANGES +3 -0
  244. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/MANIFEST +15 -0
  245. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/README +32 -0
  246. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/doc/interface.rd +73 -0
  247. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/doc/interface.txt +94 -0
  248. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/install.rb +16 -0
  249. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/lib/interface.rb +50 -0
  250. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/tc_interface.rb +51 -0
  251. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/test.rb +29 -0
  252. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/test_instance.rb +24 -0
  253. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/test_sub.rb +29 -0
  254. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/test_unrequire.rb +28 -0
  255. data/lib/carat-dev/interface_work/contracts/contract.zip +0 -0
  256. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.html +376 -0
  257. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000001.html +23 -0
  258. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000002.html +18 -0
  259. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000003.html +19 -0
  260. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000004.html +29 -0
  261. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000005.html +18 -0
  262. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000006.html +18 -0
  263. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract/ContractError.html +142 -0
  264. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract/ContractException.html +153 -0
  265. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract/ContractMismatch.html +125 -0
  266. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Module.html +157 -0
  267. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Module.src/M000007.html +112 -0
  268. data/lib/carat-dev/interface_work/contracts/contract/doc/created.rid +1 -0
  269. data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract/assertions_rb.html +109 -0
  270. data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract/exception_rb.html +108 -0
  271. data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract/integration_rb.html +108 -0
  272. data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract/overrides_rb.html +109 -0
  273. data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract_rb.html +114 -0
  274. data/lib/carat-dev/interface_work/contracts/contract/doc/fr_class_index.html +31 -0
  275. data/lib/carat-dev/interface_work/contracts/contract/doc/fr_file_index.html +31 -0
  276. data/lib/carat-dev/interface_work/contracts/contract/doc/fr_method_index.html +33 -0
  277. data/lib/carat-dev/interface_work/contracts/contract/doc/index.html +24 -0
  278. data/lib/carat-dev/interface_work/contracts/contract/doc/rdoc-style.css +208 -0
  279. data/lib/carat-dev/interface_work/contracts/contract/lib/contract.rb +88 -0
  280. data/lib/carat-dev/interface_work/contracts/contract/lib/contract/assertions.rb +37 -0
  281. data/lib/carat-dev/interface_work/contracts/contract/lib/contract/exception.rb +92 -0
  282. data/lib/carat-dev/interface_work/contracts/contract/lib/contract/integration.rb +132 -0
  283. data/lib/carat-dev/interface_work/contracts/contract/lib/contract/overrides.rb +32 -0
  284. data/lib/carat-dev/interface_work/must.rb +37 -0
  285. data/lib/carat-dev/interface_work/type.rb +232 -0
  286. data/lib/carat-dev/main/tc_toplevel.rb +23 -0
  287. data/lib/carat-dev/main/toplevel.rb +33 -0
  288. data/lib/carat-dev/main/toplevel_test.rb +24 -0
  289. data/lib/carat-dev/misc/1.rb +40 -0
  290. data/lib/carat-dev/misc/misc.rb +44 -0
  291. data/lib/carat-dev/misc/sys.rb +186 -0
  292. data/lib/carat-dev/misc/temp.rb +1 -0
  293. data/lib/carat-dev/misc/utils.rb +518 -0
  294. data/lib/carat-dev/predicate/predicate.rb +109 -0
  295. data/lib/carat-dev/predicate/predicate_test.rb +67 -0
  296. data/lib/carat-dev/premshree.rb +40 -0
  297. data/lib/carat-dev/priority-queue/pqueue.rb +183 -0
  298. data/lib/carat-dev/priority-queue/priorityqueue.rb +84 -0
  299. data/lib/carat-dev/quaternion/quaternion.rb +529 -0
  300. data/lib/carat-dev/range.rb +259 -0
  301. data/lib/carat-dev/system/rubyinfo.rb +75 -0
  302. data/lib/carat-dev/system/system.rb +105 -0
  303. data/lib/carat-dev/tc_range.rb +118 -0
  304. data/lib/carat-dev/timer/timer-doc/classes/Timer.html +291 -0
  305. data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000001.html +26 -0
  306. data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000002.html +19 -0
  307. data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000003.html +18 -0
  308. data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000004.html +18 -0
  309. data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000005.html +21 -0
  310. data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000006.html +23 -0
  311. data/lib/carat-dev/timer/timer-doc/created.rid +1 -0
  312. data/lib/carat-dev/timer/timer-doc/files/timer_rb.html +144 -0
  313. data/lib/carat-dev/timer/timer-doc/fr_class_index.html +27 -0
  314. data/lib/carat-dev/timer/timer-doc/fr_file_index.html +27 -0
  315. data/lib/carat-dev/timer/timer-doc/fr_method_index.html +32 -0
  316. data/lib/carat-dev/timer/timer-doc/index.html +24 -0
  317. data/lib/carat-dev/timer/timer-doc/rdoc-style.css +208 -0
  318. data/lib/carat-dev/timer/timer.rb +160 -0
  319. data/lib/carat-dev/vars/vars.rb +62 -0
  320. data/lib/carat/1st.rb +58 -0
  321. data/lib/carat/ansicolor.rb +122 -0
  322. data/lib/carat/attr.rb +342 -0
  323. data/lib/carat/bbcode.rb +352 -0
  324. data/lib/carat/binaryreader.rb +170 -0
  325. data/lib/carat/binding-of-caller.rb +83 -0
  326. data/lib/carat/byteorder.rb +34 -0
  327. data/lib/carat/constant.rb +287 -0
  328. data/lib/carat/coroutine.rb +102 -0
  329. data/lib/carat/crosscase.rb +309 -0
  330. data/lib/carat/duckhunter.rb +158 -0
  331. data/lib/carat/dynamic-mixin.rb +71 -0
  332. data/lib/carat/enumerable-args.rb +125 -0
  333. data/lib/carat/expect.rb +192 -0
  334. data/lib/carat/filelist.rb +277 -0
  335. data/lib/carat/floatstring.rb +153 -0
  336. data/lib/carat/functor.rb +41 -0
  337. data/lib/carat/harray.rb +507 -0
  338. data/lib/carat/heap.rb +193 -0
  339. data/lib/carat/html-helpers.rb +82 -0
  340. data/lib/carat/infinity.rb +61 -0
  341. data/lib/carat/init.rb +33 -0
  342. data/lib/carat/interval.rb +248 -0
  343. data/lib/carat/io-reactor.rb +657 -0
  344. data/lib/carat/io-redirect.rb +99 -0
  345. data/lib/carat/lisp-format.rb +1832 -0
  346. data/lib/carat/lisp.rb +336 -0
  347. data/lib/carat/macro.rb +68 -0
  348. data/lib/carat/multiton.rb +153 -0
  349. data/lib/carat/nack.rb +115 -0
  350. data/lib/carat/nil-comparable.rb +67 -0
  351. data/lib/carat/nil-missing.rb +12 -0
  352. data/lib/carat/notcopyable.rb +68 -0
  353. data/lib/carat/orderedhash.rb +249 -0
  354. data/lib/carat/ostructable.rb +138 -0
  355. data/lib/carat/parser-old.rb +350 -0
  356. data/lib/carat/parser.rb +393 -0
  357. data/lib/carat/ref.rb +31 -0
  358. data/lib/carat/semaphore.rb +69 -0
  359. data/lib/carat/snapshot.rb +94 -0
  360. data/lib/carat/soundex.rb +104 -0
  361. data/lib/carat/sstruct.rb +223 -0
  362. data/lib/carat/statichash.rb +49 -0
  363. data/lib/carat/tagiter.rb +345 -0
  364. data/lib/carat/timelimit.rb +114 -0
  365. data/lib/carat/timer.rb +99 -0
  366. data/lib/carat/tracepoint.rb +154 -0
  367. data/lib/carat/tuple.rb +31 -0
  368. data/lib/carat/uninheritable.rb +68 -0
  369. data/lib/carat/version.rb +147 -0
  370. data/pub/doc/sstruct.txt +204 -0
  371. data/pub/doc/tagiter.html +145 -0
  372. data/setup.rb +1361 -0
  373. data/test/fixtures/filelist/testfile.txt +1 -0
  374. data/test/fixtures/filelist/testfile2.txt +1 -0
  375. data/test/tc_1st.rb +16 -0
  376. data/test/tc_ansicolor.rb +23 -0
  377. data/test/tc_attr.rb +46 -0
  378. data/test/tc_bbcode.rb +20 -0
  379. data/test/tc_binaryreader.rb +14 -0
  380. data/test/tc_binding_of_caller.rb +2 -0
  381. data/test/tc_byteorder.rb +41 -0
  382. data/test/tc_constant.rb +12 -0
  383. data/test/tc_coroutine.rb +50 -0
  384. data/test/tc_crosscase.rb +33 -0
  385. data/test/tc_duckhunter.rb +37 -0
  386. data/test/tc_dynamic-mixin.rb +66 -0
  387. data/test/tc_enumerable-args.rb +66 -0
  388. data/test/tc_expect.rb +83 -0
  389. data/test/tc_filelist.rb +17 -0
  390. data/test/tc_floatstring.rb +22 -0
  391. data/test/tc_functor.rb +18 -0
  392. data/test/tc_harray.rb +280 -0
  393. data/test/tc_heap.rb +6 -0
  394. data/test/tc_infinity.rb +23 -0
  395. data/test/tc_init.rb +29 -0
  396. data/test/tc_interval.rb +153 -0
  397. data/test/tc_io-reactor.rb +5 -0
  398. data/test/tc_io-redirect.rb +5 -0
  399. data/test/tc_lisp-format.rb +24 -0
  400. data/test/tc_lisp.rb +32 -0
  401. data/test/tc_macro.rb +48 -0
  402. data/test/tc_multiton.rb +188 -0
  403. data/test/tc_nack.rb +31 -0
  404. data/test/tc_nil-as-emptiness.rb +19 -0
  405. data/test/tc_nil-comparable.rb +29 -0
  406. data/test/tc_nil-missing.rb +0 -0
  407. data/test/tc_notcopyable.rb +64 -0
  408. data/test/tc_orderedhash.rb +36 -0
  409. data/test/tc_ostructable.rb +31 -0
  410. data/test/tc_semaphore.rb +5 -0
  411. data/test/tc_snapshot.rb +20 -0
  412. data/test/tc_soundex.rb +19 -0
  413. data/test/tc_sstruct.rb +313 -0
  414. data/test/tc_statichash.rb +24 -0
  415. data/test/tc_tagiter.rb +80 -0
  416. data/test/tc_timelimit.rb +47 -0
  417. data/test/tc_timer.rb +35 -0
  418. data/test/tc_tracepoint.rb +10 -0
  419. data/test/tc_tuple.rb +25 -0
  420. data/test/tc_uninheritable.rb +33 -0
  421. data/test/tc_version.rb +90 -0
  422. metadata +531 -0
@@ -0,0 +1,70 @@
1
+ #
2
+ # daemon.rb
3
+ #
4
+ # Copyright (c) 1999-2002 Minero Aoki <aamine@loveruby.net>
5
+ #
6
+ # This program is free software.
7
+ # You can distribute/modify this program under the terms of
8
+ # the GNU Lesser General Public License version 2 or later.
9
+ #
10
+ # $Id: daemon.rb,v 1.2 2002/01/05 06:19:34 aamine Exp $
11
+ #
12
+
13
+ require 'socket'
14
+
15
+
16
+ class Daemon
17
+
18
+ def self.exec( port, dir, debug = $DEBUG )
19
+ new(debug).exec port, dir
20
+ end
21
+
22
+ def initialize( debug = $DEBUG )
23
+ @debug = $DEBUG
24
+ end
25
+
26
+ def exec( port, dir )
27
+ if @debug then
28
+ Dir.chdir dir
29
+ wait
30
+ return
31
+ end
32
+
33
+ fork do
34
+ Process.setsid
35
+ fork do
36
+ Dir.chdir dir
37
+ $stdin.close
38
+ $stdout.close
39
+ $stderr.close
40
+
41
+ wait
42
+ end
43
+
44
+ exit!
45
+ end
46
+ exit!
47
+ end
48
+
49
+ def wait
50
+ s = TCPServer.new( 10070 )
51
+
52
+ unless @debug then
53
+ trap( 'SIGINT' ) { exit! }
54
+ trap( 'SIGHUP' ) { exit! }
55
+ trap( 'SIGTERM' ) { exit! }
56
+ end
57
+
58
+ while true do
59
+ @sock = s.accept
60
+ begin
61
+ session
62
+ ensure
63
+ @sock.close
64
+ end
65
+ end
66
+ end
67
+
68
+ # abstract session
69
+
70
+ end
@@ -0,0 +1,363 @@
1
+ =begin rdoc
2
+
3
+ = Object#detach
4
+
5
+ Written by Evan Webb <evan@fallingsnow.net>
6
+
7
+ Detach an object into a seperate process.
8
+
9
+ Simplest example expands to all objects.
10
+
11
+ require 'detach'
12
+
13
+ s = "blah"
14
+ s2 = s.detach
15
+ s2.size # 4
16
+ s2.to_s # blah
17
+
18
+
19
+ This basic example is true for all objects. All methods
20
+ are passed to the object running in the other process and
21
+ the return of #detach can be used in exactly the same way
22
+ as the original object.
23
+
24
+ Useful in splitting of sections of a application that can
25
+ then use their own thread table and will have better performance
26
+ then running all parts of a large application under one ruby thread
27
+ scheduler.
28
+
29
+ =end
30
+
31
+ require 'drb'
32
+
33
+
34
+ module Dispatch
35
+
36
+ # These are created for each background work unit (method call)
37
+ # that is created. They keep stats and allow for indexing
38
+ # when the value is ready.
39
+ class BackgroundUnit
40
+ attr_accessor :unit_id, :start, :stop
41
+ attr_reader :value, :thread
42
+
43
+ def initialize(id)
44
+ @unit_id = id
45
+ @thread = nil
46
+ @start = nil
47
+ @stop = nil
48
+ end
49
+
50
+ # Sets the thread of the unit
51
+ def thread=(th)
52
+ @thread = th
53
+ @start = Time.now
54
+ end
55
+
56
+ # Sets the value of the unit
57
+ def value=(v)
58
+ @stop = Time.now
59
+ @value = v
60
+ end
61
+
62
+ # Indicates the elapse time spent on the unit
63
+ def elapse
64
+ @stop - @start
65
+ end
66
+
67
+ # Indicates if the unit has finished processing
68
+ def ready?
69
+ !@thread.alive?
70
+ end
71
+ end
72
+
73
+ # Attached as the front object to a DRb, and given it's own
74
+ # front object, method calls on this object spin a new thread
75
+ # to handle the method and returns a BackgroundObject right
76
+ # away. Future usage of said BackgroundObject causes it to
77
+ # request the real object from the Dispatch (via DRb), at
78
+ # which time operations may block. This allows for the time
79
+ # between object creation and object usage for the real remote
80
+ # object to do it's working, not blocking the local objects.
81
+ class BackgroundDispatch
82
+
83
+ undef :to_s
84
+ undef :to_a
85
+ undef :respond_to?
86
+
87
+ def initialize(front,drb=false)
88
+ @front = front
89
+ @units = Hash.new
90
+ @drb = drb
91
+ end
92
+
93
+ # This is defined to keep DRb and such from trying
94
+ # to move a the Dispatcher, which must remain in the same
95
+ # context as the called method. Though, having Thread
96
+ # objects referenced with @units makes that true as well.
97
+ def _dump(d)
98
+ raise TypeError, "can't be moved"
99
+ end
100
+
101
+ # Someone has requested an operation on
102
+ # this front object to be performed. Ok, lets spin
103
+ # of the method to do it's working and return a
104
+ # BackgroundObject as a stand in.
105
+ def method_missing(msg_id, *a, &b)
106
+ # puts "Calling #{msg_id}..."
107
+ if @drb
108
+ obj = BackgroundObject.new(DRbObject.new(self))
109
+ else
110
+ obj = BackgroundObject.new(self)
111
+ end
112
+
113
+ unit = BackgroundUnit.new(obj.index)
114
+ unit.thread = Thread.new(unit) { |u|
115
+ # puts " >> In thread, sending method to real object (#{obj.index})"
116
+ u.value = @front.__send__(msg_id, *a, &b)
117
+ # puts " >> Finished operation (#{obj.index})"
118
+ }
119
+ @units[obj.index] = unit
120
+ # puts "Returning a BO for #{obj.index}"
121
+ return obj
122
+ end
123
+
124
+ # Used fetch the value of the work unit associated with
125
+ # the BackgroundObject at index. This method blocks,
126
+ # waiting until the value is ready before returning it.
127
+ def _get_obj(index)
128
+ # puts "Fetching object #{index} in #{Process.pid}"
129
+ # puts "Unit is #{@units[index].inspect}"
130
+ if not @units[index].ready?
131
+ @units[index].thread.join
132
+ end
133
+ # puts "Returning value.."
134
+ return @units[index].value
135
+ end
136
+
137
+ # Used to check if the work unit is ready.
138
+ def _obj_ready?(uid)
139
+ # puts "Checking for readiness in #{Process.pid}"
140
+ @units[uid].ready?
141
+ end
142
+
143
+ # Used for stats transparent back to the caller.
144
+ # This is done in seperate struct rather then just
145
+ # returning the unit object because it can easily be
146
+ # seralized and used on the local side of a DRb session
147
+ Stats = Struct.new(:start, :stop, :running)
148
+
149
+ # Returns the stats for a work unit.
150
+ def _obj_stats(uid)
151
+ unit = @units[uid]
152
+ if unit.nil?
153
+ return Stats.new
154
+ end
155
+ return Stats.new(unit.start,unit.stop,unit.thread.alive?)
156
+ end
157
+ end
158
+
159
+ # Used to create non-blocking remote method calls. Has an
160
+ # index of a work unit and a dispatch object to call on
161
+ # to do all the work.
162
+ class BackgroundObject
163
+
164
+ attr_reader :index
165
+
166
+ def initialize(dispatch)
167
+ @dispatch = dispatch
168
+ @index = self.object_id()
169
+ end
170
+
171
+ undef :to_s
172
+ undef :to_a
173
+ undef :respond_to?
174
+
175
+ # Passes all unknown method calls back to the
176
+ # original object by way of the dispatch.
177
+ def method_missing(msg_id, *a, &b)
178
+ # puts "in #{Process.pid}, asking for #{msg_id} from a #{@dispatch.class}"
179
+ obj = @dispatch._get_obj(@index)
180
+ # puts "Ret is a #{obj.class}"
181
+ obj.__send__(msg_id,*a,&b)
182
+ end
183
+
184
+ # Returns true if the real object is ready.
185
+ def ready?
186
+ # puts "Checking for readiness from #{Process.pid}"
187
+ @dispatch._obj_ready?(@index)
188
+ end
189
+ alias :done? :ready?
190
+
191
+ # Returns stats for the backgrouded call.
192
+ def stats
193
+ @dispatch._obj_stats(@index)
194
+ end
195
+
196
+ # I added when it choked needing this
197
+ def self._load(d)
198
+ end
199
+ end
200
+ end
201
+
202
+
203
+
204
+ class Object
205
+ # Accepts a hash of options to use when detaching.
206
+ #
207
+ # :ps - Controls if the title of the new process is changed
208
+ # to reflect it being a detached object.
209
+ #
210
+ # Values:
211
+ # * :append - Append information to the current process title
212
+ # * :replace - Replace the current process title all together
213
+ # * :none - Don't change the process title at all
214
+ #
215
+ #
216
+ # :name - Sets what the name of the process actually is.
217
+ #
218
+ # Values:
219
+ # * :parent - Uses the current process title as the name of the
220
+ # detached process (ie, $0 of the parent)
221
+ # * String - Any String value is used as the name
222
+ #
223
+ #
224
+ # :id - Sets what the id of the process will be in the new
225
+ # process title.
226
+ #
227
+ # Values:
228
+ # * :object Uses a default id, looks like the default Object#to_s
229
+ # * String Any String value is used as the id
230
+ #
231
+ #
232
+ # :die - Controls if the child process will be killed if the
233
+ # parent exits.
234
+ #
235
+ # Values:
236
+ # * :parent Detached object process follows the course of
237
+ # the parent process
238
+ # * :none The detached object process will continue running
239
+ # inspite of the fate of the parent process
240
+ #
241
+ # :path - The template of the location of the pipe used for
242
+ # communication between the parent and the detached process.
243
+ #
244
+ # Defaults to: '/tmp/drb_detach.#{pid}'
245
+ #
246
+ # Use single quotes to embed variables to be filled in later.
247
+ #
248
+ # Available variables:
249
+ # * pid The process id of the detached process
250
+ #
251
+ #
252
+ # :allrefs - Controls how objects are passed to and from the
253
+ # detached process. If :allrefs is set to true, all objects
254
+ # passed back and forth from the remote object are only
255
+ # passed as references, so that the original executing context
256
+ # (ie. process) is always used. This option defaults to true
257
+ # because it is the expect operating procedure.
258
+ #
259
+ # The use of this option takes pains to allow objects you would
260
+ # always expect to be Marshalled to still be Marshalled, such as
261
+ # Symbol, String, Fixnum, Bignum, Array, etc.
262
+ #
263
+ # NOTE: if you have problems with objects passed to detached
264
+ # objects executing there methods in the detached process, and
265
+ # you want them executed in the original context, try including
266
+ # Drb::Undumped in your object rather then using this.
267
+ #
268
+ # :background - Controls how methods are dispatch on the detached
269
+ # object. If :background is true, then all method calls are done
270
+ # non-blocking, and a place holder object is returned. When
271
+ # that place holder object has it's methods called, it blocks,
272
+ # waiting for the real method operation to finish.
273
+ def detach(cfg={})
274
+ cfg = {
275
+ :ps => :append,
276
+ :die => :parent,
277
+ :name => :parent,
278
+ :id => :object,
279
+ :path => '/tmp/drb_detach.#{pid}',
280
+ :allref => true,
281
+ :background => true
282
+ }.merge(cfg)
283
+
284
+ if cfg[:name] == :parent
285
+ name = $0
286
+ else
287
+ name = cfg[:name].to_s
288
+ end
289
+
290
+ if cfg[:id] == :object
291
+ id = "#<#{self.class}:0x#{self.object_id.to_s(16)}>"
292
+ else
293
+ id = cfg[:id]
294
+ end
295
+
296
+ pid = fork {
297
+ # A nice little trick
298
+ case cfg[:ps]
299
+ when :append
300
+ $0 = name + " - #{id}"
301
+ when :replace
302
+ $0 = id
303
+ when :none
304
+ break
305
+ end
306
+
307
+ if cfg[:ps].kind_of? String
308
+ $0 = cfg[:ps]
309
+ end
310
+
311
+ trap("INT") {
312
+ exit
313
+ }
314
+
315
+ pid = Process.pid
316
+
317
+ obj = nil
318
+ if cfg[:background] == true
319
+ obj = Dispatch::BackgroundDispatch.new(self,true)
320
+ else
321
+ obj = self
322
+ end
323
+
324
+ DRb.start_service("drbunix://"+eval(%!"#{cfg[:path]}"!),obj)
325
+ DRb.thread.join
326
+ exit
327
+ }
328
+
329
+ # Mom always said I should clean up after myself
330
+
331
+ if cfg[:die] == :parent
332
+ at_exit {
333
+ Process.kill("INT", pid)
334
+ }
335
+ end
336
+
337
+ sleep 0.3
338
+ DRb.start_service
339
+ remote = DRbObject.new(nil,"drbunix://"+eval(%!"#{cfg[:path]}"!))
340
+ if cfg[:allref] == true
341
+ remote.instance_eval "alias :real_method_missing :method_missing"
342
+
343
+ def remote.method_missing(msg_id, *a, &b)
344
+ a.each do |i|
345
+ allow = true
346
+ [Symbol, String, Fixnum, Bignum, Array, Regexp].each do |t|
347
+ if i.kind_of? t
348
+ allow = false
349
+ break
350
+ end
351
+ end
352
+ next if not allow
353
+ def i._dump(d)
354
+ raise TypeError, 'can\'t dump'
355
+ end
356
+ end
357
+ return real_method_missing(msg_id, *a)
358
+ end
359
+ end
360
+
361
+ return remote
362
+ end
363
+ end
@@ -0,0 +1,57 @@
1
+
2
+ require 'test/unit'
3
+ require 'carat/detach.rb'
4
+
5
+
6
+ # fixture
7
+
8
+ class Logger
9
+ def log(str)
10
+ puts "From #{Process.pid}: #{str.to_s}"
11
+ end
12
+ end
13
+
14
+ class Person
15
+ attr_accessor :log
16
+ def say(msg)
17
+ puts "Detached #{Process.pid}"
18
+ @log.log("hello, i said #{msg}")
19
+ end
20
+ def wait
21
+ sleep 10
22
+ "hi"
23
+ end
24
+ end
25
+
26
+
27
+ class TC_Detach < Test::Unit::TestCase
28
+
29
+ puts "Parent is #{Process.pid}"
30
+
31
+ log = Logger.new
32
+ p = Person.new
33
+ p = p.detach(:allref => true)
34
+ puts "p is a #{p.class}"
35
+ p.log = log
36
+ p.say("I won!")
37
+
38
+ s = p.wait
39
+
40
+ puts "s is a #{s.class}"
41
+
42
+ puts "While i'm here, the other process should be doing it's thing."
43
+ puts "It's waiting for 10 seconds, so if i wait for 5, it should only be another 5 after i ask for the method that it returns"
44
+ sleep 5
45
+
46
+ puts "Lets try something..."
47
+ while not s.ready?
48
+ puts "Is the method ready? (#{s.ready?})"
49
+ sleep 2
50
+ end
51
+ p s.to_s
52
+
53
+ puts "Stats:"
54
+ p s.stats
55
+
56
+ end
57
+