Skip to content
Snippets Groups Projects
Commit 74e4cbd3 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Add a zone descriptor mechanism

parent 75ecd2e5
No related branches found
No related tags found
1 merge request!136Displace NamedBoundaryDescriptor and NumberedBoundaryDescriptor
#ifndef I_ZONE_DESCRIPTOR_HPP
#define I_ZONE_DESCRIPTOR_HPP
#include <mesh/RefId.hpp>
#include <iostream>
class IZoneDescriptor
{
public:
enum class Type
{
named,
numbered
};
protected:
virtual std::ostream& _write(std::ostream& os) const = 0;
public:
friend std::ostream&
operator<<(std::ostream& os, const IZoneDescriptor& zone_descriptor)
{
return zone_descriptor._write(os);
}
[[nodiscard]] virtual bool operator==(const RefId& ref_id) const = 0;
[[nodiscard]] friend bool
operator==(const RefId& ref_id, const IZoneDescriptor& zone_descriptor)
{
return zone_descriptor == ref_id;
}
[[nodiscard]] virtual Type type() const = 0;
IZoneDescriptor(const IZoneDescriptor&) = delete;
IZoneDescriptor(IZoneDescriptor&&) = delete;
IZoneDescriptor() = default;
virtual ~IZoneDescriptor() = default;
};
#endif // I_ZONE_DESCRIPTOR_HPP
#ifndef NAMED_ZONE_DESCRIPTOR_HPP
#define NAMED_ZONE_DESCRIPTOR_HPP
#include <mesh/IZoneDescriptor.hpp>
#include <iostream>
#include <string>
class NamedZoneDescriptor final : public IZoneDescriptor
{
private:
std::string m_name;
std::ostream&
_write(std::ostream& os) const final
{
os << '"' << m_name << '"';
return os;
}
public:
bool
operator==(const RefId& ref_id) const final
{
return m_name == ref_id.tagName();
}
Type
type() const final
{
return Type::named;
}
NamedZoneDescriptor(const NamedZoneDescriptor&) = delete;
NamedZoneDescriptor(NamedZoneDescriptor&&) = delete;
NamedZoneDescriptor(const std::string& name) : m_name(name)
{
;
}
virtual ~NamedZoneDescriptor() = default;
};
#endif // NAMED_ZONE_DESCRIPTOR_HPP
#ifndef NUMBERED_ZONE_DESCRIPTOR_HPP
#define NUMBERED_ZONE_DESCRIPTOR_HPP
#include <mesh/IZoneDescriptor.hpp>
#include <iostream>
class NumberedZoneDescriptor final : public IZoneDescriptor
{
private:
unsigned int m_number;
std::ostream&
_write(std::ostream& os) const final
{
os << '"' << m_number << '"';
return os;
}
bool
operator==(const RefId& ref_id) const final
{
return m_number == ref_id.tagNumber();
}
public:
Type
type() const final
{
return Type::numbered;
}
NumberedZoneDescriptor(const NumberedZoneDescriptor&) = delete;
NumberedZoneDescriptor(NumberedZoneDescriptor&&) = delete;
NumberedZoneDescriptor(unsigned int number) : m_number(number) {}
virtual ~NumberedZoneDescriptor() = default;
};
#endif // NUMBERED_ZONE_DESCRIPTOR_HPP
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment