白泽图

  • 文章
    • Unity渲染
    • Unity项目开发
    • 工具
    • 数学
    • 算法
    • 网站搭建
    • 网络&操作系统
蒋程个人博客
互联网技术经验总结&分享
  1. 首页
  2. Unity项目开发
  3. 正文

Lua Queue

2022-03-12 1060点热度 0人点赞 0条评论
function class(classname, super)  
    local superType = type(super)  
    local cls  
    if superType ~= "table" then  
        superType = nil  
        super = nil  
    end
    if super then  
        cls = {}
        setmetatable(cls, {__index = super})  
        cls.super = super  
    else
        cls = {ctor = function() end}  
    end

    cls.__cname = classname  
    cls.__ctype = 2
    cls.__index = cls  

    function cls.new(...)  
        local instance = setmetatable({}, cls)  
        instance.class = cls  
        instance:ctor(...)
        return instance
    end  

	return cls
end
--[[
    lua队列(下标从1开始)
    create by jiangcheng_m
]]

local Queue = class("Queue")

function Queue:ctor()
    self:Clear()
end


function Queue:Enqueue(item)
    self.m_LastIndex = self.m_LastIndex + 1
    self.m_Cache[self.m_LastIndex] = item
end


function Queue:Dequeue()
    local item = self:Peek()
    if item then
        self.m_Cache[self.m_FirstIndex] = nil
        self.m_FirstIndex = self.m_FirstIndex + 1
        return item
    end
    return nil
end


function Queue:Peek()
    if self.m_FirstIndex > self.m_LastIndex then
        return nil
    end
    return self.m_Cache[self.m_FirstIndex]
end


function Queue:Count()
    return self.m_LastIndex - self.m_FirstIndex + 1
end


function Queue:ToArray()
    local list = {}
    for i = self.m_FirstIndex,self.m_LastIndex do
        table.insert(list,self.m_Cache[i])
    end
    return list
end


function Queue:GetElement(i)
    local offset = self.m_FirstIndex - 1
    local itemIndex = i + offset
    return self.m_Cache[itemIndex]
end


function Queue:Clear()
    self.m_Cache = {}
    self.m_FirstIndex = 1
    self.m_LastIndex = 0
end



return Queue

测试

        local Queue = require("Utility/Queue")
        local queue = Queue.new()
        
        queue:Enqueue(1)
        queue:Enqueue(2)
        queue:Enqueue(3)
        queue:Enqueue(4)

        print(queue:Count())
        print("-------------------")

        print(queue:Peek())
        print(queue:Count())
        print("-------------------")

        print(queue:Dequeue())
        print(queue:Count())
        print("-------------------")

        queue:Enqueue(5)
        print(queue:Count())
        print("-------------------")

        local count = queue:Count()
        for i = 1,count do
            print(queue:GetElement(i))
        end
        print("-------------------")
        
        queue:Clear()
        print(queue:Count())
        print("-------------------")

        print(tostring(queue:Dequeue()))

结果

标签: 暂无
最后更新:2022-03-12

蒋程

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

COPYRIGHT © 2023 白泽图. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

登录
注册|忘记密码?