Init
This commit is contained in:
		
							
								
								
									
										218
									
								
								lib/StanfordCPPLib/private/_main.h_
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										218
									
								
								lib/StanfordCPPLib/private/_main.h_
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,218 @@
 | 
			
		||||
/*
 | 
			
		||||
 * File: main.h
 | 
			
		||||
 * ------------
 | 
			
		||||
 * This file renames the <code>main</code> method in the client's
 | 
			
		||||
 * program to <code>Main</code>, thereby allowing a custom
 | 
			
		||||
 * <code>main</code> method in the libraries to take control
 | 
			
		||||
 * before passing control back to the client program.  The main macro
 | 
			
		||||
 * also defines a function getMainFlags that returns an int whose bits
 | 
			
		||||
 * indicate which of the various interfaces have been loaded by this
 | 
			
		||||
 * definition of main.
 | 
			
		||||
 *
 | 
			
		||||
 * Note: This file can be loaded more than once and must therefore
 | 
			
		||||
 * check to see what has already been defined.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef main
 | 
			
		||||
#  undef main
 | 
			
		||||
#  undef CONSOLE_FLAG
 | 
			
		||||
#  undef GRAPHICS_FLAG
 | 
			
		||||
#else
 | 
			
		||||
#  define MAIN_USES_CONSOLE (1<<0)
 | 
			
		||||
#  define MAIN_USES_GRAPHICS (1<<1)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _console_h
 | 
			
		||||
#  define CONSOLE_FLAG MAIN_USES_CONSOLE
 | 
			
		||||
#else
 | 
			
		||||
#  define CONSOLE_FLAG 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _gwindow_h
 | 
			
		||||
#  define GRAPHICS_FLAG MAIN_USES_GRAPHICS
 | 
			
		||||
#else
 | 
			
		||||
#  define GRAPHICS_FLAG 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if CONSOLE_FLAG | GRAPHICS_FLAG
 | 
			
		||||
 | 
			
		||||
#define main main(int argc, char **argv) { \
 | 
			
		||||
                extern int _mainFlags; \
 | 
			
		||||
                _mainFlags = GRAPHICS_FLAG + CONSOLE_FLAG; \
 | 
			
		||||
                try { \
 | 
			
		||||
                   return startupMain(argc, argv); \
 | 
			
		||||
                } catch (const std::exception& ex) { \
 | 
			
		||||
                   string msg = "\n ***\n"; \
 | 
			
		||||
                   msg += " *** STANFORD C++ LIBRARY \n"; \
 | 
			
		||||
                   msg += " *** An exception occurred during program execution: \n"; \
 | 
			
		||||
                   msg += " *** "; \
 | 
			
		||||
                   msg += ex.what(); \
 | 
			
		||||
                   msg += "\n ***\n\n"; \
 | 
			
		||||
                   std::cerr << msg; \
 | 
			
		||||
                   throw ex; \
 | 
			
		||||
                } catch (std::string str) { \
 | 
			
		||||
                   string msg = "\n ***\n"; \
 | 
			
		||||
                   msg += " *** STANFORD C++ LIBRARY \n"; \
 | 
			
		||||
                   msg += " *** A string exception occurred during program execution: \n"; \
 | 
			
		||||
                   msg += " *** \""; \
 | 
			
		||||
                   msg += str; \
 | 
			
		||||
                   msg += "\"\n ***\n"; \
 | 
			
		||||
                   std::cerr << msg; \
 | 
			
		||||
                   throw str; \
 | 
			
		||||
                } catch (char const* str) { \
 | 
			
		||||
                   string msg = "\n ***\n"; \
 | 
			
		||||
                   msg += " *** STANFORD C++ LIBRARY \n"; \
 | 
			
		||||
                   msg += " *** A string exception occurred during program execution: \n"; \
 | 
			
		||||
                   msg += " *** \""; \
 | 
			
		||||
                   msg += str; \
 | 
			
		||||
                   msg += "\"\n ***\n"; \
 | 
			
		||||
                   std::cerr << msg; \
 | 
			
		||||
                   throw str; \
 | 
			
		||||
                } catch (int n) { \
 | 
			
		||||
                   char buf[128]; \
 | 
			
		||||
                   snprintf(buf, 128, "%d", n); \
 | 
			
		||||
                   string msg = "\n ***\n"; \
 | 
			
		||||
                   msg += " *** STANFORD C++ LIBRARY \n"; \
 | 
			
		||||
                   msg += " *** An int exception occurred during program execution: \n"; \
 | 
			
		||||
                   msg += " *** "; \
 | 
			
		||||
                   msg += buf; \
 | 
			
		||||
                   msg += "\n ***\n\n"; \
 | 
			
		||||
                   std::cerr << msg; \
 | 
			
		||||
                   throw n; \
 | 
			
		||||
                } catch (long l) { \
 | 
			
		||||
                   char buf[128]; \
 | 
			
		||||
                   snprintf(buf, 128, "%ld", l); \
 | 
			
		||||
                   string msg = "\n ***\n"; \
 | 
			
		||||
                   msg += " *** STANFORD C++ LIBRARY \n"; \
 | 
			
		||||
                   msg += " *** A long exception occurred during program execution: \n"; \
 | 
			
		||||
                   msg += " *** "; \
 | 
			
		||||
                   msg += buf; \
 | 
			
		||||
                   msg += "\n ***\n\n"; \
 | 
			
		||||
                   std::cerr << msg; \
 | 
			
		||||
                   throw l; \
 | 
			
		||||
                } catch (char c) { \
 | 
			
		||||
                   string msg = "\n ***\n"; \
 | 
			
		||||
                   msg += " *** STANFORD C++ LIBRARY \n"; \
 | 
			
		||||
                   msg += " *** A char exception occurred during program execution: \n"; \
 | 
			
		||||
                   msg += " *** '"; \
 | 
			
		||||
                   msg += c; \
 | 
			
		||||
                   msg += "'\n ***\n"; \
 | 
			
		||||
                   std::cerr << msg; \
 | 
			
		||||
                   throw c; \
 | 
			
		||||
                } catch (bool b) { \
 | 
			
		||||
                   string msg = "\n ***\n"; \
 | 
			
		||||
                   msg += " *** STANFORD C++ LIBRARY \n"; \
 | 
			
		||||
                   msg += " *** A bool exception occurred during program execution: \n"; \
 | 
			
		||||
                   msg += " *** "; \
 | 
			
		||||
                   msg += (b ? "true" : "false"); \
 | 
			
		||||
                   msg += "\n ***\n\n"; \
 | 
			
		||||
                   std::cerr << msg; \
 | 
			
		||||
                   throw b; \
 | 
			
		||||
                } catch (double d) { \
 | 
			
		||||
                   char buf[128]; \
 | 
			
		||||
                   snprintf(buf, 128, "%lf", d); \
 | 
			
		||||
                   string msg = "\n ***\n"; \
 | 
			
		||||
                   msg += " *** STANFORD C++ LIBRARY \n"; \
 | 
			
		||||
                   msg += " *** A double exception occurred during program execution: \n"; \
 | 
			
		||||
                   msg += " *** "; \
 | 
			
		||||
                   msg += buf; \
 | 
			
		||||
                   msg += "\n ***\n\n"; \
 | 
			
		||||
                   std::cerr << msg; \
 | 
			
		||||
                   throw d; \
 | 
			
		||||
                } \
 | 
			
		||||
             } \
 | 
			
		||||
             int Main
 | 
			
		||||
 | 
			
		||||
extern int startupMain(int argc, char **argv);
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#define main main(int argc, char **argv) { \
 | 
			
		||||
                extern int _mainFlags; \
 | 
			
		||||
                _mainFlags = GRAPHICS_FLAG + CONSOLE_FLAG; \
 | 
			
		||||
                try { \
 | 
			
		||||
                   return mainWrapper(argc, argv); } \
 | 
			
		||||
                } catch (const std::exception& ex) { \
 | 
			
		||||
                   string msg = "\n ***\n"; \
 | 
			
		||||
                   msg += " *** STANFORD C++ LIBRARY \n"; \
 | 
			
		||||
                   msg += " *** An exception occurred during program execution: \n"; \
 | 
			
		||||
                   msg += " *** "; \
 | 
			
		||||
                   msg += ex.what(); \
 | 
			
		||||
                   msg += "\n ***\n\n"; \
 | 
			
		||||
                   std::cerr << msg; \
 | 
			
		||||
                   throw ex; \
 | 
			
		||||
                } catch (std::string str) { \
 | 
			
		||||
                   string msg = "\n ***\n"; \
 | 
			
		||||
                   msg += " *** STANFORD C++ LIBRARY \n"; \
 | 
			
		||||
                   msg += " *** A string exception occurred during program execution: \n"; \
 | 
			
		||||
                   msg += " *** \""; \
 | 
			
		||||
                   msg += str; \
 | 
			
		||||
                   msg += "\"\n ***\n"; \
 | 
			
		||||
                   std::cerr << msg; \
 | 
			
		||||
                   throw str; \
 | 
			
		||||
                } catch (char const* str) { \
 | 
			
		||||
                   string msg = "\n ***\n"; \
 | 
			
		||||
                   msg += " *** STANFORD C++ LIBRARY \n"; \
 | 
			
		||||
                   msg += " *** A string exception occurred during program execution: \n"; \
 | 
			
		||||
                   msg += " *** \""; \
 | 
			
		||||
                   msg += str; \
 | 
			
		||||
                   msg += "\"\n ***\n"; \
 | 
			
		||||
                   std::cerr << msg; \
 | 
			
		||||
                   throw str; \
 | 
			
		||||
                } catch (int n) { \
 | 
			
		||||
                   char buf[128]; \
 | 
			
		||||
                   snprintf(buf, 128, "%d", n); \
 | 
			
		||||
                   string msg = "\n ***\n"; \
 | 
			
		||||
                   msg += " *** STANFORD C++ LIBRARY \n"; \
 | 
			
		||||
                   msg += " *** An int exception occurred during program execution: \n"; \
 | 
			
		||||
                   msg += " *** "; \
 | 
			
		||||
                   msg += buf; \
 | 
			
		||||
                   msg += "\n ***\n\n"; \
 | 
			
		||||
                   std::cerr << msg; \
 | 
			
		||||
                   throw n; \
 | 
			
		||||
                } catch (long l) { \
 | 
			
		||||
                   char buf[128]; \
 | 
			
		||||
                   snprintf(buf, 128, "%ld", l); \
 | 
			
		||||
                   string msg = "\n ***\n"; \
 | 
			
		||||
                   msg += " *** STANFORD C++ LIBRARY \n"; \
 | 
			
		||||
                   msg += " *** A long exception occurred during program execution: \n"; \
 | 
			
		||||
                   msg += " *** "; \
 | 
			
		||||
                   msg += buf; \
 | 
			
		||||
                   msg += "\n ***\n\n"; \
 | 
			
		||||
                   std::cerr << msg; \
 | 
			
		||||
                   throw l; \
 | 
			
		||||
                } catch (char c) { \
 | 
			
		||||
                   string msg = "\n ***\n"; \
 | 
			
		||||
                   msg += " *** STANFORD C++ LIBRARY \n"; \
 | 
			
		||||
                   msg += " *** A char exception occurred during program execution: \n"; \
 | 
			
		||||
                   msg += " *** '"; \
 | 
			
		||||
                   msg += c; \
 | 
			
		||||
                   msg += "'\n ***\n"; \
 | 
			
		||||
                   std::cerr << msg; \
 | 
			
		||||
                   throw c; \
 | 
			
		||||
                } catch (bool b) { \
 | 
			
		||||
                   string msg = "\n ***\n"; \
 | 
			
		||||
                   msg += " *** STANFORD C++ LIBRARY \n"; \
 | 
			
		||||
                   msg += " *** A bool exception occurred during program execution: \n"; \
 | 
			
		||||
                   msg += " *** "; \
 | 
			
		||||
                   msg += (b ? "true" : "false"); \
 | 
			
		||||
                   msg += "\n ***\n\n"; \
 | 
			
		||||
                   std::cerr << msg; \
 | 
			
		||||
                   throw b; \
 | 
			
		||||
                } catch (double d) { \
 | 
			
		||||
                   char buf[128]; \
 | 
			
		||||
                   snprintf(buf, 128, "%lf", d); \
 | 
			
		||||
                   string msg = "\n ***\n"; \
 | 
			
		||||
                   msg += " *** STANFORD C++ LIBRARY \n"; \
 | 
			
		||||
                   msg += " *** A double exception occurred during program execution: \n"; \
 | 
			
		||||
                   msg += " *** "; \
 | 
			
		||||
                   msg += buf; \
 | 
			
		||||
                   msg += "\n ***\n\n"; \
 | 
			
		||||
                   std::cerr << msg; \
 | 
			
		||||
                   throw d; \
 | 
			
		||||
                } \
 | 
			
		||||
             int Main
 | 
			
		||||
 | 
			
		||||
extern int mainWrapper(int argc, char **argv);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										62
									
								
								lib/StanfordCPPLib/private/main.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										62
									
								
								lib/StanfordCPPLib/private/main.h
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
/*
 | 
			
		||||
 * File: main.h
 | 
			
		||||
 * ------------
 | 
			
		||||
 * This file renames the <code>main</code> method in the client's
 | 
			
		||||
 * program to <code>Main</code>, thereby allowing a custom
 | 
			
		||||
 * <code>main</code> method in the libraries to take control
 | 
			
		||||
 * before passing control back to the client program.  The main macro
 | 
			
		||||
 * also defines a function getMainFlags that returns an int whose bits
 | 
			
		||||
 * indicate which of the various interfaces have been loaded by this
 | 
			
		||||
 * definition of main.
 | 
			
		||||
 *
 | 
			
		||||
 * Note: This file can be loaded more than once and must therefore
 | 
			
		||||
 * check to see what has already been defined.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef main
 | 
			
		||||
#  undef main
 | 
			
		||||
#  undef CONSOLE_FLAG
 | 
			
		||||
#  undef GRAPHICS_FLAG
 | 
			
		||||
#else
 | 
			
		||||
#  define MAIN_USES_CONSOLE (1<<0)
 | 
			
		||||
#  define MAIN_USES_GRAPHICS (1<<1)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _console_h
 | 
			
		||||
#  define CONSOLE_FLAG MAIN_USES_CONSOLE
 | 
			
		||||
#else
 | 
			
		||||
#  define CONSOLE_FLAG 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _gwindow_h
 | 
			
		||||
#  define GRAPHICS_FLAG MAIN_USES_GRAPHICS
 | 
			
		||||
#else
 | 
			
		||||
#  define GRAPHICS_FLAG 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void __StanfordCPPLib_terminate_handler();
 | 
			
		||||
void __StanfordCPPLib_set_terminate();
 | 
			
		||||
 | 
			
		||||
#if CONSOLE_FLAG | GRAPHICS_FLAG
 | 
			
		||||
 | 
			
		||||
#define main main(int argc, char **argv) { \
 | 
			
		||||
                extern int _mainFlags; \
 | 
			
		||||
                _mainFlags = GRAPHICS_FLAG + CONSOLE_FLAG; \
 | 
			
		||||
                return startupMain(argc, argv); \
 | 
			
		||||
             } \
 | 
			
		||||
             int Main
 | 
			
		||||
 | 
			
		||||
extern int startupMain(int argc, char **argv);
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#define main main(int argc, char **argv) { \
 | 
			
		||||
                extern int _mainFlags; \
 | 
			
		||||
                _mainFlags = GRAPHICS_FLAG + CONSOLE_FLAG; \
 | 
			
		||||
                return mainWrapper(argc, argv); } \
 | 
			
		||||
             } \
 | 
			
		||||
             int Main
 | 
			
		||||
 | 
			
		||||
extern int mainWrapper(int argc, char **argv);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										63
									
								
								lib/StanfordCPPLib/private/randompatch.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										63
									
								
								lib/StanfordCPPLib/private/randompatch.h
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
/*
 | 
			
		||||
 * File: private/randompatch.h
 | 
			
		||||
 * ---------------------------
 | 
			
		||||
 * This file patches the implementation of the random number library
 | 
			
		||||
 * to avoid some serious bugs in standard implementations of rand,
 | 
			
		||||
 * particularly on Mac OS X.  It also includes a hack to set the
 | 
			
		||||
 * seed from the RANDOM_SEED environment variable, which makes it
 | 
			
		||||
 * possible to produce repeatable figures.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Implementation notes: rand, srand
 | 
			
		||||
 * ---------------------------------
 | 
			
		||||
 * To ensure that this package works the same way on all platforms,
 | 
			
		||||
 * this file completely reimplements the rand and srand methods.  The
 | 
			
		||||
 * algorithm is a conventional linear congruential generator with the
 | 
			
		||||
 * parameters used in GNU's gclib.  RAND_MAX for this implementation
 | 
			
		||||
 * is 2147483647 (2^31 - 1).
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define MULTIPLIER 1103515245
 | 
			
		||||
#define OFFSET 12345
 | 
			
		||||
 | 
			
		||||
static int _seed = 1;
 | 
			
		||||
 | 
			
		||||
#undef rand
 | 
			
		||||
#define rand() ((_seed = MULTIPLIER * _seed + OFFSET) & 0x7FFFFFFF)
 | 
			
		||||
 | 
			
		||||
#undef srand
 | 
			
		||||
#define srand(seed) (_seed = int(seed), _seed = (_seed <= 0) ? 1 : _seed)
 | 
			
		||||
 | 
			
		||||
#undef RAND_MAX
 | 
			
		||||
#define RAND_MAX 2147483647
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Implementation notes: Windows patch
 | 
			
		||||
 * -----------------------------------
 | 
			
		||||
 * On some versions of Windows, the time function is too coarse to use
 | 
			
		||||
 * as a random seed.  On those versions, this definition substitutes the
 | 
			
		||||
 * GetTickCount function.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if defined (_MSC_VER) && (_MSC_VER >= 1200)
 | 
			
		||||
#  include <windows.h>
 | 
			
		||||
#  define time(dummy) (GetTickCount())
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef __APPLE__
 | 
			
		||||
 | 
			
		||||
#  include <cstdlib>
 | 
			
		||||
 | 
			
		||||
   static time_t patchedTime(time_t *) {
 | 
			
		||||
      char *str = getenv("RANDOM_SEED");
 | 
			
		||||
      if (str == NULL) {
 | 
			
		||||
         return time(NULL);
 | 
			
		||||
      } else {
 | 
			
		||||
         return atoi(str);
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
#  define time(dummy) patchedTime(dummy)
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										11
									
								
								lib/StanfordCPPLib/private/tokenpatch.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										11
									
								
								lib/StanfordCPPLib/private/tokenpatch.h
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
 * File: tokenpatch.h
 | 
			
		||||
 * ------------------
 | 
			
		||||
 * This file renames TokenType and WORD to avoid conflict with the
 | 
			
		||||
 * <windows.h> header.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
#  define TokenType TokenTypeT
 | 
			
		||||
#  define WORD WORD_TC
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										25
									
								
								lib/StanfordCPPLib/private/tplatform.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										25
									
								
								lib/StanfordCPPLib/private/tplatform.h
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
/*
 | 
			
		||||
 * File: tplatform.h
 | 
			
		||||
 * -----------------
 | 
			
		||||
 * This interface defines the platform-specific methods on threads
 | 
			
		||||
 * and locks.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Methods for threads */
 | 
			
		||||
 | 
			
		||||
int forkForPlatform(void (*fn)(void *), void *arg);
 | 
			
		||||
void incThreadRefCountForPlatform(int id);
 | 
			
		||||
void decThreadRefCountForPlatform(int id);
 | 
			
		||||
void joinForPlatform(int id);
 | 
			
		||||
int getCurrentThreadForPlatform();
 | 
			
		||||
void yieldForPlatform();
 | 
			
		||||
 | 
			
		||||
/* Methods for locks */
 | 
			
		||||
 | 
			
		||||
int initLockForPlatform();
 | 
			
		||||
void incLockRefCountForPlatform(int id);
 | 
			
		||||
void decLockRefCountForPlatform(int id);
 | 
			
		||||
void lockForPlatform(int id);
 | 
			
		||||
void unlockForPlatform(int id);
 | 
			
		||||
void waitForPlatform(int id);
 | 
			
		||||
void signalForPlatform(int id);
 | 
			
		||||
		Reference in New Issue
	
	Block a user