Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Copyright (c) 2015, Franco Sauvisky
- -- All rights reserved.
- -- Redistribution and use in source and binary forms, with or without
- -- modification, are permitted provided that the following conditions
- -- are met:
- -- 1. Redistributions of source code must retain the above copyright
- -- notice, this list of conditions and the following disclaimer.
- -- 2. Redistributions in binary form must reproduce the above copyright
- -- notice, this list of conditions and the following disclaimer in the
- -- documentation and/or other materials provided with the distribution.
- -- 3. The name of the author may not be used to endorse or promote products
- -- derived from this software without specific prior written permission.
- -- THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- -- IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- -- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- -- IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- -- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- -- NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- -- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- -- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- -- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- -- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- -- Simple queue/list class:
- -- It might be useful to change the popleft and popright errors to "return
- -- nil", depending on how you use it (if having nil elements is permitted).
- local List = {begin = 0, final = 1}
- function List:new()
- local newlist = {}
- setmetatable(newlist,self)
- self.__index = self
- return newlist
- end
- function List:pushleft(value)
- self[self.begin] = value
- self.begin = self.begin - 1
- end
- function List:pushright(value)
- self[self.final] = value
- self.final = self.final + 1
- end
- function List:popright()
- if self.final == self.begin + 1 then
- error("No element to pop") -- Or return nil?
- end
- local value = self[self.final - 1]
- self[self.final] = nil
- self.final = self.final - 1
- return value
- end
- function List:popleft()
- if self.begin == self.final - 1 then
- error("No element to pop") -- Or return nil?
- end
- local value = self[self.begin + 1]
- self[self.begin] = nil
- self.begin = self.begin + 1
- return value
- end
- return List
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement