| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- // 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;
- }
- }
|