neoGFX
Cross-platform C++ app/game engine
Loading...
Searching...
No Matches
object.hpp
Go to the documentation of this file.
1// object.hpp
2/*
3 * Copyright (c) 2018, 2020 Leigh Johnston.
4 *
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are
9 * met:
10 *
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 *
14 * * Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 *
18 * * Neither the name of Leigh Johnston nor the names of any
19 * other contributors to this software may be used to endorse or
20 * promote products derived from this software without specific prior
21 * written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
24 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
25 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
27 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 */
35
36#pragma once
37
38#include <neolib/neolib.hpp>
40#include <neolib/task/event.hpp>
41#include <neolib/task/event.hpp>
43
44namespace neolib
45{
46 template <typename Base = i_object>
47 class object : public lifetime<Base>
48 {
50 public:
53 public:
55 base_type{ aState }
56 {
57 }
59 {
61 }
62 // i_lifetime
63 public:
66 void set_destroying() override
67 {
68 if (is_alive())
69 {
70 Destroying.trigger();
72 }
73 }
74 void set_destroyed() override
75 {
76 if (!is_destroyed())
77 {
78 Destroyed.trigger();
80 }
81 }
82 };
83}
void set_destroying() override
Definition lifetime.hpp:165
void set_destroyed() override
Definition lifetime.hpp:176
bool is_alive() const final
Definition lifetime.hpp:139
bool is_destroyed() const final
Definition lifetime.hpp:151
object(lifetime_state aState=lifetime_state::Creating)
Definition object.hpp:54
define_declared_event(Destroying, destroying)
bool is_alive() const final
Definition lifetime.hpp:139
void set_destroying() override
Definition object.hpp:66
define_declared_event(Destroyed, destroyed)
bool is_destroyed() const final
Definition lifetime.hpp:151
void set_destroyed() override
Definition object.hpp:74
auto destroyed(Object &aObject, const Handler aHandler)
Definition i_object.hpp:73
auto destroying(Object &aObject, const Handler aHandler)
Definition i_object.hpp:64