summaryrefslogtreecommitdiff
path: root/src/slice.hpp
blob: 2011e8c285468a2d4c04dc31efae49f69afc2c09 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#pragma once

#include <stddef.h>

template<typename T>
class slice
{
    T* ptr;
    size_t len;
public:
    slice(T* ptr, size_t len): ptr(ptr), len(len) {}

    T* begin() { return ptr; }
    T* end() { return ptr + len; }
    const T* begin() const { return ptr; }
    const T* end() const { return ptr + len; }
};

namespace std {
    template<typename T>
    ostream& operator<<(ostream& os, const slice<T>& x) {
        os << "[";
        bool first = true;
        for(const auto& e : x)
        {
            if(!first)
                os << ",";
            first = false;
            os << e;
        }
        os << "]";
        return os;
    }
}