Plugins
lua_shell.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014: G-CSC, Goethe University Frankfurt
3  * Author: Sebastian Reiter
4  *
5  * This file is part of UG4.
6  *
7  * UG4 is free software: you can redistribute it and/or modify it under the
8  * terms of the GNU Lesser General Public License version 3 (as published by the
9  * Free Software Foundation) with the following additional attribution
10  * requirements (according to LGPL/GPL v3 §7):
11  *
12  * (1) The following notice must be displayed in the Appropriate Legal Notices
13  * of covered and combined works: "Based on UG4 (www.ug4.org/license)".
14  *
15  * (2) The following notice must be displayed at a prominent place in the
16  * terminal output of covered works: "Based on UG4 (www.ug4.org/license)".
17  *
18  * (3) The following bibliography is recommended for citation and must be
19  * preserved in all covered files:
20  * "Reiter, S., Vogel, A., Heppner, I., Rupp, M., and Wittum, G. A massively
21  * parallel geometric multigrid solver on hierarchically distributed grids.
22  * Computing and visualization in science 16, 4 (2013), 151-164"
23  * "Vogel, A., Reiter, S., Rupp, M., Nägel, A., and Wittum, G. UG4 -- a novel
24  * flexible software system for simulating pde based models on high performance
25  * computers. Computing and visualization in science 16, 4 (2013), 165-179"
26  *
27  * This program is distributed in the hope that it will be useful,
28  * but WITHOUT ANY WARRANTY; without even the implied warranty of
29  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30  * GNU Lesser General Public License for more details.
31  */
32 
33 #ifndef __H__UG_lua_shell
34 #define __H__UG_lua_shell
35 
36 #include "bindings/lua/lua_util.h"
38 
39 namespace ug{
40 namespace luashell{
41 
51 class LuaShell{
52  public:
53  LuaShell();
54 
55  void reset();
56 
57  void parse_file(const char* filename);
58  void run(const char* buffer);
59 
60  void abort_run(const char* message);
61 
62  template <class TVal>
63  void set(const char* name, TVal value)
64  {
66  lua_setglobal(m_luaState, name);
67  }
68 
69  void set(const char* name, void* pval, const char* className);
70  void set(const char* name, const void* pval, const char* className);
71  void set(const char* name, SmartPtr<void> pval, const char* className);
72  void set(const char* name, ConstSmartPtr<void> pval, const char* className);
73 
74  template <class TVal>
75  TVal get_val(const char* name)
76  {
77  lua_getglobal(m_luaState, name);
79  lua_pop(m_luaState, 1);
80  UG_THROW("LuaShell error: Couldn't convert " << name << " to requested type.");
81  }
82 
84  lua_pop(m_luaState, 1);
85  return val;
86  }
87 
88  private:
90 
91  void init_lua_state();
92 };
93 
95 }// namespace LuaShell
96 }// end of namespace
97 
98 
99 #endif //__H__lua_shell
Definition: lua_shell.h:51
lua_State * m_luaState
Definition: lua_shell.h:89
TVal get_val(const char *name)
Definition: lua_shell.h:75
void parse_file(const char *filename)
Definition: lua_shell.cpp:71
void run(const char *buffer)
Definition: lua_shell.cpp:80
LuaShell()
Definition: lua_shell.cpp:60
void abort_run(const char *message)
Definition: lua_shell.cpp:112
void set(const char *name, TVal value)
Definition: lua_shell.h:63
void init_lua_state()
Definition: lua_shell.cpp:141
void reset()
Definition: lua_shell.cpp:65
#define UG_THROW(msg)
struct lua_State lua_State