#ifndef I_BOUNDARY_CONDITION_DESCRIPTOR_HPP #define I_BOUNDARY_CONDITION_DESCRIPTOR_HPP #include <iostream> class IBoundaryConditionDescriptor { public: enum class Type { dirichlet, fourier, free, neumann, symmetry }; protected: virtual std::ostream& _write(std::ostream& os) const = 0; public: friend std::ostream& operator<<(std::ostream& os, const IBoundaryConditionDescriptor& bcd) { return bcd._write(os); } virtual Type type() const = 0; IBoundaryConditionDescriptor() = default; IBoundaryConditionDescriptor(const IBoundaryConditionDescriptor&) = delete; IBoundaryConditionDescriptor(IBoundaryConditionDescriptor&&) = delete; virtual ~IBoundaryConditionDescriptor() = default; }; #endif // I_BOUNDARY_CONDITION_DESCRIPTOR_HPP