cgma
CubitUtil Class Reference

#include <CubitUtil.hpp>

List of all members.

Static Public Member Functions

static void set_digits (int new_digits)
static int get_digits ()
static void convert_string_to_lowercase (char *string)
static int strcmp_case_insensitive (const char *s1, const char *s2)
static int strncmp_case_insensitive (const char *s1, const char *s2, int n)
static void list_ids (const char *const heading, const DLIList< CubitEntity * > &entity_list, int should_sort=CUBIT_FALSE, int report_once=CUBIT_FALSE, int wrap=80)
static void sort_and_print_ids (const char *const heading, DLIList< int > &id_list, int should_sort=CUBIT_FALSE, int report_once=CUBIT_FALSE, int wrap=80)
static void list_entity_ids (const char *pre_string, const DLIList< CubitEntity * > &entity_list, int width=80, const char *post_string="\n", int sort=CUBIT_TRUE, int unique=CUBIT_TRUE, int tab=3, const char *sep_string=",", const char *post_string_none="none\n")
static void list_entity_ids (const char *pre_string, DLIList< int > &id_list, int width=80, const char *post_string="\n", int sort=CUBIT_TRUE, int unique=CUBIT_TRUE, int tab_len=3, const char *sep_string=",", const char *post_string_none="none\n")
static CubitString get_entity_ids_str (const char *pre_string, DLIList< int > &int_list, int width=80, const char *post_string="\n", int sort=CUBIT_TRUE, int unique=CUBIT_TRUE, int left_tab=3, const char *sep_string=",", const char *post_string_none="none\n")
static void process_entity_ids (int method, CubitString &ret_str, const char *pre_string, DLIList< int > &id_list, int max_len, const char *post_string, int sort, int unique, int tab_len, const char *sep_string, const char *post_string_none="none\n")
static int int_len (int num)
static void set_file_ptr (FILE *file_ptr)
static void reset_file_ptr ()
static FILE * get_file_ptr ()
static CubitBoolean compare (const char *a, const char *b)
static CubitSense opposite_sense (CubitSense sense)
static CubitString get_temporary_filename ()
static int string_length (const char *string, int tabsize=8)
static void print_columns (const std::vector< CubitString > &array, const CubitString &indent=CubitString())
static char * util_strdup (const char *s1)
static void util_strdup_free (char *s1)
static void cubit_sleep (int duration_in_seconds)
static CubitBoolean file_exist (const char *buffer)
static CubitBoolean file_exist (const CubitString &buffer)
static CubitString getenv (const CubitString &str)
static void setenv (const CubitString &var, const CubitString &value)
static CubitString get_computer_name ()
static CubitString get_os ()
static int num_cpu ()

Private Member Functions

 CubitUtil ()

Static Private Attributes

static FILE * fp = NULL

Detailed Description

Definition at line 30 of file CubitUtil.hpp.


Constructor & Destructor Documentation

CubitUtil::CubitUtil ( ) [inline, private]

Definition at line 130 of file CubitUtil.hpp.

{}

Member Function Documentation

static CubitBoolean CubitUtil::compare ( const char *  a,
const char *  b 
) [inline, static]

Definition at line 96 of file CubitUtil.hpp.

    { return ( a != NULL && b != NULL && 0 == strcmp(a, b) ); }
void CubitUtil::convert_string_to_lowercase ( char *  string) [static]

Definition at line 51 of file CubitUtil.cpp.

{
   register char *p = string;
   while (*p)
   {
     if (isascii(*p) && isupper(*p))
         *p = tolower(*p);
      p++;
   }
}
void CubitUtil::cubit_sleep ( int  duration_in_seconds) [static]

Definition at line 781 of file CubitUtil.cpp.

{
#ifdef _WIN32
  ::Sleep(duration_in_seconds*1000);
#else
  sleep(duration_in_seconds);
#endif
}
static CubitBoolean CubitUtil::file_exist ( const char *  buffer) [static]
static CubitBoolean CubitUtil::file_exist ( const CubitString buffer) [static]

Definition at line 810 of file CubitUtil.cpp.

{
  CubitString name = "unknown";
#ifdef _WIN32
  wchar_t machine_buf[MAX_COMPUTERNAME_LENGTH + 1];
  DWORD machine_buf_length = MAX_COMPUTERNAME_LENGTH + 1;
  if (::GetComputerNameW(machine_buf, &machine_buf_length))
    name = CubitString::toUtf8(machine_buf);
#else
  struct utsname uname_data;
  if( uname( &uname_data ) >= 0 )
  {
    name = uname_data.nodename;
  }
#endif  
  return name;
}
int CubitUtil::get_digits ( ) [static]

Definition at line 40 of file CubitUtil.cpp.

{
  return displayDigits;
}
CubitString CubitUtil::get_entity_ids_str ( const char *  pre_string,
DLIList< int > &  int_list,
int  width = 80,
const char *  post_string = "\n",
int  sort = CUBIT_TRUE,
int  unique = CUBIT_TRUE,
int  left_tab = 3,
const char *  sep_string = ",",
const char *  post_string_none = "none\n" 
) [static]

Definition at line 226 of file CubitUtil.cpp.

{
  CubitString ret_str;

  process_entity_ids( 0, ret_str, pre_string, id_list, width, post_string,
                      sort, unique, tab_len, sep_string, post_string_none );
  return ret_str;
}
FILE * CubitUtil::get_file_ptr ( ) [inline, static]

Definition at line 157 of file CubitUtil.hpp.

{return fp;}

Definition at line 828 of file CubitUtil.cpp.

{
#ifdef _WIN32
  CubitString os = "Microsoft Windows";
  OSVERSIONINFO osvi;
  
  ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
  osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  
  if(GetVersionEx(&osvi))
  {
    std::stringstream str;
    str << " ";
    str << osvi.dwMajorVersion << "." << osvi.dwMinorVersion;
    str << " ";
    str << osvi.szCSDVersion;
    DWORD build = osvi.dwBuildNumber & 0xFFFF;
    str << " (Build " << build << ")";
    os += str.str().c_str();
  }
#else
  CubitString os = "unknown";
  struct utsname uname_data;
  if( uname( &uname_data ) >= 0 )
  {
    os = uname_data.sysname;
    os += " ";
    os += uname_data.release;
  }
#endif
  return os;
}

Definition at line 641 of file CubitUtil.cpp.

{

  CubitString ret_str;

#ifdef _WIN32
  
  //get a place to put the temporary file
  CubitString temp_path = get_temp_directory();

  // make an empty temporary and return the name for it
  wchar_t temp_file_name[MAX_PATH];
  if( GetTempFileNameW(CubitString::toUtf16(temp_path.c_str()).c_str(), L"CBT", 0, temp_file_name) != 0 )
    ret_str = CubitString::toUtf8(temp_file_name); 

#else

  CubitString tmpdir = get_temp_directory();
  const char* filepattern = "CBT.XXXXXX";
    //needs to be two longer because of the "/"?
  char *temp_file_name = new char[tmpdir.length() + strlen(filepattern) + 2];
  sprintf(temp_file_name, "%s/%s", tmpdir.c_str(), filepattern);

  // make an empty file and return the name for it
  int fd = mkstemp(temp_file_name);
  if( fd != -1 )
  {
    ret_str = temp_file_name; 
    // release the open done by mkstemp,
    // temporary file still exists
    close(fd);
  }
  delete [] temp_file_name;

#endif

  return ret_str;
}
CubitString CubitUtil::getenv ( const CubitString str) [static]

Definition at line 790 of file CubitUtil.cpp.

{
#ifdef _WIN32
  return CubitString::toUtf8(_wgetenv(CubitString::toUtf16(var).c_str()));
#else
  return CubitString(::getenv(var.c_str()));
#endif
}
int CubitUtil::int_len ( int  num) [static]

Definition at line 543 of file CubitUtil.cpp.

{
  int len = 0; // length of the string to hold the integer number
  unsigned long n; // absolute value of the integer value
  
  // If the number is negative, add 1 for the negative sign
  if (num < 0) len++;
  
  // Loop until the absolute value of the number reaches 0
  n = INTABS(num);
  do {
    // Increment the length and divide the number by 10
    len++;
    n /= 10;
  } while (n);

  return len;
}
void CubitUtil::list_entity_ids ( const char *  pre_string,
const DLIList< CubitEntity * > &  entity_list,
int  width = 80,
const char *  post_string = "\n",
int  sort = CUBIT_TRUE,
int  unique = CUBIT_TRUE,
int  tab = 3,
const char *  sep_string = ",",
const char *  post_string_none = "none\n" 
) [static]

Definition at line 198 of file CubitUtil.cpp.

{
  DLIList <int> id_list( entity_list.size() );
  for ( int i=0; i<entity_list.size(); i++ ) 
    id_list.append( entity_list.next(i)->id() );

  list_entity_ids( pre_string, id_list, width, post_string, sort,
                   unique, tab, sep_string, post_string_none );
}
void CubitUtil::list_entity_ids ( const char *  pre_string,
DLIList< int > &  id_list,
int  width = 80,
const char *  post_string = "\n",
int  sort = CUBIT_TRUE,
int  unique = CUBIT_TRUE,
int  tab_len = 3,
const char *  sep_string = ",",
const char *  post_string_none = "none\n" 
) [static]

Definition at line 213 of file CubitUtil.cpp.

{
  CubitString ret_str;
  process_entity_ids( 1, ret_str, pre_string, id_list, width, post_string,
                      sort, unique, tab_len, sep_string, post_string_none );
}
void CubitUtil::list_ids ( const char *const  heading,
const DLIList< CubitEntity * > &  entity_list,
int  should_sort = CUBIT_FALSE,
int  report_once = CUBIT_FALSE,
int  wrap = 80 
) [static]

Definition at line 108 of file CubitUtil.cpp.

{
  if ( entity_list.size() == 0 )
  {
    PRINT_INFO("  No %s.\n", heading );
    return;
  }
  DLIList <int> id_list( entity_list.size() );
  for ( int j = 0; j < entity_list.size(); j++ )
  {
    id_list.append( entity_list[j]->id() );
  }

  if ( id_list.size() == 1 )
  {
    PRINT_INFO("  The 1 %s id is %d.\n", heading, id_list[0]);
    return;
  }
  sort_and_print_ids( heading, id_list, should_sort, report_once, wrap );
}
int CubitUtil::num_cpu ( ) [static]

Definition at line 861 of file CubitUtil.cpp.

{
  int num_cpu = 0;

  #ifdef _WIN32
    SYSTEM_INFO sysinfo;
    GetSystemInfo( &sysinfo );
    num_cpu = sysinfo.dwNumberOfProcessors;  
  #else
    num_cpu = sysconf( _SC_NPROCESSORS_ONLN );
  #endif
    
  return num_cpu;
}
CubitSense CubitUtil::opposite_sense ( CubitSense  sense) [inline, static]

Definition at line 144 of file CubitUtil.hpp.

{
   assert( sense == CUBIT_UNKNOWN ||
           sense == CUBIT_FORWARD ||
           sense == CUBIT_REVERSED );
   if ( sense == CUBIT_UNKNOWN ) return CUBIT_UNKNOWN;
   else {
      CubitSense opp_sense = (CubitSense) (1 - sense);
      return opp_sense;
   }
}
void CubitUtil::print_columns ( const std::vector< CubitString > &  array,
const CubitString indent = CubitString() 
) [static]

Definition at line 680 of file CubitUtil.cpp.

{
  int term_height, term_width;
  
  if( ! AppUtil::instance()->get_terminal_size( term_height, term_width ) )
  {
    for( size_t i = 0; i < array.size(); i++ )
    {
      PRINT_INFO("%s%s\n", indent.c_str(), array[i].c_str() );
    }
    return;
  }
  
    // find lenth of longest string
  int maxlen = 0;
  for( size_t i = 0; i < array.size(); i++ )
  {
    int len = CubitUtil::string_length(array[i].c_str());
    if( len > maxlen )
      maxlen = len;
  }
  
  char* const line = new char[CUBIT_MAX(maxlen,term_width)+2];
  
    // calculate number of columns of output
  term_width -= string_length(indent.c_str());
  int width = maxlen + 1;
  int columns = term_width > width ? term_width / width : 1;
  
    // calculate number of rows of output
  int rows = array.size() / columns;
  if( array.size() % columns )
    rows++;
  
    // calculate the width of one column
  if (columns > 1)
    width = maxlen + (term_width - columns * maxlen) / (columns - 1);
  else
    width = term_width;
  
    // now write output
  for( int i = 0; i < rows; i++ )
  {
    size_t idx;
    const char* str;
    char* ptr = line + sprintf( line, "%s", indent.c_str() );
    for(int j = 0; j < columns - 1; j++ )
    {
      idx = j * rows + i;
      if (idx < array.size() )
        str = array[idx].c_str();
      else
        str = "";
        
      ptr += sprintf( ptr, "%-*s", width, str);
    }
    
    idx = (columns - 1) * rows + i;
    if (idx < array.size() )
      sprintf(ptr, "%s\n", array[idx].c_str());
    else
      sprintf(ptr, "\n");
    
    PRINT_INFO( "%s", line );
  }
  
  delete [] line;
}
void CubitUtil::process_entity_ids ( int  method,
CubitString ret_str,
const char *  pre_string,
DLIList< int > &  id_list,
int  max_len,
const char *  post_string,
int  sort,
int  unique,
int  tab_len,
const char *  sep_string,
const char *  post_string_none = "none\n" 
) [static]

Definition at line 240 of file CubitUtil.cpp.

{
  // Method: 0 - to a string
  //         1 - to PRINT_INFO
  char temp[200];

  if ( id_list.size() == 0 ) {
    if( method )
      PRINT_INFO("%s%s", pre_string, post_string_none );
    else
    {
      sprintf( temp, "%s%s", pre_string, post_string_none );
      ret_str = temp;
    }
    if( fp )
      fprintf( fp, "%s%s", pre_string, post_string_none );
    return;
  }

  // sort
  if( sort )
  {
    id_list.sort();
    
    // make unique
    if( unique ) 
    {
      int i;
      DLIList <int> id_list_2( id_list );
      id_list_2.reset();
      id_list.clean_out();
      id_list.append( id_list_2.get_and_step() );
      for ( i=id_list_2.size()-1; i--; ) 
      {
        if ( id_list_2.get() != id_list_2.prev() )
          id_list.append( id_list_2.get() );
        id_list_2.step();
      }
    }
  }

  if( max_len < 0 )
    max_len = CUBIT_INT_MAX/2;
    
  // TODO: wrap prestring, if necessary
  if( method )
    PRINT_INFO( "%s", pre_string );
  else
    ret_str = pre_string;
  if( fp )
    fprintf( fp, "%s", pre_string );

  // Keep track of length printed
  int curr_len = strlen(pre_string);
  
  int num = 0;
  int begin = id_list.get();
  int previous = begin;
  int current;
  int comma = 0; // Is comma needed
  int beg_len, prev_len;
  int sep_len = strlen( sep_string );

  // Setup the tab
  char* tab = new char[tab_len+1];
  for( int i=0; i<tab_len; i++ )
     tab[i] = ' ';
  tab[tab_len] = '\0';

  // Loop until all the ids are printed.  Use ranges if possible.
  while( num < id_list.size()+1 )
  {
    current = id_list.get_and_step();
    num++;

    // Handle last entity
    if( num <= id_list.size() )
    {
      if( num==1 ) // Handle 1st time in loop
        continue;
      
      if( current==previous+1 )
      {
        previous = current;
        continue;
      }
    }

    // If we are here, we are no longer tracking a range and
    // need to print the range or a number.
    if( comma )
    {
      if( method )
        PRINT_INFO("%s", sep_string );
      else
        ret_str += sep_string;
      if( fp )
        fprintf( fp, "%s", sep_string );
      curr_len += sep_len;
    }

    if( begin==previous )
    {
      // a single number
      prev_len = int_len(previous);

      if( curr_len+1+prev_len+sep_len > max_len )
      {
        if( method )
        {
          PRINT_INFO( "\n" );
          PRINT_INFO( "%s%d", tab, previous );
        }
        else
        {
          sprintf( temp, "\n%s%d", tab, previous );
          ret_str += temp;
        }
        if( fp )
          fprintf( fp, "\n%s%d", tab, previous );
        curr_len = tab_len + prev_len;
      }
      else
      {
        if( comma ) // Don't print space before first item
        {
          if( method )
            PRINT_INFO( " " );
          else
            ret_str += " ";
          if( fp )
            fprintf( fp, " " );
          curr_len++;
        }

        if( method )
          PRINT_INFO( "%d", previous );
        else
        {
          sprintf( temp, "%d", previous );
          ret_str += temp;
        }
        if( fp )
          fprintf( fp, "%d", previous );
        curr_len = curr_len + prev_len;
      }
    }
    else if( previous==begin+1 )
    {
      // a range, but only 2 consecutive numbers
      prev_len = int_len(previous);
      beg_len = int_len(begin);

      // Print 1st
      if( curr_len+1+beg_len+sep_len > max_len )
      {
        if( method )
        {
          PRINT_INFO( "\n" );
          PRINT_INFO( "%s%d%s", tab, begin, sep_string );
        }
        else
        {
          sprintf( temp, "\n%s%d%s", tab, begin, sep_string );
          ret_str += temp;
        }
        if( fp )
          fprintf( fp, "\n%s%d%s", tab, begin, sep_string );
        curr_len = tab_len + beg_len + sep_len;
      }
      else
      {
        if( comma ) // Don't print space before first item
        {
          if( method )
            PRINT_INFO( " " );
          else
            ret_str += " ";
          if( fp )
            fprintf( fp, " " );
          curr_len++;
        }

        if( method )
          PRINT_INFO( "%d%s", begin, sep_string );
        else
        {
          sprintf( temp, "%d%s", begin, sep_string );
          ret_str += temp;
        }
        if( fp )
          fprintf( fp, "%d%s", begin, sep_string );
        curr_len = curr_len + beg_len + sep_len;
      }

      // Print 2nd
      if( curr_len+1+prev_len+sep_len > max_len )
      {
        if( method )
        {
          PRINT_INFO( "\n" );
          PRINT_INFO( "%s%d", tab, previous );
        }
        else
        {
          sprintf( temp, "\n%s%d", tab, previous );
          ret_str += temp;
        }
        if( fp )
          fprintf( fp, "\n%s%d", tab, previous );
        curr_len = tab_len + prev_len;
      }
      else
      {
        if( method )
          PRINT_INFO( " %d", previous );
        else
        {
          sprintf( temp, " %d", previous );
          ret_str += temp;
        }
        if( fp )
          fprintf( fp, " %d", previous );
        curr_len = curr_len + 1+prev_len;
      }
    }
    else
    {
      // a range of 3 or more consecutive numbers
      prev_len = int_len(previous);
      beg_len = int_len(begin);

      if( curr_len+beg_len+prev_len+5+sep_len > max_len )
      {
        if( method )
        {
          PRINT_INFO( "\n" );
          PRINT_INFO( "%s%d to %d", tab, begin, previous );
        }
        else
        {
          sprintf( temp, "\n%s%d to %d", tab, begin, previous );
          ret_str += temp;
        }
        if( fp )
          fprintf( fp, "\n%s%d to %d", tab, begin, previous );
        curr_len = tab_len + beg_len+prev_len+4;
      }
      else
      {
        if( comma ) // Don't print space before first item
        {
          if( method )
            PRINT_INFO( " " );
          else
            ret_str += " ";
          if( fp )
            fprintf( fp, " " );
          curr_len++;
        }

        if( method )
          PRINT_INFO( "%d to %d", begin, previous );
        else
        {
          sprintf( temp, "%d to %d", begin, previous );
          ret_str += temp;
        }
        if( fp )
          fprintf( fp, "%d to %d", begin, previous );
        curr_len = curr_len + beg_len+4+prev_len;
      }
    }

    begin = current;
    previous = current;
    comma = 1;

  }

  //TODO: wrap poststring, if required
  if (post_string) {
    
    if( method )
      PRINT_INFO( "%s", post_string );
    else
      ret_str += post_string;
    if( fp )
      fprintf( fp, "%s", post_string );
  }
  
  delete [] tab;
}
void CubitUtil::reset_file_ptr ( ) [inline, static]

Definition at line 141 of file CubitUtil.hpp.

{fp=NULL;}
void CubitUtil::set_digits ( int  new_digits) [static]

Definition at line 45 of file CubitUtil.cpp.

{
  displayDigits = new_digits;
}
void CubitUtil::set_file_ptr ( FILE *  file_ptr) [inline, static]

Definition at line 137 of file CubitUtil.hpp.

{fp=file_ptr;}
void CubitUtil::setenv ( const CubitString var,
const CubitString value 
) [static]

Definition at line 799 of file CubitUtil.cpp.

{
#ifdef _WIN32
  CubitString tmp = var + "=" + value;
  _wputenv(CubitString::toUtf16(tmp).c_str());
#else
  ::setenv(var.c_str(), value.c_str(), 1);
#endif
}
void CubitUtil::sort_and_print_ids ( const char *const  heading,
DLIList< int > &  id_list,
int  should_sort = CUBIT_FALSE,
int  report_once = CUBIT_FALSE,
int  wrap = 80 
) [static]

Definition at line 132 of file CubitUtil.cpp.

{
    // sort, if desired
  if ( should_sort ) {
    id_list.sort();
  }

  if ( report_once ) {
    DLIList <int> id_list_2( id_list );
    id_list_2.reset();
    id_list.clean_out();
    id_list.append( id_list_2.get_and_step() );
    for ( int j = id_list_2.size()-1; j--; )
    {
      if ( id_list_2.get() != id_list_2.prev() )
        id_list.append( id_list_2.get() );
      id_list_2.step();
    }
  }

  if( wrap == -1 )
  {
    // print out ranges
    int begin = id_list.get_and_step();
    int end = begin;
    int current = -1;
    PRINT_INFO("  The %d %s ids are %d", id_list.size(), heading, begin);
    for (int i=id_list.size()-1; i > 0; i--) {
      current = id_list.get_and_step();
      if (current == end+1) {
        end++;
      }
      else {
        if (end == begin) {
          PRINT_INFO(", %d", current);
        }
        else if (end == begin+1) {
          PRINT_INFO(", %d, %d", end, current);
        }
        else {
          PRINT_INFO(" to %d, %d", end, current);
        }
        begin = current;
        end = begin;
      }
    }
    if (current == begin + 1)   {
      PRINT_INFO(", %d", current);
    }
    else if (current != begin) {
      PRINT_INFO(" to %d", current);
    }
    PRINT_INFO(".\n");
  }
  else
  {
    char pre_string[67];
    sprintf( pre_string, "  The %d %s ids are: ", id_list.size(),heading );
    CubitUtil::list_entity_ids( pre_string, id_list, wrap, ".\n", CUBIT_FALSE,
                                CUBIT_FALSE );
  }
}
int CubitUtil::strcmp_case_insensitive ( const char *  s1,
const char *  s2 
) [static]

Definition at line 62 of file CubitUtil.cpp.

{
   char c1, c2;
   
   do
   {
      c1 = *s1++;
      if(isupper(c1))
         c1 = tolower(c1);
      
      c2 = *s2++;
      if(isupper(c2))
         c2 = tolower(c2);
      
      if(c1 != c2)
         return c1 - c2;
      
   } while(c1 != '\0');
   
   return 0;
}
int CubitUtil::string_length ( const char *  string,
int  tabsize = 8 
) [static]

Definition at line 750 of file CubitUtil.cpp.

{
  int result = 0;
  for( ; *string ; string++ )
  {
    if( *string == '\t' )
      result += tabsize;
    else if( *string >= ' ' )
      result ++;
  }
  return result;
}
int CubitUtil::strncmp_case_insensitive ( const char *  s1,
const char *  s2,
int  n 
) [static]

Definition at line 84 of file CubitUtil.cpp.

{
   char c1, c2;
   
   do
   {
      c1 = *s1++;
      if(isupper(c1))
         c1 = tolower(c1);
      
      c2 = *s2++;
      if(isupper(c2))
         c2 = tolower(c2);
      
      if(c1 != c2)
         return c1 - c2;
      
      n--;
   } while(c1 && n > 0);
   
   return 0;
}
char * CubitUtil::util_strdup ( const char *  s1) [static]

Definition at line 765 of file CubitUtil.cpp.

{
#ifdef CUBIT_NO_STRDUP
  int len = strlen(s1)+1;
  char* ret_char = (char*) malloc ( (unsigned long) len * sizeof(char));
  strcpy(ret_char, s1);
  return ret_char;
#else
#ifdef _WIN32
  return _strdup(s1);
#else   
  return strdup(s1);
#endif  
#endif  
}
static void CubitUtil::util_strdup_free ( char *  s1) [inline, static]

Definition at line 113 of file CubitUtil.hpp.

{free(s1);}

Member Data Documentation

FILE * CubitUtil::fp = NULL [static, private]

Definition at line 132 of file CubitUtil.hpp.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines