skia之雙向隊列SkDeque

        skia中的SkDeque代表的是雙向隊列。本文簡單說一下它的算法,由於算法並不複雜,就不分析它的源碼了。

  • 初始化
        下圖表示的是SkDeque,初始化時候的狀態,整個隊列數據部分實際上就是一塊白色區域所顯示的內存,該區域又它的頭部來描述,頭部對應的類型爲SkDeque::Head。我們可以通過函數push_front()往隊列頭部添加數據節點,也可以通過push_back()往隊列末端添加數據節點。

  • 擴展
        當上圖的數據區滿了以後就需要擴充,擴充後的結構如下圖所示。若頭部沒空間了,則在左側再分配一塊內存塊,尾部沒空間了也亦然。當隊列縮小時,也可以釋放掉未使用的內存塊。其所謂,進退自如。

  • 遍歷
        最後一個問題就是,如何遍歷隊列中的每個數據節點。SkDeque中提供了內部類SkDeque::Iter,通過它可以遍歷整個隊列。用的時候也很簡單,首先用SkDeque初始化Iter,然後調用Iter的next()函數遍歷每個函數,具體可以參考源碼。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章