Newer
Older
// $Id: FunctionManager.cpp,v 1.12 2001-08-17 12:19:34 geuzaine Exp $
struct ltstr
{
bool operator()(const char* s1, const char* s2) const
{
return strcmp(s1, s2) < 0;
}
};
class File_Position
{
public :
// Pour utiliser un namespace global sur SGI, il faut compiler avec
// -LANG:std, et ajouter "using namespace std;". Dans tous les cas, il
// FAUT creer les librairies avec 'CC -ar', et pas avec 'ar'.
};
FunctionManager *FunctionManager::instance = 0;
FunctionManager::FunctionManager()
{
functions = new mymap;
calls = new mystack;
}
FunctionManager* FunctionManager::Instance()
{
if(!instance)
{
instance = new FunctionManager;
}
return instance;
}
int FunctionManager::enterFunction(char *name, FILE **f, int &lno) const
if(functions->m.find(name) == functions->m.end())return 0;
fpold.file = *f;
fgetpos(fpold.file,&fpold.position);
calls->s.push(fpold);
File_Position fp = (functions->m)[name];
fsetpos(fp.file,&fp.position);
*f = fp.file;
int FunctionManager::leaveFunction(FILE **f,int &lno)
if(!calls->s.size())return 0;
File_Position fp;
fp = calls->s.top();
calls->s.pop();
fsetpos(fp.file,&fp.position);
*f = fp.file;
int FunctionManager::createFunction(char *name, FILE *f, int lno)
fgetpos(fp.file,&fp.position);
(functions->m)[name] = fp;