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,336 @@
1
+ =begin rdoc
2
+
3
+ = Lisp Mixin
4
+
5
+ This module provides Lisp-like functional notation.
6
+ With this module it almost possibel to write real
7
+ Lisp code in Ruby.
8
+
9
+ == Example
10
+
11
+ It's hardly believable, but the following IS valid ruby code:
12
+
13
+ (def accumulate (fun, x, list)
14
+ (if (null? list)
15
+ x
16
+ else
17
+ (accumulate fun, (fun.call x, (car list)), (cdr list))
18
+ end)
19
+ end)
20
+
21
+ A real programmer can write LISP in any language... ;)
22
+
23
+ == Author(s)
24
+
25
+ * Florian Frank
26
+ * Thomas Sawyer
27
+
28
+ == Legal
29
+
30
+ Based on original work func.rb by Florain Frank.
31
+ Copyright (c)2005 Florian Frank <flori@ping.de>
32
+ Ruby License
33
+
34
+ == History
35
+
36
+ * 2005.04.12
37
+ ** Changed the name of Pair class to DottedPair.
38
+ ** Added a new method #pair! which converts an array to a DottedPair.
39
+ ** This is then used in #car and #cdr to automatically convert arrays passed to them.
40
+ ** Note: There may be other places that #pair! conversion is needed.
41
+
42
+ =end
43
+
44
+ module Lisp
45
+
46
+ VERSION = 1.1
47
+
48
+ # DottedPair
49
+
50
+ class DottedPair
51
+
52
+ include Lisp
53
+ include Enumerable
54
+
55
+ def initialize(first = nil, second = nil)
56
+ @first, @second = first, second
57
+ end
58
+
59
+ attr_accessor :first, :second
60
+
61
+ def DottedPair.[](*array)
62
+ if array.empty?
63
+ nil
64
+ else
65
+ DottedPair.new(array.shift, DottedPair[*array])
66
+ end
67
+ end
68
+
69
+ def each(&block)
70
+ if @first
71
+ if @first.is_a? DottedPair
72
+ @first.each(&block)
73
+ else
74
+ block.call(@first)
75
+ end
76
+ end
77
+ if @second
78
+ if @second.is_a? DottedPair
79
+ @second.each(&block)
80
+ else
81
+ block.call(@second)
82
+ end
83
+ end
84
+ end
85
+
86
+ def to_s
87
+ '(' + repr + ')'
88
+ end
89
+
90
+ def inspect
91
+ '(' + repr + ')'
92
+ end
93
+
94
+ def to_a
95
+ a = []
96
+ each { |e| a << e }
97
+ a
98
+ end
99
+
100
+ def ==(other)
101
+ if pair?(self) and pair?(other)
102
+ car(self) == car(other) and cdr(self) == cdr(other)
103
+ else
104
+ if pair?(self) then false else self == other end
105
+ end
106
+ end
107
+
108
+ protected
109
+
110
+ def repr
111
+ case @second
112
+ when DottedPair then @first.to_s + ' ' + @second.repr
113
+ when nil then @first.to_s
114
+ else @first.to_s + ' . ' + @second.to_s
115
+ end
116
+ end
117
+
118
+ end
119
+
120
+ # Functional API
121
+
122
+ def cons(car, cdr)
123
+ DottedPair.new(car, cdr)
124
+ end
125
+
126
+ def consonto(cdr, car)
127
+ DottedPair.new(car, cdr)
128
+ end
129
+
130
+ def car(pair)
131
+ pair = pair!(pair)
132
+ pair.first
133
+ end
134
+
135
+ def cdr(pair)
136
+ pair = pair!(pair)
137
+ pair.second
138
+ end
139
+
140
+ def set(var, val, binding)
141
+ eval "var = #{val}", binding
142
+ end
143
+
144
+ def set_car!(pair, val)
145
+ pair.first = val
146
+ end
147
+
148
+ def set_cdr!(pair, val)
149
+ pair.second = val
150
+ end
151
+
152
+ def null?(x)
153
+ x == nil
154
+ end
155
+
156
+ def pair?(x)
157
+ x.is_a?(DottedPair)
158
+ end
159
+
160
+ def pair!(x)
161
+ return x if pair?(x)
162
+ return DottedPair[*x]
163
+ end
164
+
165
+ def atom?(x)
166
+ not pair?(x) || null?(x)
167
+ end
168
+
169
+ def equal?(l, m)
170
+ l == m
171
+ end
172
+
173
+ def list(*elms)
174
+ if elms.empty?
175
+ nil
176
+ else
177
+ cons(elms.shift, list(*elms))
178
+ end
179
+ end
180
+
181
+ def append(l, m)
182
+ if null?(l)
183
+ if null?(m)
184
+ nil
185
+ else
186
+ cons(car(m), append(l, cdr(m)))
187
+ end
188
+ else
189
+ cons(car(l), append(cdr(l), m))
190
+ end
191
+ end
192
+
193
+ def length(list)
194
+ if null?(list)
195
+ 0
196
+ else
197
+ 1 + length(cdr(list))
198
+ end
199
+ end
200
+
201
+ def map(fun, list)
202
+ if null?(list)
203
+ nil
204
+ else
205
+ cons(fun.call(car(list)), map(fun, cdr(list)))
206
+ end
207
+ end
208
+
209
+ def zip(fun, l, m)
210
+ if null?(l) and null?(m)
211
+ nil
212
+ elsif null?(l) or null?(m)
213
+ raise ArgumentError.new("zip with unequal length lists")
214
+ else
215
+ cons(fun.call(car(l), car(m)), zip(fun, cdr(l), cdr(m)))
216
+ end
217
+ end
218
+
219
+ def pairlis(l, m)
220
+ zip(lambda { |x, y| cons(x, y) }, l, m)
221
+ end
222
+
223
+ def member?(x, list)
224
+ if null?(list)
225
+ false
226
+ else
227
+ if x == car(list)
228
+ true
229
+ else
230
+ member?(x, cdr(list))
231
+ end
232
+ end
233
+ end
234
+
235
+ def filter(pred, list)
236
+ if null?(list)
237
+ nil
238
+ else
239
+ if pred.call(car(list))
240
+ cons(car(list), filter(pred, cdr(list)))
241
+ else
242
+ filter(pred, cdr(list))
243
+ end
244
+ end
245
+ end
246
+
247
+ def assoc(x, list)
248
+ f = filter(lambda { |y| x == car(y)}, list)
249
+ if null?(f) then nil else car(f) end
250
+ end
251
+
252
+ def exists?(pred, list)
253
+ if null?(list)
254
+ false
255
+ else
256
+ if pred.call(car(list))
257
+ true
258
+ else
259
+ exists?(pred, cdr(list))
260
+ end
261
+ end
262
+ end
263
+
264
+ def all?(pred, list)
265
+ if null?(list)
266
+ true
267
+ else
268
+ if pred.call(car(list))
269
+ all?(pred, cdr(list))
270
+ else
271
+ false
272
+ end
273
+ end
274
+ end
275
+
276
+ def accumulate(fun, x, list)
277
+ if null?(list)
278
+ x
279
+ else
280
+ accumulate(fun, fun.call(x, car(list)), cdr(list))
281
+ end
282
+ end
283
+
284
+ alias foldleft accumulate
285
+
286
+ def reduce(fun, x, list)
287
+ if null?(list)
288
+ x
289
+ else
290
+ fun.call(car(list), reduce(fun, x, cdr(list)))
291
+ end
292
+ end
293
+
294
+ alias foldright reduce
295
+
296
+ def link(lists)
297
+ accumulate(lambda { |x, y| append(x, y) }, nil, lists)
298
+ end
299
+
300
+ def explode(string)
301
+ list(*(string.split(//)))
302
+ end
303
+
304
+ def implode(list)
305
+ accumulate(lambda { |x, y| x + y }, '', list)
306
+ end
307
+
308
+ def sum(list)
309
+ accumulate(lambda { |x, y| x + y }, 0, list)
310
+ end
311
+
312
+ def prod(list)
313
+ accumulate(lambda { |x, y| x * y }, 1, list)
314
+ end
315
+
316
+ def reverse(lists)
317
+ accumulate(lambda { |x, y| consonto(x, y) }, nil, lists)
318
+ end
319
+
320
+ def take(l, n)
321
+ if n > 0 and not null?(l)
322
+ cons(car(l), take(cdr(l), n - 1))
323
+ else
324
+ nil
325
+ end
326
+ end
327
+
328
+ def drop(l, n)
329
+ if n > 0 and not null?(l)
330
+ drop(cdr(l), n - 1)
331
+ else
332
+ l
333
+ end
334
+ end
335
+
336
+ end
@@ -0,0 +1,68 @@
1
+ # = Module Macros
2
+ #
3
+ # A macro construction for creating dynamic mixins.
4
+ #
5
+ # == Example
6
+ #
7
+ # module Mixin
8
+ # macro { |options| %{
9
+ # def hello
10
+ # puts 'Hello from #{options[:name]}'
11
+ # end
12
+ # } }
13
+ # end
14
+ #
15
+ # class MyClass
16
+ # include Mixin, :name => 'tml'
17
+ # end
18
+ #
19
+ # m = MyClass.new
20
+ # m.hello -> 'Hello from tml'
21
+ #
22
+ # == Author
23
+ #
24
+ # Based on original code by George Moschovitis <gm@navel.gr>
25
+ #
26
+ class Module
27
+
28
+ def macro( &blk )
29
+ (@macros ||= []) << blk
30
+ end
31
+
32
+ def macros ; @macros ||= [] ; end
33
+
34
+ alias_method :include_without_macros, :include
35
+
36
+ def include(*args)
37
+ options = args.last.is_a?(Hash) ? args.pop : {}
38
+ for mod in args
39
+ mod.append_dynamic_features( self, options )
40
+ end
41
+ include_without_macros(*args)
42
+ end
43
+
44
+ # Note: Is this the best name for this callback?
45
+ def append_dynamic_features( base, options )
46
+ macros.each do |m|
47
+ base.class_eval m.call( options )
48
+ end
49
+ end
50
+
51
+ alias_method :extend_without_macros, :extend
52
+
53
+ def extend(*args)
54
+ options = args.last.is_a?(Hash) ? args.pop : {}
55
+ for mod in args
56
+ mod.extend_dynamic_object( self, options )
57
+ end
58
+ extend_without_macros(*args)
59
+ end
60
+
61
+ # Note: Is this the best name for this callback?
62
+ def extend_dynamic_object( base, options )
63
+ macros.each do |m|
64
+ (class << base; self ; end).class_eval m.call( options )
65
+ end
66
+ end
67
+
68
+ end
@@ -0,0 +1,153 @@
1
+ =begin rdoc
2
+
3
+ = Multiton
4
+
5
+ Multiton module that ensures only one object to be allocated for a given
6
+ argument list.
7
+
8
+ The 'multiton' pattern is similar to a singleton, but instead of only one
9
+ instance, there are several similar instances. it's usefull when you want to
10
+ avoid constructing objects many times because of some huge expence (connecting
11
+ to a database for example), require a set of similar but not identical
12
+ objects, and cannot easily control how many time a contructor may be called.
13
+
14
+ == Synopsis
15
+
16
+ require 'carat/multiton'
17
+
18
+ class SomeMultitonClass
19
+ include Multiton
20
+ attr :arg
21
+ def initialize(arg)
22
+ @arg = arg
23
+ end
24
+ end
25
+
26
+ a = SomeMultitonClass.instance(4)
27
+ b = SomeMultitonClass.instance(4) # a and b are same object
28
+ c = SomeMultitonClass.instance(2) # c is a different object
29
+
30
+ In previous versions the Class.new method was made private, but for
31
+ Semi Multitons this restriction has been lifted with the following
32
+ caveat: Class.instance will attempt to retreive a previously cached
33
+ object, constructing one if needed, but Class.new will *always*
34
+ construct a new object - this should allow great flexiblity with
35
+ multiton classes.
36
+
37
+ == How It Works
38
+
39
+ We try to use a previously cached object, if one is not found
40
+ we construct one and cache it in the pool based on class and
41
+ the args given to the contructor
42
+
43
+ note: a limitation of this approach is that it is impossible to
44
+ detect if different blocks were given to a contructor (if it takes a
45
+ block. Thus, it is the constructor *args _exclusively_ which determine
46
+ the uniqueness of an object. A workaround is for the class to define
47
+ the _class_ method multiton_id, eg:
48
+
49
+ def Klass.multiton_id(*args, &block)
50
+ # ...
51
+ end
52
+
53
+ Which should return a hash key used to identify the object being
54
+ constructed as (not) unique.
55
+
56
+ == Author(s)
57
+
58
+ * Thomas Sawyer
59
+
60
+ == Legal
61
+
62
+ Ruby License
63
+ Copyright (c)2005 Thomas Sawyer
64
+
65
+ == History
66
+
67
+ * 2005.04.12 Passed basic tests.
68
+
69
+ =end
70
+
71
+
72
+ module Multiton
73
+
74
+ VERSION = "2.0"
75
+
76
+ # pools of objects cached on class type
77
+ POOLS = {}
78
+
79
+ # method which can be defined by a class to determine object uniqueness
80
+ MULTITON_ID_HOOK = :multiton_id
81
+
82
+ # method which can be defined by a class to create multiton objects
83
+ MULTITON_NEW_HOOK = :multiton_new
84
+
85
+ def self.append_features(klass)
86
+ klass.private_class_method(:new)
87
+ def klass.instance(*args, &block)
88
+ # if the class defined 'multiton_id' we use this as the key
89
+ # otherwise we simply use the argument list.
90
+ k = (respond_to?(MULTITON_ID_HOOK) ? send(MULTITON_ID_HOOK, *args, &block) : args)
91
+ unless (obj = (POOLS[self] ||= {})[k])
92
+ begin
93
+ critical = Thread.critical
94
+ Thread.critical = true
95
+ meth = self.respond_to?(MULTITON_NEW_HOOK) ? MULTITON_NEW_HOOK : :new
96
+ obj = (POOLS[self][k] = self.send(meth, *args, &block))
97
+ ensure
98
+ Thread.critical = critical # restore state
99
+ end
100
+ end
101
+ return obj
102
+ end
103
+ end
104
+
105
+ # A new-multiton uses the #new method rather than the #instance method.
106
+ module New
107
+ def self.append_features(klass)
108
+ def klass.new(*args, &block)
109
+ # if the class defined 'multiton_id' we use this as the key
110
+ # otherwise we simply use the argument list.
111
+ k = (respond_to?(MULTITON_ID_HOOK) ? send(MULTITON_ID_HOOK, *args, &block) : args)
112
+ unless (obj = (POOLS[self] ||= {})[k])
113
+ begin
114
+ critical = Thread.critical
115
+ Thread.critical = true
116
+ if self.respond_to?(MULTITON_NEW_HOOK)
117
+ obj = (POOLS[self][k] = self.send(MULTITON_NEW_HOOK, *args, &block))
118
+ else
119
+ obj = super
120
+ end
121
+ ensure
122
+ Thread.critical = critical # restore state
123
+ end
124
+ end
125
+ return obj
126
+ end
127
+ end
128
+ end
129
+
130
+ #
131
+ module Semi
132
+ def self.append_features(klass)
133
+ def klass.instance(*args, &block)
134
+ # if the class defined 'multiton_id' we use this as the key
135
+ # otherwise we simply use the argument list.
136
+ k = (respond_to?(MULTITON_ID_HOOK) ? send(MULTITON_ID_HOOK, *args, &block) : args)
137
+ unless (obj = (POOLS[self] ||= {})[k])
138
+ begin
139
+ critical = Thread.critical
140
+ Thread.critical = true
141
+ meth = self.respond_to?(MULTITON_NEW_HOOK) ? MULTITON_NEW_HOOK : :new
142
+ obj = (POOLS[self][k] = self.send(meth, *args, &block))
143
+ ensure
144
+ Thread.critical = critical # restore state
145
+ end
146
+ end
147
+ return obj
148
+ end
149
+ end
150
+ end
151
+
152
+ end
153
+