-
Notifications
You must be signed in to change notification settings - Fork 392
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
iox-#27 Add RequestDeleter and ResponseDeleter
- Loading branch information
1 parent
b97e579
commit 7d1265d
Showing
4 changed files
with
216 additions
and
0 deletions.
There are no files selected for viewing
57 changes: 57 additions & 0 deletions
57
iceoryx_posh/include/iceoryx_posh/internal/popo/request_deleter.hpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
// Copyright (c) 2021 - 2022 by Apex.AI Inc. All rights reserved. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
// | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
#ifndef IOX_POSH_POPO_REQUEST_DELETER_HPP | ||
#define IOX_POSH_POPO_REQUEST_DELETER_HPP | ||
|
||
#include "iceoryx_posh/mepoo/chunk_header.hpp" | ||
#include "iceoryx_posh/popo/rpc_header.hpp" | ||
|
||
namespace iox | ||
{ | ||
namespace popo | ||
{ | ||
/// | ||
/// @brief The RequestDeleter struct is a custom deleter in functor form which releases loans to a request's | ||
/// underlying memory chunk via the corresponding port. | ||
/// Each port should create its own instance of this deleter struct. | ||
/// @tparam Port is either the ClientPortUser or ServerPortUser and need to have a `releaseResponse` method | ||
template <typename Port> | ||
struct RequestDeleter | ||
{ | ||
public: | ||
explicit RequestDeleter(Port& port) noexcept; | ||
|
||
/// @brief Handles deletion of the request. | ||
/// @param[in] payload The pointer to the payload of the request. | ||
template <typename T> | ||
void operator()(T* const payload) noexcept; | ||
|
||
/// @brief Handles deletion of the request. | ||
/// @param[in] payload The pointer to the user-payload of the request. | ||
template <typename T> | ||
void operator()(const T* const payload) const noexcept; | ||
|
||
private: | ||
Port* m_port; | ||
}; | ||
|
||
} // namespace popo | ||
} // namespace iox | ||
|
||
#include "iceoryx_posh/internal/popo/request_deleter.inl" | ||
|
||
#endif // IOX_POSH_POPO_REQUEST_DELETER_HPP |
51 changes: 51 additions & 0 deletions
51
iceoryx_posh/include/iceoryx_posh/internal/popo/request_deleter.inl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
// Copyright (c) 2021 - 2022 by Apex.AI Inc. All rights reserved. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
// | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
#ifndef IOX_POSH_POPO_REQUEST_DELETER_INL | ||
#define IOX_POSH_POPO_REQUEST_DELETER_INL | ||
|
||
#include "iceoryx_posh/internal/popo/request_deleter.hpp" | ||
|
||
namespace iox | ||
{ | ||
namespace popo | ||
{ | ||
template <typename Port> | ||
RequestDeleter<Port>::RequestDeleter(Port& port) noexcept | ||
: m_port(&port) | ||
{ | ||
} | ||
|
||
template <typename Port> | ||
template <typename T> | ||
void RequestDeleter<Port>::operator()(T* const payload) noexcept | ||
{ | ||
auto* requestHeader = iox::popo::RequestHeader::fromPayload(payload); | ||
m_port->releaseRequest(requestHeader); | ||
} | ||
|
||
template <typename Port> | ||
template <typename T> | ||
void RequestDeleter<Port>::operator()(const T* const payload) const noexcept | ||
{ | ||
const auto* requestHeader = iox::popo::RequestHeader::fromPayload(payload); | ||
m_port->releaseRequest(requestHeader); | ||
} | ||
|
||
} // namespace popo | ||
} // namespace iox | ||
|
||
#endif // IOX_POSH_POPO_REQUEST_DELETER_INL |
57 changes: 57 additions & 0 deletions
57
iceoryx_posh/include/iceoryx_posh/internal/popo/response_deleter.hpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
// Copyright (c) 2021 - 2022 by Apex.AI Inc. All rights reserved. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
// | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
#ifndef IOX_POSH_POPO_RESPONSE_DELETER_HPP | ||
#define IOX_POSH_POPO_RESPONSE_DELETER_HPP | ||
|
||
#include "iceoryx_posh/mepoo/chunk_header.hpp" | ||
#include "iceoryx_posh/popo/rpc_header.hpp" | ||
|
||
namespace iox | ||
{ | ||
namespace popo | ||
{ | ||
/// | ||
/// @brief The ResponseDeleter struct is a custom deleter in functor form which releases loans to a response's | ||
/// underlying memory chunk via the corresponding port.. | ||
/// Each port should create its own instance of this deleter struct. | ||
/// @tparam Port is either the ClientPortUser or ServerPortUser and need to have a `releaseResponse` method | ||
template <typename Port> | ||
struct ResponseDeleter | ||
{ | ||
public: | ||
explicit ResponseDeleter(Port& port) noexcept; | ||
|
||
/// @brief Handles deletion of the response. | ||
/// @param[in] payload The pointer to the payload of the response. | ||
template <typename T> | ||
void operator()(T* const payload) noexcept; | ||
|
||
/// @brief Handles deletion of the response. | ||
/// @param[in] payload The pointer to the user-payload of the response. | ||
template <typename T> | ||
void operator()(const T* const payload) const noexcept; | ||
|
||
private: | ||
Port* m_port; | ||
}; | ||
|
||
} // namespace popo | ||
} // namespace iox | ||
|
||
#include "iceoryx_posh/internal/popo/response_deleter.inl" | ||
|
||
#endif // IOX_POSH_POPO_RESPONSE_DELETER_HPP |
51 changes: 51 additions & 0 deletions
51
iceoryx_posh/include/iceoryx_posh/internal/popo/response_deleter.inl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
// Copyright (c) 2021 - 2022 by Apex.AI Inc. All rights reserved. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
// | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
#ifndef IOX_POSH_POPO_RESPONSE_DELETER_INL | ||
#define IOX_POSH_POPO_RESPONSE_DELETER_INL | ||
|
||
#include "iceoryx_posh/internal/popo/response_deleter.hpp" | ||
|
||
namespace iox | ||
{ | ||
namespace popo | ||
{ | ||
template <typename Port> | ||
ResponseDeleter<Port>::ResponseDeleter(Port& port) noexcept | ||
: m_port(&port) | ||
{ | ||
} | ||
|
||
template <typename Port> | ||
template <typename T> | ||
void ResponseDeleter<Port>::operator()(T* const payload) noexcept | ||
{ | ||
auto* responseHeader = iox::popo::ResponseHeader::fromPayload(payload); | ||
m_port->releaseResponse(responseHeader); | ||
} | ||
|
||
template <typename Port> | ||
template <typename T> | ||
void ResponseDeleter<Port>::operator()(const T* const payload) const noexcept | ||
{ | ||
const auto* responseHeader = iox::popo::ResponseHeader::fromPayload(payload); | ||
m_port->releaseResponse(responseHeader); | ||
} | ||
|
||
} // namespace popo | ||
} // namespace iox | ||
|
||
#endif // IOX_POSH_POPO_RESPONSE_DELETER_INL |