Annotation of nono/vm/eventqueue.h, revision 1.1.1.1

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2021 nono project
                      4: // Licensed under nono-license.txt
                      5: //
                      6: 
                      7: #pragma once
                      8: 
                      9: #include <queue>
                     10: 
                     11: //
                     12: // イベントキュー
                     13: //
                     14: 
                     15: // 比較関数
                     16: template <class T>
                     17: class event_comp_t {
                     18:  public:
                     19:        inline bool operator()(const T& a, const T& b) const
                     20:        {
                     21:                return a->vtime > b->vtime;
                     22:        }
                     23: };
                     24: using event_comp = event_comp_t<Event *>;
                     25: 
                     26: // イベントキュー
                     27: class EventQueue
                     28:        : public std::priority_queue<Event *, std::vector<Event *>, event_comp>
                     29: {
                     30:        using inherited =
                     31:                std::priority_queue<Event *, std::vector<Event *>, event_comp>;
                     32: 
                     33:  public:
                     34:        EventQueue()
                     35:                : inherited((event_comp()))
                     36:        {
                     37:        }
                     38: 
                     39:        ~EventQueue()
                     40:        {
                     41:        }
                     42: 
                     43:        // キューから ev と(このオブジェクトのポインタが)一致する要素を外し
                     44:        // true を返す。なければ何もせず false を返す。
                     45:        // (独自メソッドなので大文字で始めている)
                     46:        bool Erase(Event *ev)
                     47:        {
                     48:                for (auto it = c.begin(); it != c.end(); ++it) {
                     49:                        Event *e = *it;
                     50:                        if (e == ev) {
                     51:                                // 見つけた要素を末尾に移動
                     52:                                std::pop_heap(it, c.end(), comp);
                     53:                                // 末尾を削除
                     54:                                c.pop_back();
                     55:                                // 再構築
                     56:                                std::make_heap(c.begin(), c.end(), comp);
                     57:                                return true;
                     58:                        }
                     59:                }
                     60:                return false;
                     61:        }
                     62: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.