summaryrefslogtreecommitdiff
path: root/ACE/examples/Shared_Malloc/Options.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/examples/Shared_Malloc/Options.cpp')
-rw-r--r--ACE/examples/Shared_Malloc/Options.cpp200
1 files changed, 200 insertions, 0 deletions
diff --git a/ACE/examples/Shared_Malloc/Options.cpp b/ACE/examples/Shared_Malloc/Options.cpp
new file mode 100644
index 00000000000..44bf59b0aa6
--- /dev/null
+++ b/ACE/examples/Shared_Malloc/Options.cpp
@@ -0,0 +1,200 @@
+// $Id$
+
+#include "ace/Get_Opt.h"
+#include "Options.h"
+#include "ace/Log_Msg.h"
+#include "ace/OS_NS_stdlib.h"
+#include "ace/OS_NS_string.h"
+
+// Static Singleton instance.
+Options *Options::instance_ = 0;
+
+Options *
+Options::instance (void)
+{
+ if (Options::instance_ == 0)
+ Options::instance_ = new Options ();
+
+ return Options::instance_;
+}
+
+const char *
+Options::program_name (void)
+{
+ return this->program_name_;
+}
+
+const char *
+Options::slave_name (void)
+{
+ return this->slave_name_;
+}
+
+int
+Options::debug (void)
+{
+ return this->debug_;
+}
+
+int
+Options::exec_slave (void)
+{
+ return this->exec_slave_;
+}
+
+size_t
+Options::iteration_count (void)
+{
+ return this->iteration_count_;
+}
+
+int
+Options::use_sbrk (void)
+{
+ return this->use_sbrk_;
+}
+
+size_t
+Options::max_msg_size (void)
+{
+ return this->max_msg_size_;
+}
+
+size_t
+Options::spawn_count (void)
+{
+ return this->spawn_count_;
+}
+
+int
+Options::spawn_threads (void)
+{
+ return this->spawn_threads_;
+}
+
+int
+Options::use_mmap (void)
+{
+ return this->use_mmap_;
+}
+
+int
+Options::use_shmem (void)
+{
+ return this->use_shmem_;
+}
+
+int
+Options::child (void)
+{
+ return this->child_;
+}
+
+// Explain usage and exit.
+
+void
+Options::print_usage_and_die (void)
+{
+ //FUZZ: disable check_for_lack_ACE_OS
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("usage: %n")
+ ACE_TEXT ("\n[-d] (run in debugging mode)\n")
+ ACE_TEXT ("[-e] (use exec(2) in addition to fork(2))\n")
+ ACE_TEXT ("[-l] (use C++ new operator rather than sbrk(2)\n")
+ ACE_TEXT ("[-L max_msg_size]\n")
+ ACE_TEXT ("[-m] (use mmap rather than SysV shared memory)\n")
+ ACE_TEXT ("[-p] (use processes rather than threads)\n")
+ ACE_TEXT ("[-s] (use SysV shared memory rather than mmap)\n")
+ ACE_TEXT ("[-t number of threads or processes to spawn]\n")
+ ACE_TEXT ("[-T] (enable tracking)\n")
+ ACE_TEXT ("[-n iteration_count]\n")));
+ //FUZZ: enable check_for_lack_ACE_OS
+
+ ACE_OS::exit (1);
+ /* NOTREACHED */
+}
+
+Options::Options (void)
+ : debug_ (0),
+ exec_slave_ (0),
+ iteration_count_ (100),
+ use_sbrk_ (0),
+ use_shmem_ (0),
+ max_msg_size_ (127),
+ spawn_count_ (1),
+ spawn_threads_ (1),
+ use_mmap_ (0),
+ child_ (0)
+{
+ ACE_OS::strcpy (this->slave_name_, "slave");
+}
+
+void
+Options::parse_args (int argc, ACE_TCHAR *argv[])
+{
+ ACE_Get_Opt get_opt (argc, argv, ACE_TEXT ("dehlL:mn:pst:T"));
+
+ ACE_OS::strcpy (this->program_name_, ACE_TEXT_ALWAYS_CHAR (argv[0]));
+ ACE_LOG_MSG->open (argv[0]);
+
+ // Put in a special-case check for child process.
+ if (ACE_OS::strcmp (this->program_name_, slave_name_) == 0)
+ {
+ this->child_ = 1;
+ this->use_mmap_ = 1;
+ }
+
+ for (int c;
+ (c = get_opt ()) != -1;
+ )
+ {
+ switch (c)
+ {
+ case 'd':
+ this->debug_ = 1;
+ break;
+ case 'e':
+ this->exec_slave_ = 1;
+ break;
+ case 'h':
+ this->print_usage_and_die ();
+ /* NOTREACHED */
+ break;
+ case 'l':
+ this->use_sbrk_ = 0;
+ break;
+ case 'L':
+ this->max_msg_size_ = ACE_OS::atoi (get_opt.opt_arg ());
+ break;
+ case 'm':
+ this->use_mmap_ = 1;
+ break;
+ case 'n':
+ this->iteration_count_ = ACE_OS::atoi (get_opt.opt_arg ());
+ break;
+ case 'p': // Spawn processes rather than threads
+ this->spawn_threads_ = 0;
+ break;
+ case 's':
+ // Use System V shared memory...
+ this->use_shmem_ = 1;
+ break;
+ case 't':
+ this->spawn_count_ = ACE_OS::atoi (get_opt.opt_arg ());
+ break;
+ case 'T':
+#if defined (ACE_HAS_TRACE)
+ ACE_Trace::start_tracing ();
+#endif /* ACE_HAS_TRACE */
+ break;
+ default:
+ this->print_usage_and_die ();
+ /* NOTREACHED */
+ break;
+ }
+ }
+
+ // Switch to using MMAP when the -p and -e options are enabled.
+ if (this->exec_slave_ == 1 && this->spawn_threads_ == 0)
+ this->use_mmap_ = 1;
+}