xref: /freebsd/contrib/lutok/state.ipp (revision c697fb7f7cc9bedc5beee44d35b771c4e87b335a)
1*c697fb7fSBrooks Davis// Copyright 2011 Google Inc.
2*c697fb7fSBrooks Davis// All rights reserved.
3*c697fb7fSBrooks Davis//
4*c697fb7fSBrooks Davis// Redistribution and use in source and binary forms, with or without
5*c697fb7fSBrooks Davis// modification, are permitted provided that the following conditions are
6*c697fb7fSBrooks Davis// met:
7*c697fb7fSBrooks Davis//
8*c697fb7fSBrooks Davis// * Redistributions of source code must retain the above copyright
9*c697fb7fSBrooks Davis//   notice, this list of conditions and the following disclaimer.
10*c697fb7fSBrooks Davis// * Redistributions in binary form must reproduce the above copyright
11*c697fb7fSBrooks Davis//   notice, this list of conditions and the following disclaimer in the
12*c697fb7fSBrooks Davis//   documentation and/or other materials provided with the distribution.
13*c697fb7fSBrooks Davis// * Neither the name of Google Inc. nor the names of its contributors
14*c697fb7fSBrooks Davis//   may be used to endorse or promote products derived from this software
15*c697fb7fSBrooks Davis//   without specific prior written permission.
16*c697fb7fSBrooks Davis//
17*c697fb7fSBrooks Davis// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18*c697fb7fSBrooks Davis// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19*c697fb7fSBrooks Davis// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20*c697fb7fSBrooks Davis// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21*c697fb7fSBrooks Davis// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22*c697fb7fSBrooks Davis// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23*c697fb7fSBrooks Davis// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24*c697fb7fSBrooks Davis// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25*c697fb7fSBrooks Davis// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26*c697fb7fSBrooks Davis// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27*c697fb7fSBrooks Davis// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*c697fb7fSBrooks Davis
29*c697fb7fSBrooks Davis#if !defined(LUTOK_STATE_IPP)
30*c697fb7fSBrooks Davis#define LUTOK_STATE_IPP
31*c697fb7fSBrooks Davis
32*c697fb7fSBrooks Davis#include <lutok/state.hpp>
33*c697fb7fSBrooks Davis
34*c697fb7fSBrooks Davisnamespace lutok {
35*c697fb7fSBrooks Davis
36*c697fb7fSBrooks Davis
37*c697fb7fSBrooks Davis/// Wrapper around lua_newuserdata.
38*c697fb7fSBrooks Davis///
39*c697fb7fSBrooks Davis/// This allocates an object as big as the size of the provided Type.
40*c697fb7fSBrooks Davis///
41*c697fb7fSBrooks Davis/// \return The pointer to the allocated userdata object.
42*c697fb7fSBrooks Davis///
43*c697fb7fSBrooks Davis/// \warning Terminates execution if there is not enough memory.
44*c697fb7fSBrooks Davistemplate< typename Type >
45*c697fb7fSBrooks DavisType*
46*c697fb7fSBrooks Davisstate::new_userdata(void)
47*c697fb7fSBrooks Davis{
48*c697fb7fSBrooks Davis    return static_cast< Type* >(new_userdata_voidp(sizeof(Type)));
49*c697fb7fSBrooks Davis}
50*c697fb7fSBrooks Davis
51*c697fb7fSBrooks Davis
52*c697fb7fSBrooks Davis/// Wrapper around lua_touserdata.
53*c697fb7fSBrooks Davis///
54*c697fb7fSBrooks Davis/// \param index The second parameter to lua_touserdata.
55*c697fb7fSBrooks Davis///
56*c697fb7fSBrooks Davis/// \return The return value of lua_touserdata.
57*c697fb7fSBrooks Davistemplate< typename Type >
58*c697fb7fSBrooks DavisType*
59*c697fb7fSBrooks Davisstate::to_userdata(const int index)
60*c697fb7fSBrooks Davis{
61*c697fb7fSBrooks Davis    return static_cast< Type* >(to_userdata_voidp(index));
62*c697fb7fSBrooks Davis}
63*c697fb7fSBrooks Davis
64*c697fb7fSBrooks Davis
65*c697fb7fSBrooks Davis}  // namespace lutok
66*c697fb7fSBrooks Davis
67*c697fb7fSBrooks Davis#endif  // !defined(LUTOK_STATE_IPP)
68