Alien  1.3.0
Developer documentation
Loading...
Searching...
No Matches
UnsafeCast.h
1/*
2 * Copyright 2020 IFPEN-CEA
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 * SPDX-License-Identifier: Apache-2.0
17 */
18
19#pragma once
20
21#include <type_traits>
22
23#include <alien/data/IMatrix.h>
24#include <alien/data/IVector.h>
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Alien
30{
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
35template <typename T>
36T& unsafeCast(IMatrix& M)
37{
38 static_assert(std::is_base_of<IMatrix, T>::value, "IMatrix is not a valid base");
39 return static_cast<T&>(M);
40}
41
42/*---------------------------------------------------------------------------*/
43
44template <typename T>
45const T&
46unsafeCast(const IMatrix& M)
47{
48 static_assert(std::is_base_of<IMatrix, T>::value, "IMatrix is not a valid base");
49 return static_cast<const T&>(M);
50}
51
52/*---------------------------------------------------------------------------*/
53
54template <typename T>
55T& unsafeCast(IVector& M)
56{
57 static_assert(std::is_base_of<IVector, T>::value, "IVector is not a valid base");
58 return static_cast<T&>(M);
59}
60
61/*---------------------------------------------------------------------------*/
62
63template <typename T>
64const T&
65unsafeCast(const IVector& M)
66{
67 static_assert(std::is_base_of<IVector, T>::value, "IVector is not a valid base");
68 return static_cast<const T&>(M);
69}
70
71/*---------------------------------------------------------------------------*/
72/*---------------------------------------------------------------------------*/
73
74} // namespace Alien
75
76/*---------------------------------------------------------------------------*/
77/*---------------------------------------------------------------------------*/
IMatrix.h.
IVector.h.
Interface for all matrices.
Definition IMatrix.h:51
Interface for all vectors.
Definition IVector.h:51
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Definition BackEnd.h:17