1#ifndef IREP2_GUARD_SEQ_H_
2#define IREP2_GUARD_SEQ_H_
5#include <immer/vector.hpp>
6#include <immer/memory_policy.hpp>
46 using memory_policy = immer::memory_policy<
47 immer::default_heap_policy,
48 immer::unsafe_refcount_policy,
49 immer::no_lock_policy>;
50 using vector_t = immer::vector<expr2tc, memory_policy>;
54 explicit guard_seq(vector_t v) : v_(std::move(v))
92 v_ = std::move(v_).push_back(e);
96 guard_seq
prefix(std::size_t n)
const
109 for (std::size_t i = n; i < v_.size(); ++i)
const expr2tc & front() const
Definition guard_seq.h:81
const_iterator begin() const
Definition guard_seq.h:120
vector_t::const_iterator const_iterator
Definition guard_seq.h:119
bool empty() const
Definition guard_seq.h:65
bool operator==(const guard_seq &o) const
Definition guard_seq.h:129
guard_seq prefix(std::size_t n) const
Logical prefix [0, n) — shares subtrees, no element copies.
Definition guard_seq.h:96
void clear()
Definition guard_seq.h:114
std::size_t size() const
Definition guard_seq.h:61
const_iterator end() const
Definition guard_seq.h:124
const expr2tc & operator[](std::size_t i) const
Definition guard_seq.h:77
const expr2tc & back() const
Definition guard_seq.h:85
void push_back(const expr2tc &e)
Definition guard_seq.h:90
bool operator!=(const guard_seq &o) const
Definition guard_seq.h:133
guard_seq suffix(std::size_t n) const
Logical suffix [n, size).
Definition guard_seq.h:106
irep_container< expr2t > expr2tc
Definition irep2.h:431