download LinkedList.rb
Language: Ruby
LOC: 94
Project Info
RCoaster Music System(rcoaster)
Server: RubyForge
Type: cvs
...ster\rcoaster\rcoaster\src\
   assert.rb
   BlockCommand.rb
   BufferedIO.rb
   CloseCall.rb
   CommandDispatcher.rb
   CommandPlayer2.rb
   CommandRunner2.rb
   ConfReader.rb
   DeferredIO.rb
   DirFilter.rb
   DirListGenerator.rb
   Entry.rb
   EntryList.rb
   EvalCommand.rb
   Evaluator.rb
   Events.rb
   FileSong.rb
   Flite.rb
   FuzzyMatch.rb
   GenericSongList.rb
   HTTPSong.rb
   HTTPStream.rb
   ICYStream.rb
   InfoGuesser.rb
   IOReader.rb
   LinkedList.rb
   log.rb
   LogObserver.rb
   MirroredIO.rb
   MultiDirFilter.rb
   NoRatingSongFinder.rb
   Notifier.rb
   object_log.rb
   OutputPipe.rb
   parseopts.rb
   PlayerBase.rb
   PlayList.rb
   PlayNextSong.rb
   PluginManager.rb
   QueueHistorySongFinder.rb
   QueueSongList.rb
   RingBuffer.rb
   SimpleRatingDB.rb
   Song.rb
   SongEntry.rb
   SongList.rb
   SongListManager.rb
   SongStore.rb
   SortableSongList.rb
   StringCommandParser.rb
   SyncList.rb
   TCPHelper.rb
   TCPPlayer.rb
   TCPReader.rb
   TestFork.rb
   ThreadMaker.rb
   VFile.rb
   VHTTP.rb
   VLocal.rb
   VManager.rb
   VRemote.rb
   XOSDStatus.rb

class LinkedList

	include Enumerable

	def initialize
		@first = Node.new nil
		@last = Node.new nil

		@first.next = @last
		@last.prev = @first
		@size = 0
	end

	def addLast(object)
		node = Node.new(object)
		node.next = @last
		node.prev = @last.prev
		
		@last.prev.next = node
		@last.prev = node
		@size += 1
	end

	def addFirst(object)
		node = Node.new(object)
		node.prev = @first
		node.next = @first.next
		
		@first.next.prev = node
		@first.next = node
		@size += 1
	end

	def last
		if @size <= 0
			raise "No objects in list"
		end

		return @last.prev.object
	end

	def first
		if @size <= 0
			raise "No objects in list"
		end

		return @first.next.object
	end

	def removeLast
		if @size <= 0
			raise "No objects in list"
		end

		node = @last.prev
		node.prev.next = @last
		@last.prev = node.prev
		@size -= 1

		return node.object
	end

	def removeFirst
		if @size <= 0
			raise "No objects in list"
		end

		node = @first.next
		node.next.prev = @first
		@first.next = node.next
		@size -= 1

		return node.object
	end

	def size
		return @size
	end

	def each
		node = @first.next
		while node != @last
			yield node.object
			node = node.next
		end
	end

	def reverse_each
		node = @last
		loop do
			yield node.object
			node = node.prev
			if ! node
				break
			end
		end
	end

	class Node
		
		attr_reader :object
		attr_reader :prev
		attr_reader :next
		
		attr_writer :next
		attr_writer :prev

		def initialize(object)
			@object = object
		end

		def dump(io)
			io.puts "===== #{self} ====="
			io.puts "Object: #{@object}"
			io.puts "Prev: #{@prev}"
			io.puts "Next: #{@next}"
		end
	end

end

About Koders | Resources | Downloads | Support | Black Duck | Submit Project | Terms of Service | DMCA | Privacy Policy | Site Map| Contact Us