GCC Code Coverage Report


Directory: src/gate/
File: src/gate/cxx_delegates.cpp
Date: 2025-09-14 13:10:38
Exec Total Coverage
Lines: 31 31 100.0%
Functions: 9 9 100.0%
Branches: 2 2 100.0%

Line Branch Exec Source
1 /* GATE PROJECT LICENSE:
2 +----------------------------------------------------------------------------+
3 | Copyright(c) 2018-2025, Stefan Meislinger <sm@opengate.at> |
4 | All rights reserved. |
5 | |
6 | Redistribution and use in source and binary forms, with or without |
7 | modification, are permitted provided that the following conditions are met:|
8 | |
9 | 1. Redistributions of source code must retain the above copyright notice, |
10 | this list of conditions and the following disclaimer. |
11 | 2. Redistributions in binary form must reproduce the above copyright |
12 | notice, this list of conditions and the following disclaimer in the |
13 | documentation and/or other materials provided with the distribution. |
14 | |
15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"|
16 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
17 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
18 | ARE DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
19 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
20 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
21 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
22 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
23 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
24 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
25 | THE POSSIBILITY OF SUCH DAMAGE. |
26 +----------------------------------------------------------------------------+
27 */
28
29 #include "gate/delegates.hpp"
30
31 namespace gate
32 {
33
34 1 Delegate::Delegate()
35 {
36 1 Mem::clear(&this->impl, sizeof(this->impl));
37 1 }
38
39 52 Delegate::Delegate(gate_delegate_dispatcher_t dispatcher, void* obj_ptr, void* function_ptr, size_t function_ptr_size)
40 {
41 52 Mem::clear(&this->impl, sizeof(this->impl));
42 52 this->impl.dispatcher = dispatcher;
43 52 this->impl.object_ptr = obj_ptr;
44 52 Mem::copy(&this->impl.function_storage, function_ptr, function_ptr_size);
45 52 }
46
47 70 Delegate::~Delegate()
48 {
49 70 }
50
51 14 result_t Delegate::handle_exception()
52 {
53 14 result_t result = results::Ok;
54 try
55 {
56 14 throw;
57 }
58 24 catch (Throwable& error)
59 {
60 12 result = error.getResult();
61 }
62 2 catch (...)
63 {
64 2 result = results::UnknownException;
65 }
66 14 return result;
67 }
68
69 46 void Delegate::translate_result(result_t result) const
70 {
71
2/2
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 39 times.
46 GATEXX_CHECK_ERROR(result);
72 39 }
73
74 26 delegate_t const* Delegate::c_impl() const
75 {
76 26 return &this->impl;
77 }
78
79 3 bool Delegate::operator!() const
80 {
81 3 char buffer[sizeof(this->impl)] = GATE_INIT_EMPTY;
82 3 return Mem::compare(&this->impl, buffer, sizeof(this->impl)) == 0;
83 }
84 2 bool Delegate::operator==(Delegate const& src) const
85 {
86 2 return Mem::compare(&this->impl, &src.impl, sizeof(this->impl)) == 0;
87 }
88 1 bool Delegate::operator!=(Delegate const& src) const
89 {
90 1 return Mem::compare(&this->impl, &src.impl, sizeof(this->impl)) != 0;
91 }
92
93
94
95 } // end of namespace gate
96
97