29 #if defined(__gnu_linux__) && defined(__i386__) 
   30 #define TRACEBACK 1 // Define TRACEBACK on Linux and Apple 
   41 #if !defined( __CHARMC__) && defined(TRACEBACK) 
   42   const int max_stack=64;
 
   43   void *stackPtrs[max_stack];
 
   45   int levels=backtrace(stackPtrs,max_stack);
 
   46   char **symbols=backtrace_symbols(stackPtrs, levels);
 
   49   std::printf( 
"\nStack Backtrace:\n");
 
   50   for ( 
int i=nSkip; 
i<levels; 
i++) {
 
   51     std::printf( 
" [%d] %s\n", 
i-nSkip, symbols[
i]);
 
   57   os << 
"Roccom: " << (ex.
ierr<1000?
"WARNING ":
"ERROR ")
 
   62     msg = 
"Duplicated window"; 
break;
 
   64     msg = 
"Duplicated attribute"; 
break;
 
   66     msg = 
"Duplicated function"; 
break;
 
   68     msg = 
"Duplicated function"; 
break;
 
   70     msg = 
"Empty mesh"; 
break;
 
   72     msg = 
"Module has already been loaded"; 
break;
 
   75     msg = 
"Module was never loaded"; 
break;
 
   77     msg = 
"Could not open library"; 
break;
 
   79     msg = 
"Could not find symbol"; 
break;
 
   82     msg = 
"Roccom was already initialized"; 
break;
 
   84     msg = 
"Roccom was not initialized"; 
break;
 
   87     msg = 
"Pane map has changed but input argument claims not"; 
break;
 
   89     msg = 
"Window does not exist"; 
break;
 
   91     msg = 
"Pane does not exist"; 
break;
 
   93     msg = 
"Attribute does not exist"; 
break;
 
   95     msg = 
"Function does not exist"; 
break;
 
   97     msg = 
"Unknown keyword"; 
break;
 
   99     msg = 
"Got an unknown data type"; 
break;
 
  101     msg = 
"Invalid attribute name"; 
break;
 
  104     msg = 
"Attribute was already intialized"; 
break;
 
  106     msg = 
"Attribute was not allocated by Roccom"; 
break;
 
  108     msg = 
"A const array cannot be modified, and a non-const reference to it\n\ 
  109            cannot be obtained."; 
break;
 
  111     msg = 
"Attribute has already been allocated by Roccom"; 
break;
 
  113     msg = 
"Connectivity for structured meshes cannot be Allocated"; 
break;
 
  115     msg = 
"Invalid number of components or dimensions"; 
break;
 
  117     msg = 
"Invalid size. Cannot be negative or larger than capacity, \n\ 
  118    and the number of ghosts cannot be greater than the total number of items."; 
break;
 
  120     msg = 
"Invalid capacity. Cannot be smaller than the registered \n\ 
  121            size or be zero when setting a nonnull array"; 
break;
 
  123     msg = 
"Invalid stride. Must be either 1 or >= the number of components"; 
break;
 
  125     msg = 
"Invalid address. Probably is trying to register a local/stack variable."; 
break;
 
  128     msg = 
"Only F90 functions can accept F90 pointers"; 
break;
 
  130     msg = 
"Unknown intention of argument"; 
break;
 
  132     msg = 
"Too many arguments"; 
break;
 
  134     msg = 
"Too few argument"; 
break;
 
  136     msg = 
"Received an invalid function handle"; 
break;
 
  138     msg = 
"Received an invalid attribute handle"; 
break;
 
  140     msg = 
"Received an invalid window handle"; 
break;
 
  142     msg = 
"Incompatible attributes"; 
break;
 
  144     msg = 
"Incompatible data types"; 
break;
 
  147     msg = 
"Not a window attribute"; 
break;
 
  149     msg = 
"Trying to nullify an attribute that is not a pointer"; 
break;
 
  151     msg = 
"Immutable attributes cannot be passed to mutable arguments"; 
break;
 
  153     msg = 
"Unexpected null pointer"; 
break;
 
  155     msg = 
"Out of memory"; 
break;
 
  157     msg = 
"Index out of bounds"; 
break;
 
  160     msg = 
"Parent window does not have all the panes in child window"; 
break;
 
  162     msg = 
"Trying to change the meta-data of an inherited attribute"; 
break;
 
  164     msg = 
"Trying to resize an inherited or user-allocated attribute"; 
break;
 
  166     msg = 
"Mesh must be used/cloned before creating any attribute"; 
break;
 
  168     msg = 
"Inheritance w/o ghost is not supported for structured meshes"; 
break;
 
  170     msg = 
"Ghost elements of unstructured mesh must be at the end"; 
break;
 
  172     msg = 
"The number of ghost nodes must be <= the total number of nodes"; 
break;
 
  174     msg = 
"The number of ghost elements must be <= the total number of elements"; 
break;
 
  176     msg = 
"The number of ghost layers must be <= half of each dimension"; 
break;
 
  178     msg = 
"Appending array is supported only for window and pane attributes without ghosts"; 
break;
 
  181     msg = 
"Unknow error"; 
 
  184   os << msg << 
"\nRoccom: Error encountered when processing "  
  185      << ex.
msg << std::endl << 
"Roccom: ";
 
  191                    const char *file, 
int line) {
 
  194   std::sprintf( buf, 
"\nRoccom: In %s of file %s at line %d",
 
std::string append_frame_info(const std::string &s, const char *frame, const char *file, int line)
Append the information about the given frame to the string s. 
Error_code ierr
Error code. 
Encapsulates the states of an exception. 
std::string msg
Error message. 
COM_BEGIN_NAME_SPACE void printStackBacktrace()
Print the stack backtrace. 
std::ostream & operator<<(std::ostream &os, const COM_exception &ex)
Print out a given exception.