From 9c8b55ce438869b2070ef9dbe115466cb47a528a Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 30 Jun 2019 18:16:56 +0800 Subject: ... --- include/cru/platform/exception.hpp | 11 ++++++++++- include/cru/win/graph/direct/geometry.hpp | 7 ++++++- 2 files changed, 16 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/cru/platform/exception.hpp b/include/cru/platform/exception.hpp index 6dae08c5..b1e505e0 100644 --- a/include/cru/platform/exception.hpp +++ b/include/cru/platform/exception.hpp @@ -6,6 +6,15 @@ namespace cru::platform { class PlatformException : public std::runtime_error { public: - using runtime_error::runtime_error; // inherent constructors + using runtime_error::runtime_error; // inherit constructors +}; + +// This exception is throwed when a resource has been disposed and not usable +// again. +// For example, calling Build twice on a GeometryBuild will lead to this +// exception. +class ReuseException : public std::runtime_error { + public: + using runtime_error::runtime_error; // inherit constructors }; } // namespace cru::platform diff --git a/include/cru/win/graph/direct/geometry.hpp b/include/cru/win/graph/direct/geometry.hpp index f40db7af..1ee60247 100644 --- a/include/cru/win/graph/direct/geometry.hpp +++ b/include/cru/win/graph/direct/geometry.hpp @@ -3,6 +3,7 @@ #include "direct_factory.hpp" #include "platform_id.hpp" +#include "cru/platform/exception.hpp" #include "cru/platform/graph/geometry.hpp" namespace cru::platform::graph::win::direct { @@ -16,7 +17,7 @@ class D2DGeometryBuilder : public GeometryBuilder { D2DGeometryBuilder(D2DGeometryBuilder&& other) = delete; D2DGeometryBuilder& operator=(D2DGeometryBuilder&& other) = delete; - ~D2DGeometryBuilder() override; + ~D2DGeometryBuilder() override = default; CRU_PLATFORMID_IMPLEMENT_DIRECT @@ -31,6 +32,10 @@ class D2DGeometryBuilder : public GeometryBuilder { private: bool IsValid() { return geometry_ != nullptr; } + void CheckValidation() { + if (!IsValid()) + throw ReuseException("The geometry builder is already disposed."); + } private: Microsoft::WRL::ComPtr geometry_; -- cgit v1.2.3