Changeset 183 for trunk


Ignore:
Timestamp:
07/30/13 05:29:32 (12 years ago)
Author:
epyon
Message:
  • lua - alternative way of specifing push/pop support
Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/nv/lua/lua_area.hh

    r176 r183  
    1111#include <nv/lua/lua_glm.hh>
    1212#include <nv/lib/lua.hh>
     13#include <nv/lua/lua_values.hh>
    1314
    1415void nlua_register_area( lua_State* L );
     
    2425inline void nlua_push_coord( lua_State* L, const nv::ivec2& v ) { return nlua_push_vec<nv::ivec2>( L, v ); }
    2526
     27namespace nv
     28{
     29        namespace lua
     30        {
     31
     32                template<>
     33                struct pass_traits< nv::rectangle >
     34                {
     35                        static void push( lua_State *L, const nv::rectangle& p ) { nlua_push_area( L, p ); }
     36                        static void pop( lua_State *L, nv::rectangle& p ) { p = nlua_to_area( L, -1 ); lua_pop( L, 1 ); }
     37                };
     38        }
     39
     40}
     41
    2642#endif // NV_LUA_AREA_HH
  • trunk/nv/lua/lua_glm.hh

    r121 r183  
    1111#include <nv/math.hh>
    1212#include <nv/lib/lua.hh>
     13#include <nv/lua/lua_values.hh>
    1314
    1415void nlua_register_glm( lua_State* L );
     
    4849template<> inline const char* nlua_metatable_name< nv::vec4  >() { return "vec4"; }
    4950
     51namespace nv
     52{
     53        namespace lua
     54        {
     55
     56                template< typename T >
     57                struct pass_traits< glm::detail::tvec2<T> >
     58                {
     59                        typedef glm::detail::tvec2<T> value_type;
     60                        static void push( lua_State *L, const value_type& p ) { nlua_push_vec< value_type >( L, p ); }
     61                        static void pop( lua_State *L, value_type& p ) { p = nlua_to_vec< value_type >( L, -1 ); lua_pop( L, 1 ); }
     62                };
     63
     64                template< typename T >
     65                struct pass_traits< glm::detail::tvec3<T> >
     66                {
     67                        typedef glm::detail::tvec3<T> value_type;
     68                        static void push( lua_State *L, const value_type& p ) { nlua_push_vec< value_type >( L, p ); }
     69                        static void pop( lua_State *L, value_type& p ) { p = nlua_to_vec< value_type >( L, -1 ); lua_pop( L, 1 ); }
     70                };
     71
     72                template< typename T >
     73                struct pass_traits< glm::detail::tvec4<T> >
     74                {
     75                        typedef glm::detail::tvec4<T> value_type;
     76                        static void push( lua_State *L, const value_type& p ) { nlua_push_vec< value_type >( L, p ); }
     77                        static void pop( lua_State *L, value_type& p ) { p = nlua_to_vec< value_type >( L, -1 ); lua_pop( L, 1 ); }
     78                };
     79        }
     80
     81}
     82
     83
    5084#endif // NV_LUA_GLM_HH
  • trunk/nv/lua/lua_values.hh

    r182 r183  
    1717        namespace lua
    1818        {
    19                 template < typename T >
    20                 struct pass_traits
    21                 {
    22                 };
    23 
    24 
    2519                struct passer
    2620                {
     
    2822                };
    2923
    30                 template < typename T >
    31                 struct returner
     24                struct returner_base
    3225                {
    3326                        virtual void pop( lua_State *L ) = 0;
     27                };
     28
     29                template < typename T >
     30                struct returner : public returner_base
     31                {
    3432                        operator T() { return value; }
    3533                        operator const T() const { return value; }
    3634                protected:
    3735                        T value;
     36                };
     37
     38                template < typename T >
     39                struct pass_traits
     40                {
     41                        static void push( lua_State *L, const T& p ) { p.push( L ); }
     42                        static void pop( lua_State *L, T& p ) { p.pop( L ); }
    3843                };
    3944
     
    4752                        void push_value( lua_State *L, object* o );
    4853                        void push_value( lua_State *L, void* p );
    49                         void push_value( lua_State *L, const passer& p );
     54                        template < typename T >
     55                        void push_value( lua_State *L, const T& p )
     56                        {
     57                                pass_traits<T>::push( L, p );
     58                        }
    5059
    5160                        template < typename T1 >
     
    6776                        void pop_value( lua_State *L, void*& p );
    6877                        template < typename T >
    69                         void pop_value( lua_State *L, T& p ) { p.pop(L); }
    70 
     78                        void pop_value( lua_State *L, T& p )
     79                        {
     80                                pass_traits<T>::pop( L, p );
     81                        }
    7182                }
    7283
  • trunk/src/gfx/keyframed_mesh.cc

    r161 r183  
    105105                        if ( m_looping )
    106106                        {
    107                                 uint32 left = m_time - f_max;
     107                                uint32 left = m_time - static_cast< uint32 >( f_max );
    108108                                m_time = 0;
    109109                                update( left );
  • trunk/src/lua/lua_values.cc

    r182 r183  
    5252}
    5353
    54 void nv::lua::detail::push_value( lua_State *L, const passer& p )
    55 {
    56         p.push(L);
    57 }
    58 
    5954void nv::lua::detail::pop_value( lua_State *L, long& n )
    6055{
Note: See TracChangeset for help on using the changeset viewer.