<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: priority code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sat, 17 May 2008 22:54:21 GMT</pubDate>
    <description>DZone Snippets: priority code</description>
    <item>
      <title>priority-queue functions</title>
      <link>http://snippets.dzone.com/posts/show/1142</link>
      <description>&lt;code&gt;&lt;br /&gt;REBOL [&lt;br /&gt;    Title: "Cheasy (Cheap-n-Easy) Priority Queue"&lt;br /&gt;]&lt;br /&gt;&lt;br /&gt;pq-insert: func [&lt;br /&gt;    list [any-block!]   "The queue"&lt;br /&gt;    item&lt;br /&gt;    priority [integer!]&lt;br /&gt;][&lt;br /&gt;    sort/skip/reverse append list reduce [priority item] 2&lt;br /&gt;]&lt;br /&gt;&lt;br /&gt;pq-remove: func [&lt;br /&gt;    "Remove an item from the priority queue"&lt;br /&gt;    list [any-block!]   "The queue"&lt;br /&gt;    /index  "Remove a specific item"&lt;br /&gt;        idx [integer!] "The specific item to remove"&lt;br /&gt;][&lt;br /&gt;    remove/part either index [at list (idx * 2 - 1)][head list] 2&lt;br /&gt;]&lt;br /&gt;&lt;br /&gt;pq-first: func [&lt;br /&gt;    list [any-block!]   "The queue"&lt;br /&gt;][&lt;br /&gt;    ; skip over the priority value and return the actual value&lt;br /&gt;    ; that was inserted in the queue.&lt;br /&gt;    first next head list&lt;br /&gt;]&lt;br /&gt;&lt;br /&gt;priority-queue: make object! [&lt;br /&gt;    data: copy []&lt;br /&gt;&lt;br /&gt;    insert: func [item priority] [pq-insert data item priority]&lt;br /&gt;&lt;br /&gt;    remove: func [/index idx] [&lt;br /&gt;        either index [pq-remove/index data idx][pq-remove data]&lt;br /&gt;    ]&lt;br /&gt;&lt;br /&gt;    first: does [pq-first data]&lt;br /&gt;]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;pq: copy []&lt;br /&gt;print pq-insert pq "A" 1&lt;br /&gt;print pq-insert pq "B" 10&lt;br /&gt;print pq-insert pq "C" 100&lt;br /&gt;print pq-insert pq "D" 1000&lt;br /&gt;print pq-remove/index pq 3&lt;br /&gt;print pq-remove pq&lt;br /&gt;print mold pq&lt;br /&gt;print pq-insert pq "CC" 100&lt;br /&gt;print pq-insert pq "CCC" 100&lt;br /&gt;print pq-insert pq "D" 1000&lt;br /&gt;print pq-insert pq "CCCC" 100&lt;br /&gt;print pq-insert pq "CCCCC" 100&lt;br /&gt;print pq-remove pq&lt;br /&gt;print pq-insert pq "CCCCCC" 100&lt;br /&gt;print pq-insert pq "CCCCCCC" 100&lt;br /&gt;&lt;br /&gt;print ""&lt;br /&gt;&lt;br /&gt;pq: make priority-queue []&lt;br /&gt;print pq/insert"A" 1&lt;br /&gt;print pq/insert"B" 10&lt;br /&gt;print pq/insert"C" 100&lt;br /&gt;print pq/insert"D" 1000&lt;br /&gt;print pq/remove/index 3&lt;br /&gt;print pq/remove ;pq&lt;br /&gt;print mold pq/data&lt;br /&gt;print pq/insert"CC" 100&lt;br /&gt;print pq/insert"CCC" 100&lt;br /&gt;print pq/insert"D" 1000&lt;br /&gt;print pq/insert"CCCC" 100&lt;br /&gt;print pq/insert"CCCCC" 100&lt;br /&gt;print pq/remove ;pq/data&lt;br /&gt;print pq/insert"CCCCCC" 100&lt;br /&gt;print pq/insert"CCCCCCC" 100&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;halt&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 13 Jan 2006 04:00:13 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/1142</guid>
      <author>gregg.irwin (Gregg Irwin)</author>
    </item>
  </channel>
</rss>
