File: buffer.h

package info (click to toggle)
dolphin-emu 2603%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 69,040 kB
  • sloc: cpp: 442,137; ansic: 117,979; python: 6,438; sh: 2,387; asm: 726; makefile: 394; pascal: 257; javascript: 183; perl: 97; objc: 75; xml: 8
file content (70 lines) | stat: -rwxr-xr-x 1,673 bytes parent folder | download
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#pragma once

#include <cstddef>
#include <tuple>
#include <vector>
#include <type_traits>

#include "libipc/imp/export.h"
#include "libipc/def.h"

namespace ipc {

class LIBIPC_EXPORT buffer {
public:
    using destructor_t = void (*)(void*, std::size_t);

    buffer();

    buffer(void* p, std::size_t s, destructor_t d);
    // mem_to_free: pointer to be passed to destructor (if different from p)
    // Use case: when p points into a larger allocated block that needs to be freed
    buffer(void* p, std::size_t s, destructor_t d, void* mem_to_free);
    buffer(void* p, std::size_t s);

    template <std::size_t N>
    explicit buffer(byte_t (& data)[N])
        : buffer(data, sizeof(data)) {
    }
    explicit buffer(char & c);

    buffer(buffer&& rhs);
    ~buffer();

    void swap(buffer& rhs);
    buffer& operator=(buffer rhs);

    bool empty() const noexcept;

    void *       data()       noexcept;
    void const * data() const noexcept;

    template <typename T>
    T get() const { return T(data()); }

    std::size_t size() const noexcept;

    std::tuple<void*, std::size_t> to_tuple() {
        return std::make_tuple(data(), size());
    }

    std::tuple<void const *, std::size_t> to_tuple() const {
        return std::make_tuple(data(), size());
    }

    std::vector<byte_t> to_vector() const {
        return {
            get<byte_t const *>(),
            get<byte_t const *>() + size()
        };
    }

    friend LIBIPC_EXPORT bool operator==(buffer const & b1, buffer const & b2);
    friend LIBIPC_EXPORT bool operator!=(buffer const & b1, buffer const & b2);

private:
    class buffer_;
    buffer_* p_;
};

} // namespace ipc