4chan-x/src/General/lib/randomaccesslist.class
Zixaphir 9d95bbea35 Merge branch 'mayhem' into v3 -- Still broken, do not merge (yet)
Conflicts:
	CHANGELOG.md
	Gruntfile.coffee
	css/burichan.css
	css/futaba.css
	css/photon.css
	css/style.css
	css/tomorrow.css
	css/yotsuba-b.css
	css/yotsuba.css
	html/General/Index-navlinks.html
	html/General/Settings-section-Rice.html
	html/General/Settings.html
	html/Posting/QR.html
	json/archives.json
	package.json
	src/Filtering/PostHiding.coffee
	src/Filtering/Recursive.coffee
	src/Filtering/ThreadHiding.coffee
	src/General/Build.coffee
	src/General/Config.coffee
	src/General/Get.coffee
	src/General/Header.coffee
	src/General/Index.coffee
	src/General/Main.coffee
	src/General/Settings.coffee
	src/General/UI.coffee
	src/General/lib/$.coffee
	src/General/lib/databoard.class
	src/General/lib/post.class
	src/General/lib/thread.class
	src/Images/ImageExpand.coffee
	src/Images/RevealSpoilers.coffee
	src/Linkification/Linkify.coffee
	src/Menu/Menu.coffee
	src/Miscellaneous/ExpandThread.coffee
	src/Miscellaneous/IDColor.coffee
	src/Miscellaneous/Keybinds.coffee
	src/Monitoring/ThreadUpdater.coffee
	src/Monitoring/Unread.coffee
	src/Posting/QR.captcha.coffee
	src/Posting/QR.coffee
	src/Posting/QR.cooldown.coffee
	src/Quotelinks/QuoteBacklink.coffee
	src/Quotelinks/QuoteCT.coffee
	src/Quotelinks/QuoteOP.coffee
	src/Quotelinks/QuoteStrikeThrough.coffee
	src/Quotelinks/QuoteYou.coffee
	src/Quotelinks/Quotify.coffee
2014-02-23 14:04:45 -07:00

80 lines
1.3 KiB
Plaintext

class RandomAccessList
constructor: (items) ->
@length = 0
@push item for item in items if items
push: (data) ->
{ID} = data
ID or= data.id
return if @[ID]
{last} = @
@[ID] = item =
prev: last
next: null
data: data
ID: ID
item.prev = last
@last = if last
last.next = item
else
@first = item
@length++
before: (root, item) ->
return if item.next is root
@rmi item
{prev} = root
root.prev = item
item.next = root
item.prev = prev
prev.next = item if prev
after: (root, item) ->
return if item.prev is root
@rmi item
{next} = root
root.next = item
item.prev = root
item.next = next
next.prev = item if next
prepend: (item) ->
{first} = @
return if item is first or not @[item.ID]
@rmi item
item.next = first
first.prev = item
@first = item
delete item.prev
shift: ->
@rm @first.ID
order: ->
order = [item = @first]
order.push item while item = item.next
order
rm: (ID) ->
item = @[ID]
return unless item
delete @[ID]
@length--
@rmi item
delete item.next
delete item.prev
rmi: (item) ->
{prev, next} = item
if prev
prev.next = next
else
@first = next
if next
next.prev = prev
else
@last = prev