#pragma once #include "Surface.h" #include "SurfaceCharge.h" #include "SurfaceComp.h" #include "WrapperBase.hpp" #include "phrqtype.h" #include #include #include #include #include #include class SurfaceWrapper : public WrapperBase { public: SurfaceWrapper(cxxSurface *surf, const std::set &solution_primaries, const std::vector &comp_formulas, const std::vector &charge_names); void get(std::span &surface) const override; void set(const std::span &surface) override; static std::vector names(cxxSurface *surface, const std::set &solution_primaries, std::vector &comp_formulas, std::vector &charge_names); private: cxxSurface *surface; class SurfaceCompWrapper : public WrapperBase { public: SurfaceCompWrapper(cxxSurfaceComp &comp); void get(std::span &surface) const; void set(const std::span &surface); static std::vector names(cxxSurfaceComp &comp); private: cxxSurfaceComp &surface_comp; static constexpr std::size_t NUM_NOT_TOTALS = 3; std::vector total_names; }; class SurfaceChargeWrapper : public WrapperBase { public: SurfaceChargeWrapper(cxxSurfaceCharge &charge, const std::set &solution_primaries); void get(std::span &surface) const; void set(const std::span &surface); static std::vector names(cxxSurfaceCharge *charge, const std::set &primaries); private: cxxSurfaceCharge &surface_charge; static constexpr std::size_t NUM_NOT_TOTALS = 5; std::set primaries; }; std::vector> surface_comps; std::vector> surface_charges; };