Skip to content

File AccessArray.hpp

File List > astrea > trace > trace > risesets > AccessArray.hpp

Go to the documentation of this file

#pragma once

#include <gtl/btree.hpp>

#include <trace/risesets/RiseSetArray.hpp>
#include <trace/types/IdPair.hpp>

namespace astrea {
namespace trace {

class AccessArray {

    friend std::ostream& operator<<(std::ostream& os, const AccessArray& accessarray);

  public:
    AccessArray() = default;

    ~AccessArray() = default;

    RiseSetArray& operator[](const std::size_t& senderId, const std::size_t& receiverId);

    const RiseSetArray& at(const std::size_t& senderId, const std::size_t& receiverId) const;

    bool contains(const IdPair& idPair) const;

    void erase(const std::size_t& senderId, const std::size_t& receiverId);

    std::size_t size() const;

    RiseSetArray get_all_accesses_to_receiver(const std::size_t& receiverId) const;

    RiseSetArray get_all_accesses_from_sender(const std::size_t& senderId) const;

    bool operator==(const AccessArray& other) const;

    AccessArray& operator|=(const AccessArray& other);

    AccessArray operator|(const AccessArray& other) const;

    AccessArray& operator&=(const AccessArray& other);

    AccessArray operator&(const AccessArray& other) const;

    using iterator = gtl::btree_map<IdPair, RiseSetArray>::iterator;

    using const_iterator = gtl::btree_map<IdPair, RiseSetArray>::const_iterator;

    iterator begin() { return _accesses.begin(); }

    iterator end() { return _accesses.end(); }

    const_iterator begin() const { return _accesses.begin(); }

    const_iterator end() const { return _accesses.end(); }

    const_iterator cbegin() const { return _accesses.cbegin(); }

    const_iterator cend() const { return _accesses.cend(); }

  private:
    gtl::btree_map<IdPair, RiseSetArray> _accesses; 
};

} // namespace trace
} // namespace astrea