1 // 2 // exenv.h 3 // 4 // Copyright (C) 1997 Limit Point Systems, Inc. 5 // 6 // Author: Curtis Janssen <cljanss@limitpt.com> 7 // Maintainer: LPS 8 // 9 // This file is part of the SC Toolkit. 10 // 11 // The SC Toolkit is free software; you can redistribute it and/or modify 12 // it under the terms of the GNU Library General Public License as published by 13 // the Free Software Foundation; either version 2, or (at your option) 14 // any later version. 15 // 16 // The SC Toolkit is distributed in the hope that it will be useful, 17 // but WITHOUT ANY WARRANTY; without even the implied warranty of 18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 // GNU Library General Public License for more details. 20 // 21 // You should have received a copy of the GNU Library General Public License 22 // along with the SC Toolkit; see the file COPYING.LIB. If not, write to 23 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 24 // 25 // The U.S. Government is granted a limited license as per AL 91-7. 26 // 27 28 #ifdef __GNUG__ 29 #pragma interface 30 #endif 31 32 #ifndef _util_misc_exenv_h 33 #define _util_misc_exenv_h 34 35 #include <stdlib.h> 36 37 #include <scconfig.h> 38 39 #include <iostream> 40 41 #include <util/misc/formio.h> 42 43 namespace sc { 44 45 /** The ExEnv class is used to find out about how 46 the program is being run. */ 47 class ExEnv { 48 protected: 49 static int initialized_; 50 static int *argc_; 51 static char ***argv_; 52 static char hostname_[256]; 53 static char username_[9]; 54 55 static size_t mem_; 56 static int nproc_; 57 58 static std::ostream *out_; 59 static std::ostream *nullstream_; 60 public: 61 /// Set the argument count and vector. 62 static void init(int &argcref, char **&argvref); 63 /// Return nonzero if ExEnv has been initialized. initialized()64 static int initialized() { return argc_ != 0; } 65 /// Return an reference to the argument count. argc()66 static int &argc() { return *argc_; } 67 /// Return an reference to the argument vector. argv()68 static char **&argv() { return *argv_; } 69 /// Return argv[0] with the path removed. 70 static const char *program_name(); 71 /// Return the host name. hostname()72 static const char *hostname() { return hostname_; } 73 /// Return the user name. username()74 static const char *username() { return username_; } 75 set_out(std::ostream * o)76 static void set_out(std::ostream *o) { SCFormIO::init_ostream(*o);out_=o; } 77 /// Return an ostream that writes from all nodes. outn()78 static std::ostream &outn() { if (!out_)set_out(&std::cout);return *out_; } 79 /// Return an ostream for error messages that writes from all nodes. errn()80 static std::ostream &errn() { return outn(); } 81 /// Return an ostream that writes from node 0. 82 static std::ostream &out0(); 83 /// Return an ostream for error messages that writes from node 0. err0()84 static std::ostream &err0() { return out0(); } 85 86 /// The amount of memory on this node. memory()87 static size_t memory() { return mem_; } 88 /// The number of processors on this node. nproc()89 static int nproc() { return nproc_; } 90 }; 91 92 } 93 94 #endif 95 96 // Local Variables: 97 // mode: c++ 98 // c-file-style: "CLJ" 99 // End: 100