mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-26 05:02:31 -06:00
94 lines
3.4 KiB
C++
94 lines
3.4 KiB
C++
// Filename: ppSubroutine.cxx
|
|
// Created by: drose (10Oct00)
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
#include "ppSubroutine.h"
|
|
|
|
PPSubroutine::Subroutines PPSubroutine::_subroutines;
|
|
PPSubroutine::Subroutines PPSubroutine::_functions;
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: PPSubroutine::define_sub
|
|
// Access: Public, Static
|
|
// Description: Adds a subroutine to the global list with the
|
|
// indicated name. The subroutine pointer must have
|
|
// been recently allocated, and ownership of the pointer
|
|
// will be passed to the global list; it may later
|
|
// delete it if another subroutine is defined with the
|
|
// same name.
|
|
////////////////////////////////////////////////////////////////////
|
|
void PPSubroutine::
|
|
define_sub(const string &name, PPSubroutine *sub) {
|
|
Subroutines::iterator si;
|
|
si = _subroutines.find(name);
|
|
if (si == _subroutines.end()) {
|
|
_subroutines.insert(Subroutines::value_type(name, sub));
|
|
} else {
|
|
delete (*si).second;
|
|
(*si).second = sub;
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: PPSubroutine::get_sub
|
|
// Access: Public, Static
|
|
// Description: Returns the previously-defined subroutine with the
|
|
// given name, or NULL if there is no such subroutine
|
|
// with that name.
|
|
////////////////////////////////////////////////////////////////////
|
|
const PPSubroutine *PPSubroutine::
|
|
get_sub(const string &name) {
|
|
Subroutines::const_iterator si;
|
|
si = _subroutines.find(name);
|
|
if (si == _subroutines.end()) {
|
|
return NULL;
|
|
} else {
|
|
return (*si).second;
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: PPSubroutine::define_func
|
|
// Access: Public, Static
|
|
// Description: Adds a function to the global list with the
|
|
// indicated name. This is similar to a subroutine
|
|
// except it is to be invoked via a variable reference,
|
|
// instead of by a #call function. It cannot be
|
|
// shadowed by a local variable; it will always override
|
|
// any variable definition.
|
|
//
|
|
// The subroutine pointer must have been recently
|
|
// allocated, and ownership of the pointer will be
|
|
// passed to the global list; it may later delete it if
|
|
// another subroutine is defined with the same name.
|
|
////////////////////////////////////////////////////////////////////
|
|
void PPSubroutine::
|
|
define_func(const string &name, PPSubroutine *sub) {
|
|
Subroutines::iterator si;
|
|
si = _functions.find(name);
|
|
if (si == _functions.end()) {
|
|
_functions.insert(Subroutines::value_type(name, sub));
|
|
} else {
|
|
delete (*si).second;
|
|
(*si).second = sub;
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: PPSubroutine::get_func
|
|
// Access: Public, Static
|
|
// Description: Returns the previously-defined function with the
|
|
// given name, or NULL if there is no such function
|
|
// with that name.
|
|
////////////////////////////////////////////////////////////////////
|
|
const PPSubroutine *PPSubroutine::
|
|
get_func(const string &name) {
|
|
Subroutines::const_iterator si;
|
|
si = _functions.find(name);
|
|
if (si == _functions.end()) {
|
|
return NULL;
|
|
} else {
|
|
return (*si).second;
|
|
}
|
|
}
|