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,328 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Module: HTML</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Module</strong></td>
53
+ <td class="class-name-in-header">HTML</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../files/lib/carat/html-helpers_rb.html">
59
+ lib/carat/html-helpers.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ </table>
66
+ </div>
67
+ <!-- banner header -->
68
+
69
+ <div id="bodyContent">
70
+
71
+
72
+
73
+ <div id="contextContent">
74
+
75
+
76
+
77
+ </div>
78
+
79
+ <div id="method-list">
80
+ <h3 class="section-bar">Methods</h3>
81
+
82
+ <div class="name-list">
83
+ <a href="#M000409">CGI_include!</a>&nbsp;&nbsp;
84
+ <a href="#M000410">FCGI_include!</a>&nbsp;&nbsp;
85
+ <a href="#M000413">esc</a>&nbsp;&nbsp;
86
+ <a href="#M000414">escformat</a>&nbsp;&nbsp;
87
+ <a href="#M000412">marshal_from_html</a>&nbsp;&nbsp;
88
+ <a href="#M000411">marshal_to_html</a>&nbsp;&nbsp;
89
+ <a href="#M000415">render_object</a>&nbsp;&nbsp;
90
+ </div>
91
+ </div>
92
+
93
+ </div>
94
+
95
+
96
+ <!-- if includes -->
97
+ <div id="includes">
98
+ <h3 class="section-bar">Included Modules</h3>
99
+
100
+ <div id="includes-list">
101
+ <span class="include-name">XHTML</span>
102
+ <span class="include-name">XHTML</span>
103
+ </div>
104
+ </div>
105
+
106
+ <div id="section">
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+ <!-- if method_list -->
116
+ <div id="methods">
117
+ <h3 class="section-bar">Public Class methods</h3>
118
+
119
+ <div id="method-M000409" class="method-detail">
120
+ <a name="M000409"></a>
121
+
122
+ <div class="method-heading">
123
+ <a href="#M000409" class="method-signature">
124
+ <span class="method-name">CGI_include!</span><span class="method-args">()</span>
125
+ </a>
126
+ </div>
127
+
128
+ <div class="method-description">
129
+ <p><a class="source-toggle" href="#"
130
+ onclick="toggleCode('M000409-source');return false;">[Source]</a></p>
131
+ <div class="method-source-code" id="M000409-source">
132
+ <pre>
133
+ <span class="ruby-comment cmt"># File lib/carat/html-helpers.rb, line 26</span>
134
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-constant">CGI_include!</span>
135
+ <span class="ruby-identifier">require</span> <span class="ruby-value str">'cgi'</span>
136
+ <span class="ruby-constant">CGI</span>.<span class="ruby-identifier">class_eval</span> { <span class="ruby-identifier">include</span> <span class="ruby-constant">XHTML</span> }
137
+ <span class="ruby-keyword kw">end</span>
138
+ </pre>
139
+ </div>
140
+ </div>
141
+ </div>
142
+
143
+ <div id="method-M000410" class="method-detail">
144
+ <a name="M000410"></a>
145
+
146
+ <div class="method-heading">
147
+ <a href="#M000410" class="method-signature">
148
+ <span class="method-name">FCGI_include!</span><span class="method-args">()</span>
149
+ </a>
150
+ </div>
151
+
152
+ <div class="method-description">
153
+ <p><a class="source-toggle" href="#"
154
+ onclick="toggleCode('M000410-source');return false;">[Source]</a></p>
155
+ <div class="method-source-code" id="M000410-source">
156
+ <pre>
157
+ <span class="ruby-comment cmt"># File lib/carat/html-helpers.rb, line 31</span>
158
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-constant">FCGI_include!</span>
159
+ <span class="ruby-identifier">require</span> <span class="ruby-value str">'fcgi'</span>
160
+ <span class="ruby-constant">FCGI</span>.<span class="ruby-identifier">class_eval</span> { <span class="ruby-identifier">include</span> <span class="ruby-constant">XHTML</span> }
161
+ <span class="ruby-keyword kw">end</span>
162
+ </pre>
163
+ </div>
164
+ </div>
165
+ </div>
166
+
167
+ <h3 class="section-bar">Public Instance methods</h3>
168
+
169
+ <div id="method-M000413" class="method-detail">
170
+ <a name="M000413"></a>
171
+
172
+ <div class="method-heading">
173
+ <a href="#M000413" class="method-signature">
174
+ <span class="method-name">esc</span><span class="method-args">(str)</span>
175
+ </a>
176
+ </div>
177
+
178
+ <div class="method-description">
179
+ <p>
180
+ Return an html &quot;safe&quot; version of the string, where every &amp;,
181
+ &lt; and &gt; are replaced with appropriate entities.
182
+ </p>
183
+ <p><a class="source-toggle" href="#"
184
+ onclick="toggleCode('M000413-source');return false;">[Source]</a></p>
185
+ <div class="method-source-code" id="M000413-source">
186
+ <pre>
187
+ <span class="ruby-comment cmt"># File lib/carat/html-helpers.rb, line 57</span>
188
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">esc</span>(<span class="ruby-identifier">str</span>)
189
+ <span class="ruby-identifier">str</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/&amp;/</span>,<span class="ruby-value str">'&amp;amp;'</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/&lt;/</span>,<span class="ruby-value str">'&amp;lt;'</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/&gt;/</span>,<span class="ruby-value str">'&amp;gt;'</span>)
190
+ <span class="ruby-keyword kw">end</span>
191
+ </pre>
192
+ </div>
193
+ </div>
194
+ </div>
195
+
196
+ <div id="method-M000414" class="method-detail">
197
+ <a name="M000414"></a>
198
+
199
+ <div class="method-heading">
200
+ <a href="#M000414" class="method-signature">
201
+ <span class="method-name">escformat</span><span class="method-args">(str)</span>
202
+ </a>
203
+ </div>
204
+
205
+ <div class="method-description">
206
+ <p>
207
+ Calls <a href="HTML.html#M000413">esc</a>, and then further replaces
208
+ carriage returns and quote characters with entities.
209
+ </p>
210
+ <p><a class="source-toggle" href="#"
211
+ onclick="toggleCode('M000414-source');return false;">[Source]</a></p>
212
+ <div class="method-source-code" id="M000414-source">
213
+ <pre>
214
+ <span class="ruby-comment cmt"># File lib/carat/html-helpers.rb, line 62</span>
215
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escformat</span>(<span class="ruby-identifier">str</span>)
216
+ <span class="ruby-identifier">xmlsafe</span>(<span class="ruby-identifier">str</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/[\r\n]+/</span>,<span class="ruby-value str">'&amp;#13;&amp;#10;'</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">%r|&quot;|</span>,<span class="ruby-value str">'&amp;quot;'</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">%r|'|</span>,<span class="ruby-value str">'&amp;#39;'</span>)
217
+ <span class="ruby-keyword kw">end</span>
218
+ </pre>
219
+ </div>
220
+ </div>
221
+ </div>
222
+
223
+ <div id="method-M000412" class="method-detail">
224
+ <a name="M000412"></a>
225
+
226
+ <div class="method-heading">
227
+ <a href="#M000412" class="method-signature">
228
+ <span class="method-name">marshal_from_html</span><span class="method-args">(name)</span>
229
+ </a>
230
+ </div>
231
+
232
+ <div class="method-description">
233
+ <p>
234
+ Create an hidden input field throught which an object can can be
235
+ marshalled. This makes it very easy to pass from data betwenn requests.
236
+ </p>
237
+ <p><a class="source-toggle" href="#"
238
+ onclick="toggleCode('M000412-source');return false;">[Source]</a></p>
239
+ <div class="method-source-code" id="M000412-source">
240
+ <pre>
241
+ <span class="ruby-comment cmt"># File lib/carat/html-helpers.rb, line 49</span>
242
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">marshal_from_html</span>(<span class="ruby-identifier">name</span>)
243
+ <span class="ruby-keyword kw">return</span> <span class="ruby-constant">Marshal</span>.<span class="ruby-identifier">load</span>(<span class="ruby-constant">CGI</span>.<span class="ruby-identifier">unescape</span>(<span class="ruby-keyword kw">self</span>[<span class="ruby-node">&quot;__#{name}__&quot;</span>][<span class="ruby-value">0</span>])) <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">params</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-node">&quot;__#{name}__&quot;</span>)
244
+ <span class="ruby-keyword kw">end</span>
245
+ </pre>
246
+ </div>
247
+ </div>
248
+ </div>
249
+
250
+ <div id="method-M000411" class="method-detail">
251
+ <a name="M000411"></a>
252
+
253
+ <div class="method-heading">
254
+ <a href="#M000411" class="method-signature">
255
+ <span class="method-name">marshal_to_html</span><span class="method-args">(name, iobj)</span>
256
+ </a>
257
+ </div>
258
+
259
+ <div class="method-description">
260
+ <p>
261
+ Create an hidden input field through which an object can can be marshalled.
262
+ This makes it very easy to pass from data betwenn requests.
263
+ </p>
264
+ <p><a class="source-toggle" href="#"
265
+ onclick="toggleCode('M000411-source');return false;">[Source]</a></p>
266
+ <div class="method-source-code" id="M000411-source">
267
+ <pre>
268
+ <span class="ruby-comment cmt"># File lib/carat/html-helpers.rb, line 42</span>
269
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">marshal_to_html</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">iobj</span>)
270
+ <span class="ruby-identifier">data</span> = <span class="ruby-constant">CGI</span>.<span class="ruby-identifier">escape</span>(<span class="ruby-constant">Marshal</span>.<span class="ruby-identifier">dump</span>(<span class="ruby-identifier">iobj</span>))
271
+ <span class="ruby-keyword kw">return</span> <span class="ruby-node">%Q{&lt;input type=&quot;hidden&quot; name=&quot;__#{name}__&quot; value=&quot;#{data}&quot;/&gt;\n}</span>
272
+ <span class="ruby-keyword kw">end</span>
273
+ </pre>
274
+ </div>
275
+ </div>
276
+ </div>
277
+
278
+ <div id="method-M000415" class="method-detail">
279
+ <a name="M000415"></a>
280
+
281
+ <div class="method-heading">
282
+ <a href="#M000415" class="method-signature">
283
+ <span class="method-name">render_object</span><span class="method-args">(o, collection, edit)</span>
284
+ </a>
285
+ </div>
286
+
287
+ <div class="method-description">
288
+ <p>
289
+ Renders an object with annotations: <a
290
+ href="http://tinyurl.com/6xjnj">tinyurl.com/6xjnj</a> Creates a table
291
+ rendering <tt>o</tt>&#8217;s attributes.
292
+ </p>
293
+ <p><a class="source-toggle" href="#"
294
+ onclick="toggleCode('M000415-source');return false;">[Source]</a></p>
295
+ <div class="method-source-code" id="M000415-source">
296
+ <pre>
297
+ <span class="ruby-comment cmt"># File lib/carat/html-helpers.rb, line 68</span>
298
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">render_object</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">collection</span>, <span class="ruby-identifier">edit</span>)
299
+ <span class="ruby-identifier">r</span> = <span class="ruby-value str">&quot;&lt;table&gt;\n&quot;</span>
300
+ <span class="ruby-identifier">o</span>.<span class="ruby-identifier">instance_variables</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">attr_name</span><span class="ruby-operator">|</span>
301
+ <span class="ruby-identifier">attr_value</span> = <span class="ruby-identifier">o</span>.<span class="ruby-identifier">instance_variable_get</span>(<span class="ruby-identifier">attr_name</span>)
302
+ <span class="ruby-identifier">attr_anns</span> = <span class="ruby-identifier">o</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">attr_name</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>])
303
+ <span class="ruby-identifier">r</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot; &lt;tr&gt;\n&quot;</span>
304
+ <span class="ruby-identifier">r</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot; &lt;td&gt;&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">attr_anns</span>[<span class="ruby-identifier">:description</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;&lt;/td&gt;\n&quot;</span>
305
+ <span class="ruby-identifier">r</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot; &lt;td&gt;&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">text_or_input</span>(<span class="ruby-identifier">edit</span>, <span class="ruby-identifier">:name</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;#{collection}[#{o.class.name}][#{attr_name}]&quot;</span>, <span class="ruby-identifier">:value</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">attr_value</span>) <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;&lt;/td&gt;\n&quot;</span>
306
+ <span class="ruby-identifier">r</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot; &lt;/tr&gt;\n&quot;</span>
307
+ <span class="ruby-keyword kw">end</span>
308
+ <span class="ruby-identifier">r</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;&lt;/table&gt;&quot;</span>
309
+ <span class="ruby-identifier">r</span>
310
+ <span class="ruby-keyword kw">end</span>
311
+ </pre>
312
+ </div>
313
+ </div>
314
+ </div>
315
+
316
+
317
+ </div>
318
+
319
+
320
+ </div>
321
+
322
+
323
+ <div id="validator-badges">
324
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
325
+ </div>
326
+
327
+ </body>
328
+ </html>
@@ -0,0 +1,683 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: Heap</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">Heap</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../files/lib/carat/heap_rb.html">
59
+ lib/carat/heap.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ <a href="Object.html">
69
+ Object
70
+ </a>
71
+ </td>
72
+ </tr>
73
+ </table>
74
+ </div>
75
+ <!-- banner header -->
76
+
77
+ <div id="bodyContent">
78
+
79
+
80
+
81
+ <div id="contextContent">
82
+
83
+ <div id="description">
84
+ <h1><a href="Heap.html">Heap</a></h1>
85
+ <p>
86
+ A Simple <a href="Heap.html">Heap</a> structure and Sort
87
+ </p>
88
+ <h2>Extending <a href="Heap.html">Heap</a></h2>
89
+ <p>
90
+ To extend the heap, implement a cmp(i,j) method which compares array
91
+ elements i and j and returns true iff i is larger than j, where larger or
92
+ is the required heap sorting. See <a href="Heap/Min.html">Heap::Min</a> and
93
+ <a href="Heap/Max.html">Heap::Max</a> for examples.
94
+ </p>
95
+ <h2>Note</h2>
96
+ <p>
97
+ The <tt>parent</tt>,<tt>left</tt> and <tt>right</tt> methods do not check
98
+ the supplied parameter, but their result is <em>only</em> valid if the
99
+ supplied with an integer &gt;=0 for <tt>left</tt> and <tt>right</tt> and
100
+ &gt;0 for <tt>parent</tt>.
101
+ </p>
102
+ <h2>Reference</h2>
103
+ <pre>
104
+ &lt;quote&gt;
105
+ Cormen1990: Chapter 7 (Heapsort) of 'An introduction to algorithms', by
106
+ Cormen, T.H; Leiserson, C.E.; Rivest, R.L; MIT Press, Cambridge, 1990
107
+ ISBN 0-262-53091-0
108
+ &lt;/quote&gt;
109
+ </pre>
110
+ <h2>Author</h2>
111
+ <ul>
112
+ <li>Renald Buter (buter at cwts nl)
113
+
114
+ </li>
115
+ </ul>
116
+ <h2>Thanks</h2>
117
+ <p>
118
+ Special thanks to Nenad Ocelic for many suggestions.
119
+ </p>
120
+ <h2>Legal</h2>
121
+ <p>
122
+ Copyright &#169; 2002,2004 Renald Buter (Ruby <a
123
+ href="Version.html">Version</a>) [See Cormen1990 for original]
124
+ </p>
125
+ <p>
126
+ Ruby License&#8230;
127
+ </p>
128
+ <h2>History</h2>
129
+ <pre>
130
+ $Id: heap.rb,v 1.0 2004/11/30 transami Exp $
131
+ </pre>
132
+
133
+ </div>
134
+
135
+
136
+ </div>
137
+
138
+ <div id="method-list">
139
+ <h3 class="section-bar">Methods</h3>
140
+
141
+ <div class="name-list">
142
+ <a href="#M000036">cmp_idx</a>&nbsp;&nbsp;
143
+ <a href="#M000040">heapify</a>&nbsp;&nbsp;
144
+ <a href="#M000026">inherited</a>&nbsp;&nbsp;
145
+ <a href="#M000041">internal_size</a>&nbsp;&nbsp;
146
+ <a href="#M000038">left</a>&nbsp;&nbsp;
147
+ <a href="#M000027">new</a>&nbsp;&nbsp;
148
+ <a href="#M000037">parent</a>&nbsp;&nbsp;
149
+ <a href="#M000033">pop</a>&nbsp;&nbsp;
150
+ <a href="#M000034">push</a>&nbsp;&nbsp;
151
+ <a href="#M000035">push_all</a>&nbsp;&nbsp;
152
+ <a href="#M000039">right</a>&nbsp;&nbsp;
153
+ <a href="#M000028">size</a>&nbsp;&nbsp;
154
+ <a href="#M000030">sort</a>&nbsp;&nbsp;
155
+ <a href="#M000031">sort_internal</a>&nbsp;&nbsp;
156
+ <a href="#M000042">swap</a>&nbsp;&nbsp;
157
+ <a href="#M000029">to_s</a>&nbsp;&nbsp;
158
+ <a href="#M000032">top</a>&nbsp;&nbsp;
159
+ </div>
160
+ </div>
161
+
162
+ </div>
163
+
164
+
165
+ <!-- if includes -->
166
+
167
+ <div id="section">
168
+
169
+ <div id="class-list">
170
+ <h3 class="section-bar">Classes and Modules</h3>
171
+
172
+ Class <a href="Heap/EmptyHeapException.html" class="link">Heap::EmptyHeapException</a><br />
173
+ Class <a href="Heap/Max.html" class="link">Heap::Max</a><br />
174
+ Class <a href="Heap/Min.html" class="link">Heap::Min</a><br />
175
+
176
+ </div>
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+ <!-- if method_list -->
185
+ <div id="methods">
186
+ <h3 class="section-bar">Public Class methods</h3>
187
+
188
+ <div id="method-M000026" class="method-detail">
189
+ <a name="M000026"></a>
190
+
191
+ <div class="method-heading">
192
+ <a href="#M000026" class="method-signature">
193
+ <span class="method-name">inherited</span><span class="method-args">(sub)</span>
194
+ </a>
195
+ </div>
196
+
197
+ <div class="method-description">
198
+ <p>
199
+ We are an abstract class
200
+ </p>
201
+ <p><a class="source-toggle" href="#"
202
+ onclick="toggleCode('M000026-source');return false;">[Source]</a></p>
203
+ <div class="method-source-code" id="M000026-source">
204
+ <pre>
205
+ <span class="ruby-comment cmt"># File lib/carat/heap.rb, line 54</span>
206
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">inherited</span>(<span class="ruby-identifier">sub</span>) <span class="ruby-identifier">sub</span>.<span class="ruby-identifier">class_eval</span>(<span class="ruby-value str">&quot;public_class_method :new&quot;</span>) <span class="ruby-keyword kw">end</span>
207
+ </pre>
208
+ </div>
209
+ </div>
210
+ </div>
211
+
212
+ <div id="method-M000027" class="method-detail">
213
+ <a name="M000027"></a>
214
+
215
+ <div class="method-heading">
216
+ <a href="#M000027" class="method-signature">
217
+ <span class="method-name">new</span><span class="method-args">(array)</span>
218
+ </a>
219
+ </div>
220
+
221
+ <div class="method-description">
222
+ <p>
223
+ Initialise the heap. If supplied an array, build the heap with the values
224
+ of the array. The array can be unsorted. Note: this method can only be
225
+ called by superclasses
226
+ </p>
227
+ <p><a class="source-toggle" href="#"
228
+ onclick="toggleCode('M000027-source');return false;">[Source]</a></p>
229
+ <div class="method-source-code" id="M000027-source">
230
+ <pre>
231
+ <span class="ruby-comment cmt"># File lib/carat/heap.rb, line 77</span>
232
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">array</span>)
233
+ <span class="ruby-ivar">@array</span>, <span class="ruby-ivar">@heap_size</span> = <span class="ruby-identifier">array</span>, <span class="ruby-identifier">array</span>.<span class="ruby-identifier">length</span>
234
+ (<span class="ruby-ivar">@heap_size</span><span class="ruby-operator">/</span><span class="ruby-value">2</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>).<span class="ruby-identifier">downto</span>(<span class="ruby-value">0</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span> <span class="ruby-identifier">heapify</span>(<span class="ruby-identifier">i</span>) }
235
+ <span class="ruby-keyword kw">end</span>
236
+ </pre>
237
+ </div>
238
+ </div>
239
+ </div>
240
+
241
+ <h3 class="section-bar">Public Instance methods</h3>
242
+
243
+ <div id="method-M000033" class="method-detail">
244
+ <a name="M000033"></a>
245
+
246
+ <div class="method-heading">
247
+ <a href="#M000033" class="method-signature">
248
+ <span class="method-name">pop</span><span class="method-args">()</span>
249
+ </a>
250
+ </div>
251
+
252
+ <div class="method-description">
253
+ <p>
254
+ Extract the first element from the heap. Will raise <a
255
+ href="Heap/EmptyHeapException.html">EmptyHeapException</a> if there are no
256
+ (more) elements on the heap.
257
+ </p>
258
+ <p><a class="source-toggle" href="#"
259
+ onclick="toggleCode('M000033-source');return false;">[Source]</a></p>
260
+ <div class="method-source-code" id="M000033-source">
261
+ <pre>
262
+ <span class="ruby-comment cmt"># File lib/carat/heap.rb, line 125</span>
263
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pop</span>
264
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">EmptyHeapException</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@heap_size</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">1</span>
265
+ <span class="ruby-ivar">@heap_size</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
266
+ <span class="ruby-identifier">top</span>, <span class="ruby-ivar">@array</span>[<span class="ruby-value">0</span>] = <span class="ruby-ivar">@array</span>[<span class="ruby-value">0</span>], <span class="ruby-ivar">@array</span>[<span class="ruby-ivar">@heap_size</span>]
267
+ <span class="ruby-identifier">heapify</span>(<span class="ruby-value">0</span>)
268
+ <span class="ruby-identifier">top</span>
269
+ <span class="ruby-keyword kw">end</span>
270
+ </pre>
271
+ </div>
272
+ </div>
273
+ </div>
274
+
275
+ <div id="method-M000034" class="method-detail">
276
+ <a name="M000034"></a>
277
+
278
+ <div class="method-heading">
279
+ <a href="#M000034" class="method-signature">
280
+ <span class="method-name">push</span><span class="method-args">(elm)</span>
281
+ </a>
282
+ </div>
283
+
284
+ <div class="method-description">
285
+ <p>
286
+ Push an element on the heap.
287
+ </p>
288
+ <p><a class="source-toggle" href="#"
289
+ onclick="toggleCode('M000034-source');return false;">[Source]</a></p>
290
+ <div class="method-source-code" id="M000034-source">
291
+ <pre>
292
+ <span class="ruby-comment cmt"># File lib/carat/heap.rb, line 134</span>
293
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">push</span>(<span class="ruby-identifier">elm</span>)
294
+ <span class="ruby-identifier">i</span> = <span class="ruby-ivar">@heap_size</span>
295
+ <span class="ruby-ivar">@heap_size</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
296
+ <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">i</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">cmp</span>(<span class="ruby-identifier">elm</span>, <span class="ruby-ivar">@array</span>[(<span class="ruby-identifier">j</span> = <span class="ruby-identifier">parent</span>(<span class="ruby-identifier">i</span>))])
297
+ <span class="ruby-ivar">@array</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-ivar">@array</span>[(<span class="ruby-identifier">i</span> = <span class="ruby-identifier">j</span>)]
298
+ <span class="ruby-keyword kw">end</span>
299
+ <span class="ruby-ivar">@array</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-identifier">elm</span>
300
+ <span class="ruby-keyword kw">end</span>
301
+ </pre>
302
+ </div>
303
+ </div>
304
+ </div>
305
+
306
+ <div id="method-M000035" class="method-detail">
307
+ <a name="M000035"></a>
308
+
309
+ <div class="method-heading">
310
+ <a href="#M000035" class="method-signature">
311
+ <span class="method-name">push_all</span><span class="method-args">(elms)</span>
312
+ </a>
313
+ </div>
314
+
315
+ <div class="method-description">
316
+ <p>
317
+ Push a list of elements on the heap.
318
+ </p>
319
+ <p><a class="source-toggle" href="#"
320
+ onclick="toggleCode('M000035-source');return false;">[Source]</a></p>
321
+ <div class="method-source-code" id="M000035-source">
322
+ <pre>
323
+ <span class="ruby-comment cmt"># File lib/carat/heap.rb, line 144</span>
324
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">push_all</span>(<span class="ruby-identifier">elms</span>)
325
+ <span class="ruby-identifier">elms</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span> <span class="ruby-identifier">push</span>(<span class="ruby-identifier">e</span>)}
326
+ <span class="ruby-keyword kw">end</span>
327
+ </pre>
328
+ </div>
329
+ </div>
330
+ </div>
331
+
332
+ <div id="method-M000028" class="method-detail">
333
+ <a name="M000028"></a>
334
+
335
+ <div class="method-heading">
336
+ <a href="#M000028" class="method-signature">
337
+ <span class="method-name">size</span><span class="method-args">()</span>
338
+ </a>
339
+ </div>
340
+
341
+ <div class="method-description">
342
+ <p>
343
+ Get the heap size
344
+ </p>
345
+ <p><a class="source-toggle" href="#"
346
+ onclick="toggleCode('M000028-source');return false;">[Source]</a></p>
347
+ <div class="method-source-code" id="M000028-source">
348
+ <pre>
349
+ <span class="ruby-comment cmt"># File lib/carat/heap.rb, line 83</span>
350
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">size</span>
351
+ <span class="ruby-ivar">@heap_size</span>
352
+ <span class="ruby-keyword kw">end</span>
353
+ </pre>
354
+ </div>
355
+ </div>
356
+ </div>
357
+
358
+ <div id="method-M000030" class="method-detail">
359
+ <a name="M000030"></a>
360
+
361
+ <div class="method-heading">
362
+ <a href="#M000030" class="method-signature">
363
+ <span class="method-name">sort</span><span class="method-args">()</span>
364
+ </a>
365
+ </div>
366
+
367
+ <div class="method-description">
368
+ <p>
369
+ <a href="Heap.html">Heap</a>-sort a clone of the internal array. This will
370
+ not touch the internal array. Returns the array sorted <b>reversely</b> on
371
+ the heap condition!
372
+ </p>
373
+ <p><a class="source-toggle" href="#"
374
+ onclick="toggleCode('M000030-source');return false;">[Source]</a></p>
375
+ <div class="method-source-code" id="M000030-source">
376
+ <pre>
377
+ <span class="ruby-comment cmt"># File lib/carat/heap.rb, line 95</span>
378
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sort</span>
379
+ <span class="ruby-identifier">old_ary</span> = <span class="ruby-ivar">@array</span>.<span class="ruby-identifier">dup</span>
380
+ <span class="ruby-identifier">old_heap</span> = <span class="ruby-ivar">@heap_size</span>
381
+ <span class="ruby-identifier">new_ary</span> = <span class="ruby-identifier">sort_internal</span>
382
+ <span class="ruby-ivar">@array</span> = <span class="ruby-identifier">old_ary</span>
383
+ <span class="ruby-ivar">@heap_size</span> = <span class="ruby-identifier">old_heap</span>
384
+ <span class="ruby-identifier">new_ary</span>
385
+ <span class="ruby-keyword kw">end</span>
386
+ </pre>
387
+ </div>
388
+ </div>
389
+ </div>
390
+
391
+ <div id="method-M000031" class="method-detail">
392
+ <a name="M000031"></a>
393
+
394
+ <div class="method-heading">
395
+ <a href="#M000031" class="method-signature">
396
+ <span class="method-name">sort_internal</span><span class="method-args">()</span>
397
+ </a>
398
+ </div>
399
+
400
+ <div class="method-description">
401
+ <p>
402
+ <a href="Heap.html">Heap</a>-sort the internal array. This reduces heap
403
+ size to 1, since sorting the internal array destroys the heap property. Use
404
+ this only if the heap is not used after this call and you want save speed
405
+ and memory; otherwise use <a href="Heap.html#M000030">Heap#sort</a>. See
406
+ +<a href="Heap.html#M000030">Heap#sort</a>+.
407
+ </p>
408
+ <p><a class="source-toggle" href="#"
409
+ onclick="toggleCode('M000031-source');return false;">[Source]</a></p>
410
+ <div class="method-source-code" id="M000031-source">
411
+ <pre>
412
+ <span class="ruby-comment cmt"># File lib/carat/heap.rb, line 108</span>
413
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sort_internal</span>
414
+ (<span class="ruby-ivar">@array</span>.<span class="ruby-identifier">length</span><span class="ruby-operator">-</span><span class="ruby-value">1</span>).<span class="ruby-identifier">downto</span>(<span class="ruby-value">1</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
415
+ <span class="ruby-identifier">swap</span>(<span class="ruby-value">0</span>,<span class="ruby-identifier">i</span>)
416
+ <span class="ruby-ivar">@heap_size</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
417
+ <span class="ruby-identifier">heapify</span>(<span class="ruby-value">0</span>)
418
+ <span class="ruby-keyword kw">end</span>
419
+ <span class="ruby-ivar">@array</span>
420
+ <span class="ruby-keyword kw">end</span>
421
+ </pre>
422
+ </div>
423
+ </div>
424
+ </div>
425
+
426
+ <div id="method-M000029" class="method-detail">
427
+ <a name="M000029"></a>
428
+
429
+ <div class="method-heading">
430
+ <a href="#M000029" class="method-signature">
431
+ <span class="method-name">to_s</span><span class="method-args">()</span>
432
+ </a>
433
+ </div>
434
+
435
+ <div class="method-description">
436
+ <p>
437
+ Pretty print
438
+ </p>
439
+ <p><a class="source-toggle" href="#"
440
+ onclick="toggleCode('M000029-source');return false;">[Source]</a></p>
441
+ <div class="method-source-code" id="M000029-source">
442
+ <pre>
443
+ <span class="ruby-comment cmt"># File lib/carat/heap.rb, line 88</span>
444
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
445
+ <span class="ruby-node">&quot;&lt;#{self.class}: size=#@heap_size, top=#{self.top}&gt;&quot;</span>
446
+ <span class="ruby-keyword kw">end</span>
447
+ </pre>
448
+ </div>
449
+ </div>
450
+ </div>
451
+
452
+ <div id="method-M000032" class="method-detail">
453
+ <a name="M000032"></a>
454
+
455
+ <div class="method-heading">
456
+ <a href="#M000032" class="method-signature">
457
+ <span class="method-name">top</span><span class="method-args">()</span>
458
+ </a>
459
+ </div>
460
+
461
+ <div class="method-description">
462
+ <p>
463
+ Get the first (maximum) element on the heap
464
+ </p>
465
+ <p><a class="source-toggle" href="#"
466
+ onclick="toggleCode('M000032-source');return false;">[Source]</a></p>
467
+ <div class="method-source-code" id="M000032-source">
468
+ <pre>
469
+ <span class="ruby-comment cmt"># File lib/carat/heap.rb, line 118</span>
470
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">top</span>
471
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">EmptyHeapException</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@heap_size</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">1</span>
472
+ <span class="ruby-ivar">@array</span>[<span class="ruby-value">0</span>]
473
+ <span class="ruby-keyword kw">end</span>
474
+ </pre>
475
+ </div>
476
+ </div>
477
+ </div>
478
+
479
+ <h3 class="section-bar">Protected Instance methods</h3>
480
+
481
+ <div id="method-M000036" class="method-detail">
482
+ <a name="M000036"></a>
483
+
484
+ <div class="method-heading">
485
+ <a href="#M000036" class="method-signature">
486
+ <span class="method-name">cmp_idx</span><span class="method-args">(i,j)</span>
487
+ </a>
488
+ </div>
489
+
490
+ <div class="method-description">
491
+ <p>
492
+ Compare elements at the supplied indices
493
+ </p>
494
+ <p><a class="source-toggle" href="#"
495
+ onclick="toggleCode('M000036-source');return false;">[Source]</a></p>
496
+ <div class="method-source-code" id="M000036-source">
497
+ <pre>
498
+ <span class="ruby-comment cmt"># File lib/carat/heap.rb, line 151</span>
499
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">cmp_idx</span>(<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>)
500
+ <span class="ruby-identifier">cmp</span>(<span class="ruby-ivar">@array</span>[<span class="ruby-identifier">i</span>], <span class="ruby-ivar">@array</span>[<span class="ruby-identifier">j</span>])
501
+ <span class="ruby-keyword kw">end</span>
502
+ </pre>
503
+ </div>
504
+ </div>
505
+ </div>
506
+
507
+ <div id="method-M000040" class="method-detail">
508
+ <a name="M000040"></a>
509
+
510
+ <div class="method-heading">
511
+ <a href="#M000040" class="method-signature">
512
+ <span class="method-name">heapify</span><span class="method-args">(i)</span>
513
+ </a>
514
+ </div>
515
+
516
+ <div class="method-description">
517
+ <p>
518
+ Keeps an heap sorted with the smallest (largest) element on top
519
+ </p>
520
+ <p><a class="source-toggle" href="#"
521
+ onclick="toggleCode('M000040-source');return false;">[Source]</a></p>
522
+ <div class="method-source-code" id="M000040-source">
523
+ <pre>
524
+ <span class="ruby-comment cmt"># File lib/carat/heap.rb, line 171</span>
525
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">heapify</span>(<span class="ruby-identifier">i</span>)
526
+ <span class="ruby-identifier">l</span> = <span class="ruby-identifier">left</span> <span class="ruby-identifier">i</span>
527
+ <span class="ruby-identifier">top</span> = <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">l</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@heap_size</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">cmp_idx</span>(<span class="ruby-identifier">l</span>,<span class="ruby-identifier">i</span>) <span class="ruby-keyword kw">then</span> <span class="ruby-identifier">l</span> <span class="ruby-keyword kw">else</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword kw">end</span>
528
+ <span class="ruby-identifier">r</span> = <span class="ruby-identifier">right</span> <span class="ruby-identifier">i</span>
529
+ <span class="ruby-identifier">top</span> = <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">r</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@heap_size</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">cmp_idx</span>(<span class="ruby-identifier">r</span>,<span class="ruby-identifier">top</span>) <span class="ruby-keyword kw">then</span> <span class="ruby-identifier">r</span> <span class="ruby-keyword kw">else</span> <span class="ruby-identifier">top</span> <span class="ruby-keyword kw">end</span>
530
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">top</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">i</span>
531
+ <span class="ruby-identifier">swap</span>(<span class="ruby-identifier">i</span>, <span class="ruby-identifier">top</span>)
532
+ <span class="ruby-identifier">heapify</span>(<span class="ruby-identifier">top</span>)
533
+ <span class="ruby-keyword kw">end</span>
534
+ <span class="ruby-keyword kw">end</span>
535
+ </pre>
536
+ </div>
537
+ </div>
538
+ </div>
539
+
540
+ <div id="method-M000041" class="method-detail">
541
+ <a name="M000041"></a>
542
+
543
+ <div class="method-heading">
544
+ <a href="#M000041" class="method-signature">
545
+ <span class="method-name">internal_size</span><span class="method-args">()</span>
546
+ </a>
547
+ </div>
548
+
549
+ <div class="method-description">
550
+ <p>
551
+ Get the size of the internal array. This may be different from the heap
552
+ size, e.g. after <tt>sort</tt> has been called.
553
+ </p>
554
+ <p><a class="source-toggle" href="#"
555
+ onclick="toggleCode('M000041-source');return false;">[Source]</a></p>
556
+ <div class="method-source-code" id="M000041-source">
557
+ <pre>
558
+ <span class="ruby-comment cmt"># File lib/carat/heap.rb, line 184</span>
559
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">internal_size</span>
560
+ <span class="ruby-ivar">@array</span>.<span class="ruby-identifier">size</span>
561
+ <span class="ruby-keyword kw">end</span>
562
+ </pre>
563
+ </div>
564
+ </div>
565
+ </div>
566
+
567
+ <div id="method-M000038" class="method-detail">
568
+ <a name="M000038"></a>
569
+
570
+ <div class="method-heading">
571
+ <a href="#M000038" class="method-signature">
572
+ <span class="method-name">left</span><span class="method-args">(i)</span>
573
+ </a>
574
+ </div>
575
+
576
+ <div class="method-description">
577
+ <p>
578
+ Get the node left of node i &gt;= 0
579
+ </p>
580
+ <p><a class="source-toggle" href="#"
581
+ onclick="toggleCode('M000038-source');return false;">[Source]</a></p>
582
+ <div class="method-source-code" id="M000038-source">
583
+ <pre>
584
+ <span class="ruby-comment cmt"># File lib/carat/heap.rb, line 161</span>
585
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">left</span>(<span class="ruby-identifier">i</span>)
586
+ (<span class="ruby-identifier">i</span><span class="ruby-operator">&lt;&lt;</span><span class="ruby-value">1</span>) <span class="ruby-operator">+</span> <span class="ruby-value">1</span> <span class="ruby-comment cmt"># 2i+1</span>
587
+ <span class="ruby-keyword kw">end</span>
588
+ </pre>
589
+ </div>
590
+ </div>
591
+ </div>
592
+
593
+ <div id="method-M000037" class="method-detail">
594
+ <a name="M000037"></a>
595
+
596
+ <div class="method-heading">
597
+ <a href="#M000037" class="method-signature">
598
+ <span class="method-name">parent</span><span class="method-args">(i)</span>
599
+ </a>
600
+ </div>
601
+
602
+ <div class="method-description">
603
+ <p>
604
+ Get the parent of the node i &gt; 0.
605
+ </p>
606
+ <p><a class="source-toggle" href="#"
607
+ onclick="toggleCode('M000037-source');return false;">[Source]</a></p>
608
+ <div class="method-source-code" id="M000037-source">
609
+ <pre>
610
+ <span class="ruby-comment cmt"># File lib/carat/heap.rb, line 156</span>
611
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parent</span>(<span class="ruby-identifier">i</span>)
612
+ (<span class="ruby-identifier">i</span><span class="ruby-operator">-</span><span class="ruby-value">1</span>) <span class="ruby-operator">&gt;&gt;</span> <span class="ruby-value">1</span> <span class="ruby-comment cmt"># (i-1)/2, only valid iff i &gt; 0 !!</span>
613
+ <span class="ruby-keyword kw">end</span>
614
+ </pre>
615
+ </div>
616
+ </div>
617
+ </div>
618
+
619
+ <div id="method-M000039" class="method-detail">
620
+ <a name="M000039"></a>
621
+
622
+ <div class="method-heading">
623
+ <a href="#M000039" class="method-signature">
624
+ <span class="method-name">right</span><span class="method-args">(i)</span>
625
+ </a>
626
+ </div>
627
+
628
+ <div class="method-description">
629
+ <p>
630
+ Get the node right of node i &gt;= 0
631
+ </p>
632
+ <p><a class="source-toggle" href="#"
633
+ onclick="toggleCode('M000039-source');return false;">[Source]</a></p>
634
+ <div class="method-source-code" id="M000039-source">
635
+ <pre>
636
+ <span class="ruby-comment cmt"># File lib/carat/heap.rb, line 166</span>
637
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">right</span>(<span class="ruby-identifier">i</span>)
638
+ (<span class="ruby-identifier">i</span><span class="ruby-operator">&lt;&lt;</span><span class="ruby-value">1</span>) <span class="ruby-operator">+</span> <span class="ruby-value">2</span> <span class="ruby-comment cmt"># 2i+2</span>
639
+ <span class="ruby-keyword kw">end</span>
640
+ </pre>
641
+ </div>
642
+ </div>
643
+ </div>
644
+
645
+ <div id="method-M000042" class="method-detail">
646
+ <a name="M000042"></a>
647
+
648
+ <div class="method-heading">
649
+ <a href="#M000042" class="method-signature">
650
+ <span class="method-name">swap</span><span class="method-args">(i,j)</span>
651
+ </a>
652
+ </div>
653
+
654
+ <div class="method-description">
655
+ <p>
656
+ Swap elements in the array
657
+ </p>
658
+ <p><a class="source-toggle" href="#"
659
+ onclick="toggleCode('M000042-source');return false;">[Source]</a></p>
660
+ <div class="method-source-code" id="M000042-source">
661
+ <pre>
662
+ <span class="ruby-comment cmt"># File lib/carat/heap.rb, line 189</span>
663
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">swap</span>(<span class="ruby-identifier">i</span>,<span class="ruby-identifier">j</span>)
664
+ <span class="ruby-ivar">@array</span>[<span class="ruby-identifier">i</span>], <span class="ruby-ivar">@array</span>[<span class="ruby-identifier">j</span>] = <span class="ruby-ivar">@array</span>[<span class="ruby-identifier">j</span>], <span class="ruby-ivar">@array</span>[<span class="ruby-identifier">i</span>]
665
+ <span class="ruby-keyword kw">end</span>
666
+ </pre>
667
+ </div>
668
+ </div>
669
+ </div>
670
+
671
+
672
+ </div>
673
+
674
+
675
+ </div>
676
+
677
+
678
+ <div id="validator-badges">
679
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
680
+ </div>
681
+
682
+ </body>
683
+ </html>