Skip to content

File AccessObject.hpp

File List > astrea > trace > trace > platforms > AccessObject.hpp

Go to the documentation of this file

#pragma once

#include <memory>

#include <trace/risesets/AccessArray.hpp>
#include <trace/types/typedefs.hpp>

namespace astrea {
namespace trace {

class AccessObject {

  protected:
    AccessObject() = default;

    virtual ~AccessObject() = default;

  public:
    void add_access(const std::size_t& receiverId, const RiseSetArray& access)
    {
        if (_accesses.contains({ get_id(), receiverId })) {
            _accesses[get_id(), receiverId] = (_accesses[get_id(), receiverId] | access);
        }
        else {
            _accesses[get_id(), receiverId] = access;
        }
    }

    void drop_access(const std::size_t& receiverId, const RiseSetArray& access)
    {
        _accesses.erase(get_id(), receiverId);
    }

    AccessArray& get_accesses() { return _accesses; }

    const AccessArray& get_accesses() const { return _accesses; }

    virtual std::size_t get_id() const = 0;

  private:
    AccessArray _accesses; 
};

} // namespace trace
} // namespace astrea