Annotation of nono/lib/qvector.h, revision 1.1.1.2

1.1       root        1: //
                      2: // nono
1.1.1.2 ! root        3: // Copyright (C) 2020 nono project
        !             4: // Licensed under nono-license.txt
1.1       root        5: //
                      6: 
                      7: #pragma once
                      8: 
1.1.1.2 ! root        9: #include "header.h"
1.1       root       10: #include <vector>
                     11: 
                     12: // std::vector だが所々 queue っぽく使いたい。
                     13: // イーサネットフレームの受信のところで使用する。
                     14: // 配列からさくっとコンストラクト出来て(a)、
                     15: // 先頭から1要素ずつ取り出していきたい(b)。
                     16: // std::vector は a は得意だが、b は効率が悪すぎる。
                     17: // std::deque は b は近いことは効率よくできるが、a が効率悪い。
                     18: 
                     19: // qvector<T>
                     20: //     std::vector と std::deque の都合のいいところだけを真似した
                     21: //     フレーム受信処理に都合のいいクラス。
                     22: 
                     23: template<class T>
                     24: class qvector
                     25: {
                     26:  public:
                     27:        qvector() { }
                     28:        // 配列の先頭と末尾+1を指定するコンストラクタ
                     29:        qvector(T *begin, T *end) {
                     30:                v = std::vector<T>(begin, end);
                     31:                cur = 0;
                     32:        }
                     33: 
                     34:        // 先頭の1要素を削除して、返す。
                     35:        // 空の場合の動作は不定。
                     36:        T pop() {
                     37:                if (__predict_true(cur < v.size())) {
                     38:                        return v[cur++];
                     39:                } else {
                     40:                        // XXX 動作不定
                     41:                        return 0;
                     42:                }
                     43:        }
                     44: 
                     45:        // 現在の要素数を返す。
                     46:        size_t size() {
                     47:                return v.size() - cur;
                     48:        }
                     49: 
                     50:        // 空なら true を返す。
                     51:        bool empty() {
                     52:                return (cur == v.size());
                     53:        }
                     54: 
                     55:        // クリアする。
                     56:        void clear() {
                     57:                v.clear();
                     58:                cur = 0;
                     59:        }
                     60: 
                     61:  private:
                     62:        std::vector<T> v {};
                     63:        int cur = 0;
                     64: };

unix.superglobalmegacorp.com

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