Commit 6dbae9b2 authored by Sylvain Thery's avatar Sylvain Thery

add easy type conversion

parent 0db0b7b1
/*******************************************************************************
* CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps *
* version 0.1 *
* Copyright (C) 2009-2012, IGG Team, LSIIT, University of Strasbourg *
* *
* This library is free software; you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as published by the *
* Free Software Foundation; either version 2.1 of the License, or (at your *
* option) any later version. *
* *
* This library is distributed in the hope that it will be useful, but WITHOUT *
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License *
* for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with this library; if not, write to the Free Software Foundation, *
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
* *
* Web site: http://cgogn.unistra.fr/ *
* Contact information: cgogn@unistra.fr *
* *
*******************************************************************************/
#ifndef __CONVERTTYPE_H_
#define __CONVERTTYPE_H_
#include <assert.h>
namespace CGoGN {
namespace Utils {
/**
* Create a ref to a type from a ref from another type
* No copy only casting. No need to used IN template parameter
* @param vec input ref
* @ return a ref on same object with OUT type
*/
template <typename OUT, typename IN>
inline OUT& convertRef(IN& vec)
{
assert(sizeof(IN) == sizeof(OUT) || "incompatible size cast");
return *(reinterpret_cast<OUT*>(&vec));
}
/**
* Create a const ref to a type from a const ref from another type
* No copy only casting. No need to used IN template parameter
* @param vec input ref
* @ return a ref on same object with OUT type
*/
template <typename OUT, typename IN>
inline const OUT& convertRef(const IN& vec)
{
assert(sizeof(IN) == sizeof(OUT) || "incompatible size cast");
return *(reinterpret_cast<const OUT*>(&vec));
}
/**
* Create a ptr of a type from a ptr of another type
* Just a reinterpret cast in fact
* @param vec input ptr
* @return a ptr on same object with OUT type
*/
template <typename OUT, typename IN>
inline OUT* convertPtr(IN* vec)
{
assert(sizeof(IN) == sizeof(OUT) || "incompatible size cast");
return reinterpret_cast<OUT*>(vec);
}
/**
* Create a const ptr of a type from a const ptr of another type
* Just a reinterpret cast in fact
* @param vec input ptr
* @return a ptr on same object with OUT type
*/
template <typename OUT, typename IN>
inline const OUT* convertPtr(const IN* vec)
{
assert(sizeof(IN) == sizeof(OUT) || "incompatible size cast");
return reinterpret_cast<const OUT*>(vec);
}
} // namespace Utils
} // namespace CGoGN
#endif /* CONVERTTYPE_H_ */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment