- initial import of revision 374 from cnc
[apt.git] / apt-pkg / luaiface.h
1
2 #ifndef LUAIFACE_H
3 #define LUAIFACE_H
4
5 #ifdef __GNUG__
6 #pragma interface "apt-pkg/luaiface.h"
7 #endif 
8
9 #ifdef WITH_LUA
10
11 #include <map>
12 #include <vector>
13
14 #include <apt-pkg/pkgcache.h>
15
16 using namespace std;
17
18 class pkgDepCache;
19 class pkgProblemResolver;
20 class lua_State;
21 typedef int (*lua_CFunction)(struct lua_State*);
22
23 class LuaCacheControl {
24    public:
25
26    virtual pkgDepCache *Open();
27    virtual pkgDepCache *Open(bool Write) = 0;
28    virtual void Close() = 0;
29
30    virtual ~LuaCacheControl() {};
31 };
32
33 class Lua {
34
35    protected:
36
37    lua_State *L;
38
39    vector<string> Globals;
40
41    pkgDepCache *DepCache;
42    pkgCache *Cache;
43
44    LuaCacheControl *CacheControl;
45
46    pkgProblemResolver *Fix;
47    bool DontFix;
48
49    void InternalRunScript();
50
51    public:
52
53    void RunInteractive(const char *PlaceHint=NULL);
54    void RunInteractive(const string &PlaceHint)
55          { RunInteractive(PlaceHint.c_str()); };
56
57    bool RunScript(const string &Script, const string &ChunkCacheKey="")
58          { RunScript(Script.c_str(), (ChunkCacheKey.length() == 0) ?
59                                       NULL : ChunkCacheKey.c_str()); };
60    bool RunScript(const char *Script, const char *ChunkCacheKey=NULL);
61    bool RunScripts(const char *ConfListKey, bool CacheChunks=false);
62    bool HasScripts(const char *ConfListKey);
63    void ResetScript(const string &ChunkCacheKey)
64          { ResetScript(ChunkCacheKey.c_str()); };
65    void ResetScript(const char *ChunkCacheKey);
66
67    void SetGlobal(const char *Name);
68    void SetGlobal(const char *Name, const char *Value);
69    void SetGlobal(const char *Name, bool Value);
70    void SetGlobal(const char *Name, double Value);
71    void SetGlobal(const char *Name, void *Value);
72    void SetGlobal(const char *Name, const string &Value)
73          { SetGlobal(Name, Value.c_str()); };
74    void SetGlobal(const char *Name, int Value)
75          { SetGlobal(Name, (double)Value); };
76    void SetGlobal(const char *Name, lua_CFunction Value);
77    void SetGlobal(const char *Name, const char **Value, int Total=-1);
78    void SetGlobal(const char *Name, pkgCache::Package *Value);
79    void SetGlobal(const char *Name, vector<const char *> &Value,
80                   int Total=-1);
81    void SetGlobal(const char *Name, vector<string> &Value,
82                   int Total=-1);
83    void SetGlobal(const char *Name, vector<pkgCache::Package*> &Value,
84                   int Total=-1);
85    void ResetGlobals();
86
87    const char *GetGlobalStr(const char *Name);
88    vector<string> GetGlobalStrList(const char *Name);
89    double GetGlobalNum(const char *Name);
90    bool GetGlobalBool(const char *Name);
91    void *GetGlobalPtr(const char *Name);
92    pkgCache::Package *GetGlobalPkg(const char *Name);
93    vector<pkgCache::Package*> GetGlobalPkgList(const char *Name);
94
95    void SetDepCache(pkgDepCache *DepCache_);
96    void SetCache(pkgCache *Cache_) { Cache = Cache_; };
97    void SetCacheControl(LuaCacheControl *CacheControl_);
98    void SetProblemResolver(pkgProblemResolver *Fix_) { Fix = Fix_; };
99    void SetDontFix() { DontFix = true; };
100    void ResetCaches()
101       { DepCache = NULL; Cache = NULL; Fix = NULL; DontFix = false; };
102
103    // For API functions
104    pkgDepCache *GetDepCache(lua_State *L=NULL);
105    pkgCache *GetCache(lua_State *L=NULL);
106    LuaCacheControl *GetCacheControl() { return CacheControl; };
107    pkgProblemResolver *GetProblemResolver() { return Fix; };
108    bool GetDontFix() { return DontFix; };
109
110    Lua();
111    ~Lua();
112 };
113
114 // The same system used with _error
115 Lua *_GetLuaObj();
116 #define _lua _GetLuaObj()
117
118 #endif // WITH_LUA
119
120 #endif
121
122 // vim:sts=3:sw=3