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,153 @@
1
+ =begin rdoc
2
+
3
+ = FloatString
4
+
5
+ FloatString allows unlimited string insertion between string segments.
6
+
7
+ Note: This is usable, it is still a very new idea, and therefore
8
+ has a much greater potential for change. If you decide it is useful
9
+ to you, please contribute to its improvement. Thanks.
10
+
11
+ == Author(s)
12
+
13
+ * Thomas Sawyer
14
+
15
+ == History
16
+
17
+ * 2005.04.11 Passes basic tests.
18
+
19
+ =end
20
+
21
+ class FloatString
22
+
23
+ def initialize( str )
24
+ @str = str
25
+ @float = {}
26
+ i = 0
27
+ while i < @str.length
28
+ @float[i.to_f] = @str[i,1]
29
+ i += 1
30
+ end
31
+ end
32
+
33
+ def undo
34
+ initialize( @str )
35
+ end
36
+
37
+ def re_enumerate
38
+ initialize( to_s )
39
+ end
40
+
41
+ def to_s
42
+ @float.to_a.sort_by{ |k,v| k }.collect{ |k,v| v }.join('')
43
+ end
44
+
45
+ def to_str
46
+ @float.to_a.sort_by{ |k,v| k }.collect{ |k,v| v }.join('')
47
+ end
48
+
49
+ # these should probably check the decimal and start there
50
+ # rather then startint at 0.5
51
+
52
+ def inner_insert(s, i)
53
+ n = 0.5; i = i.to_f - n
54
+ while @float.has_key?(i)
55
+ n = n/2
56
+ i += n
57
+ end
58
+ @float[i] = s
59
+ end
60
+
61
+ def outer_insert(s, i)
62
+ n = 0.5; i = i.to_f - 0.5
63
+ while @float.has_key?(i)
64
+ n = n/2
65
+ i -= n
66
+ end
67
+ @float[i] = s
68
+ end
69
+
70
+ def inner_append(s, i)
71
+ n = 0.5; i = i.to_f + 0.5
72
+ while @float.has_key?(i)
73
+ n = n/2
74
+ i -= n
75
+ end
76
+ @float[i] = s
77
+ end
78
+
79
+ def outer_append(s, i)
80
+ n = 0.5; i = i.to_f + 0.5
81
+ while @float.has_key?(i)
82
+ n = n/2
83
+ i += n
84
+ end
85
+ @float[i] = s
86
+ end
87
+
88
+ # an inner and outer wrap method would be nice
89
+
90
+ def [](arg)
91
+ if arg.kind_of?(Range)
92
+ #r = Range.new(arg.first.to_f, arg.last.to_f, arg.exclude_end?)
93
+ a = @float.to_a.sort_by{ |k,v| k }
94
+ s = a.index(a.find{ |e| e[0] == arg.first.to_f})
95
+ f = a.index(a.find{ |e| e[0] == arg.last.to_f})
96
+ a = arg.exclude_end? ? a[s...f] : a[s..f]
97
+ a.collect{ |k,v| v }.join('')
98
+ else
99
+ @float[arg.to_f]
100
+ end
101
+ end
102
+
103
+ def []=(arg,v)
104
+ @float[arg.to_f] = v
105
+ end
106
+
107
+ def fill(val, rng=0..-1)
108
+ a = @float.to_a.sort_by{ |k,v| k }
109
+ s = a.index( a.find{ |e| e[0] == rng.first.to_f } )
110
+ f = a.index( a.find{ |e| e[0] == rng.last.to_f } )
111
+ x = (rng.exclude_end? ? a[s...f] : a[s..f])
112
+ x.each{ |k,v| @float[k] = val.to_s }
113
+ self.to_s
114
+ end
115
+
116
+ def empty(rng)
117
+ fill('', rng)
118
+ end
119
+
120
+ def blank(rng)
121
+ fill(' ', rng)
122
+ end
123
+
124
+ end
125
+
126
+
127
+ =begin
128
+ # --- development testing ---
129
+
130
+ if $0 == __FILE__
131
+
132
+ require 'test/unit'
133
+
134
+ class TC_FloatString < Test::Unit::TestCase
135
+
136
+ def test_inner_inset
137
+ fs = FloatString.new( "Hello World!" )
138
+ fs.inner_insert("XXX", 4)
139
+ assert_equal("HellXXXo World!", fs.to_s)
140
+ fs.inner_insert("YYY", 4)
141
+ assert_equal("HellXXXYYYo World!", fs.to_s)
142
+ end
143
+
144
+ def test_fill
145
+ fs = FloatString.new( "Hello World!" )
146
+ fs.inner_insert("XXX", 4)
147
+ assert_equal("HeNNNN World!", fs.fill("N", 2..4))
148
+ end
149
+
150
+ end
151
+
152
+ end
153
+ =end
@@ -0,0 +1,41 @@
1
+ =begin rdoc
2
+
3
+ = Functor
4
+
5
+ By definition a Functor is simply a first class method, but these are common
6
+ in the form of Method and Proc. So here a Functor is a bit more specialied
7
+ as a 1st class _metafunction_. Essentally, a Functor can vary its behavior
8
+ accorrding to the operation applied to it.
9
+
10
+ == Synopsis
11
+
12
+ require 'carat/functor'
13
+
14
+ f = Functor.new { |op, x| x.send(op, x) }
15
+ f + 1 #=> 2
16
+ f + 2 #=> 4
17
+ f + 3 #=> 6
18
+ f * 1 #=> 1
19
+ f * 2 #=> 2
20
+ f * 3 #=> 9
21
+
22
+ == Notes
23
+
24
+ It would probably be a little better if we had a kernelless base object class.
25
+ Built-in public Object methods will not work in a Functor b/c of this.
26
+ Or perhaps this can improved via delegation.
27
+
28
+ == History
29
+
30
+ * 2005-04-11 Passed basic tests.
31
+
32
+ =end
33
+
34
+ class Functor
35
+ def initialize(&func)
36
+ @func = func
37
+ end
38
+ def method_missing(op, *args)
39
+ @func.call(op, *args)
40
+ end
41
+ end
@@ -0,0 +1,507 @@
1
+ =begin rdoc
2
+
3
+ = HArray
4
+
5
+ HArray is an implemenation of the Array class using only Hashes.
6
+ Regular Arrays are never used except once to delegate the #pack method,
7
+ and for *args parameters (since there is no way around those is some cases).
8
+ HArray is for all practical purposes 100% compatible with Array.
9
+
10
+ HArray is slower then the built in Array class, but not as slow
11
+ as one might expect, since a Hash in general is faster than an Array.
12
+ It might be interesting to see how this would perform if it were
13
+ written in c. Not all that useful, but an interesting example.
14
+
15
+ == AUTHOR(s)
16
+
17
+ * Thamas Sawyer
18
+
19
+ =end
20
+
21
+ class HArray < Hash
22
+
23
+ def HArray.[](*args)
24
+ nha = HArray.new
25
+ args.each { |a| nha.set(nha.length,a) }
26
+ nha
27
+ end
28
+
29
+ def HArray.new_h(hsh)
30
+ nha=HArray.new
31
+ nha.replace(hsh)
32
+ #nha.reindex!
33
+ end
34
+
35
+ def initialize(i=0,e=nil)
36
+ if i > 0
37
+ i.times { self.set(self.length,e) }
38
+ end
39
+ end
40
+
41
+ def &(ha)
42
+ nha=HArray.new
43
+ (0..self.length-1).each do |i|
44
+ if ha.has_value?(self.fetch(i)) and !nha.has_value?(self.fetch(i))
45
+ nha.set(nha.length,self.fetch(i))
46
+ end
47
+ end
48
+ nha
49
+ end
50
+
51
+ def *(j)
52
+ if j.kind_of?(String)
53
+ return self.join(j)
54
+ else
55
+ nha = HArray.new
56
+ j.times { (0...self.length).each { |i| nha.set(nha.length,self.fetch(i)) } }
57
+ return nha
58
+ end
59
+ end
60
+
61
+ def +(ha)
62
+ nha = self.dup
63
+ (0..ha.length-1).each { |i| nha.set(nha.length,ha.fetch(i)) }
64
+ nha
65
+ end
66
+
67
+ def -(ha)
68
+ nha = HArray.new
69
+ self.each { |v| nha << v if !ha.has_value?(v) }
70
+ #ha.each { |v| nha << i if !self.include?(v) }
71
+ nha
72
+ end
73
+
74
+ def <<(e)
75
+ self.set(self.length,e)
76
+ self
77
+ end
78
+
79
+ def <=>(ha)
80
+ (0..self.length-1).each do |i|
81
+ ieq = (self.fetch(i) <=> ha.fetch(i))
82
+ return ieq if ieq != 0
83
+ end
84
+ self.length <=> ha.length
85
+ end
86
+
87
+ def ===(ha)
88
+ self.==(ha)
89
+ end
90
+
91
+ alias_method :get, :[]
92
+ private :get
93
+
94
+ def [](i,l=nil)
95
+ if l
96
+ i = i...i+l
97
+ elsif ! i.kind_of?(Range)
98
+ return self.at(i)
99
+ end
100
+ nha = HArray.new
101
+ i.each { |j| nha.set(nha.length,get(j)) if has_key?(j) }
102
+ nha
103
+ end
104
+
105
+ alias set []=
106
+ def []=(i,b,c=nil)
107
+ if c
108
+ rng = (Integer(i)..Integer(i+b))
109
+ b = c
110
+ elsif i.kind_of? Range
111
+ rng = i
112
+ else
113
+ self.set(Integer(i),b)
114
+ return b
115
+ end
116
+ if b == nil
117
+ rng.each { |i| qdelete(i) }
118
+ self.reindex!
119
+ elsif b.kind_of?(Array) or b.kind_of?(HArray)
120
+ j = 0
121
+ rng.each { |i| self[i] = b[j]; j+=1 }
122
+ else
123
+ rng.each { |i| qdelete(i) }
124
+ self[rng.fist] = b
125
+ self.reindex!
126
+ end
127
+ end
128
+
129
+ def |(ha)
130
+ nha = self.dup
131
+ ha.each { |v| nha << v if !nha.has_value?(v) }
132
+ nha
133
+ end
134
+
135
+ def assoc(k)
136
+ (0...self.length).each { |i| return self.fetch(i) if self.fetch(i)[0] == k }
137
+ return nil
138
+ end
139
+
140
+ def at(i)
141
+ i = self.length + i if i <= -1
142
+ get(i)
143
+ #return nil if i < 0 or i >= self.length
144
+ #return self.fetch(i)
145
+ end
146
+
147
+ # clear okay
148
+
149
+ def collect
150
+ nha = HArray.new
151
+ (0...self.length).each { |i| nha << yield(self.fetch(i)) }
152
+ nha
153
+ end
154
+
155
+ def collect!
156
+ nha = HArray.new
157
+ (0...self.length).each { |i| nha << yield(self.fetch(i)) }
158
+ self.replace(nha)
159
+ end
160
+
161
+ def compact
162
+ nha, j = HArray.new, 0
163
+ (0..self.length-1).each do |i|
164
+ if self.fetch(i) != nil
165
+ nha.set(j,self.fetch(i))
166
+ j+=1
167
+ end
168
+ end
169
+ nha
170
+ end
171
+
172
+ def compact!
173
+ if self.has_value?(nil)
174
+ nha, j = HArray.new, 0
175
+ (0..self.length-1).each do |i|
176
+ if self.fetch(i) != nil
177
+ nha.set(j,self.fetch(i))
178
+ j+=1
179
+ end
180
+ end
181
+ return self.replace(nha)
182
+ else
183
+ return nil
184
+ end
185
+ end
186
+
187
+ def concat(ha)
188
+ (0...ha.length).each { |i| self.set(self.length,ha.fetch(i)) }
189
+ self
190
+ end
191
+
192
+ def count(e=nil)
193
+ if block_given?
194
+ cnt = 0
195
+ (0...self.length).each { |i| cnt += 1 if yield(self.fetch(i)) }
196
+ return cnt
197
+ else
198
+ cnt = 0
199
+ (0...self.length).each { |i| cnt += 1 if self.fetch(i) == e }
200
+ return cnt
201
+ end
202
+ end
203
+
204
+ alias qdelete delete
205
+ private :qdelete
206
+
207
+ def delete(e)
208
+ if has_value?(e)
209
+ qdelete_if { |i,v| v == e }
210
+ reindex!
211
+ return e
212
+ else
213
+ return yield if block_given?
214
+ return nil
215
+ end
216
+ end
217
+
218
+ def delete_at(i)
219
+ if self.has_key?(i)
220
+ e = self.fetch(i)
221
+ qdelete(i)
222
+ reindex!
223
+ return e
224
+ else
225
+ return nil
226
+ end
227
+ end
228
+
229
+ alias qdelete_if delete_if
230
+ private :qdelete_if
231
+
232
+ def delete_if
233
+ qdelete_if { |i,v| yield(v) }
234
+ reindex!
235
+ end
236
+
237
+ def each
238
+ (0...self.length).each { |i| yield(self.fetch(i)) }
239
+ end
240
+
241
+ def each_index
242
+ (0...self.length).each { |i| yield(i) }
243
+ end
244
+
245
+ # empty? okay as is
246
+
247
+ def eql?(ha)
248
+ return false if self.length != ha.length
249
+ return true if (0...self.length).all? { |i| self.fetch(i).eql?(ha.fetch(i)) }
250
+ return false
251
+ end
252
+
253
+ def fill(f,s=nil,l=nil)
254
+ if s.kind_of?(Range)
255
+ r = s
256
+ else
257
+ s = 0 if !s
258
+ l = self.length - s if !l
259
+ r = s...(s+l)
260
+ end
261
+ r.each{ |i| self.set(i,f) }
262
+ self
263
+ end
264
+
265
+ def first
266
+ return nil if self.empty?
267
+ self.fetch(0)
268
+ end
269
+
270
+ def flatten
271
+ nha = HArray.new
272
+ (0...self.length).each do |i|
273
+ sfi = self.fetch(i)
274
+ if sfi.kind_of?(HArray) or sfi.kind_of?(Array)
275
+ nha.concat(sfi.flatten)
276
+ else
277
+ nha.set(nha.length,sfi)
278
+ end
279
+ end
280
+ nha
281
+ end
282
+
283
+ def flatten!
284
+ return nil if !self.any? { |e| e.kind_of?(HArray) or e.kind_of?(Array) }
285
+ self.replace(self.flatten)
286
+ end
287
+
288
+ def include?(v)
289
+ self.has_value?(v)
290
+ end
291
+
292
+ # index okay
293
+
294
+ def join(sep='')
295
+ s = ''
296
+ (0...self.length).each { |i| s << "#{self.fetch(i)}#{sep}" }
297
+ return s.chomp(sep)
298
+ end
299
+
300
+ def last
301
+ self[self.length-1]
302
+ end
303
+
304
+ # length okay
305
+
306
+ alias map! collect!
307
+
308
+ def nitems
309
+ cnt = 0
310
+ (0...self.length).each { |i| cnt += 1 if self.fetch(i) != nil }
311
+ cnt
312
+ end
313
+
314
+ def pack(*args)
315
+ self.to_a.pack(*args)
316
+ end
317
+
318
+ def pop
319
+ self.delete_at(self.length-1)
320
+ end
321
+
322
+ def push(*e)
323
+ self.concat(e)
324
+ end
325
+
326
+ def rassoc(k)
327
+ (0...self.length).each { |i| return self.fetch(i) if self.fetch(i)[1] == k }
328
+ return nil
329
+ end
330
+
331
+ def reindex
332
+ nha, j, k, tl = HArray.new, 0, 0, self.length
333
+ while k < tl
334
+ if self.has_key?(j)
335
+ nha.set(k,self.fetch(j))
336
+ j+=1; k+=1
337
+ else
338
+ j+=1
339
+ end
340
+ end
341
+ nha
342
+ end
343
+
344
+ def reindex!
345
+ self.replace(self.reindex)
346
+ end
347
+
348
+ def reject!
349
+ chg=nil
350
+ qdelete_if { |i,v| r=yield(v); chg=true if r; r }
351
+ return nil if !chg
352
+ reindex!
353
+ end
354
+
355
+ #def replace(ha)
356
+ # if ha.length < self.length
357
+ # (ha.length..self.length-1).each { |i| self.delete(i) }
358
+ # (0..ha.length-1).each { |i| self.set(i,ha[i]) }
359
+ # end
360
+ #end
361
+
362
+ def reverse
363
+ nha = HArray.new
364
+ (0...self.length).each { |i| nha.set(self.length-1-i,self.fetch(i)) }
365
+ nha
366
+ end
367
+
368
+ def reverse!
369
+ (0...self.length/2).each do |i|
370
+ ri = self.length-1-i
371
+ tmp = self.fetch(ri)
372
+ self.set(ri,self.fetch(i))
373
+ self.set(i,tmp)
374
+ end
375
+ self
376
+ end
377
+
378
+ def reverse_each
379
+ i = self.length - 1
380
+ while i >= 0
381
+ yield(self.fetch(i))
382
+ i -= 1
383
+ end
384
+ end
385
+
386
+ def rindex(e)
387
+ i = self.length - 1
388
+ while i >= 0
389
+ return i if self.fetch(i) == e
390
+ i -= 1
391
+ end
392
+ return nil
393
+ end
394
+
395
+ def shift
396
+ e1 = self[0]
397
+ tl = self.length - 1
398
+ (1..tl).each { |i| self.set(i-1,self.fetch(i)) }
399
+ self.delete_at(tl)
400
+ e1
401
+ end
402
+
403
+ # size okay
404
+
405
+ def slice(*args)
406
+ self[*args]
407
+ end
408
+
409
+ def slice!(*args)
410
+ result = self[*args]
411
+ self[*args] = nil
412
+ result
413
+ end
414
+
415
+ def sort
416
+ raise "HArray does not currently support sorting with blocks" if block_given?
417
+ nha = self.dup
418
+ qsort(nha,0,nha.length-1)
419
+ end
420
+
421
+ def qsort(ha, l, r)
422
+ l_hold = l
423
+ r_hold = r
424
+ pivot = ha[l]
425
+ while l < r
426
+ r -= 1 while (ha[r] <=> pivot) >= 0 and l < r
427
+ if l != r
428
+ ha[l] = ha[r]
429
+ l += 1
430
+ end
431
+ l += 1 while (ha[l] <=> pivot) <= 0 and l < r
432
+ if l != r
433
+ ha[r] = ha[l]
434
+ r -= 1
435
+ end
436
+ end
437
+ ha[l] = pivot
438
+ pivot = l
439
+ l = l_hold
440
+ r = r_hold
441
+ qsort(ha,l,pivot-1) if l < pivot
442
+ qsort(ha,pivot+1,r) if r > pivot
443
+ ha
444
+ end
445
+
446
+ def sort!
447
+ raise "HArray does not currently support sorting with blocks" if block_given?
448
+ qsort(self,0,self.length-1)
449
+ end
450
+
451
+ def to_a
452
+ a = []
453
+ (0..self.length-1).each { |i| a << self.fetch(i) }
454
+ a
455
+ end
456
+
457
+ def to_ary
458
+ self
459
+ end
460
+
461
+ def to_h
462
+ h = Hash.new
463
+ self.each { |k,v| h[k] = v }
464
+ h
465
+ end
466
+
467
+ def to_s
468
+ self.join
469
+ end
470
+
471
+ def uniq
472
+ nha = HArray.new
473
+ (0..self.length-1).each do |i|
474
+ nha[nha.length] = self[i] if !nha.has_value?(self[i])
475
+ end
476
+ nha
477
+ end
478
+
479
+ def uniq!
480
+ j = 0
481
+ (1..self.length-1).each do |i|
482
+ if !self[0..j].has_value?(self[i])
483
+ self[j+1] = self[i]
484
+ j+=1
485
+ end
486
+ end
487
+ (j+1..self.length-1).each { |i| qdelete(i) }
488
+ end
489
+
490
+ def unshift(e)
491
+ i = self.length - 1
492
+ while i >= 0
493
+ self.set(i+1,self.fetch(i))
494
+ return i if self.fetch(i) == e
495
+ i -= 1
496
+ end
497
+ self.set(0,e)
498
+ self
499
+ end
500
+
501
+ def values_at(*ix)
502
+ nha = HArray.new
503
+ ix.each {|i| nha[nha.length] = self.at(i)}
504
+ nha
505
+ end
506
+
507
+ end