00001 /* -*- C++ -*- */ 00002 // $Id: ARGV.inl 76208 2006-12-28 15:02:27Z schmidt $ 00003 00004 #include "ace/Global_Macros.h" 00005 00006 // Open versioned namespace, if enabled by the user. 00007 ACE_BEGIN_VERSIONED_NAMESPACE_DECL 00008 00009 template <typename CHAR_TYPE> ACE_INLINE 00010 ACE_ARGV_Queue_Entry_T<CHAR_TYPE>::ACE_ARGV_Queue_Entry_T (void) 00011 : arg_(0), 00012 quote_arg_(false) 00013 { 00014 // No-op 00015 } 00016 00017 template <typename CHAR_TYPE> ACE_INLINE 00018 ACE_ARGV_Queue_Entry_T<CHAR_TYPE>::ACE_ARGV_Queue_Entry_T (const CHAR_TYPE *arg, 00019 bool quote_arg) 00020 : arg_(arg), 00021 quote_arg_(quote_arg) 00022 { 00023 // No-op 00024 } 00025 00026 template <typename CHAR_TYPE> ACE_INLINE 00027 ACE_ARGV_Queue_Entry_T<CHAR_TYPE>::ACE_ARGV_Queue_Entry_T (const ACE_ARGV_Queue_Entry_T<CHAR_TYPE> &entry) 00028 : arg_(entry.arg_), 00029 quote_arg_(entry.quote_arg_) 00030 { 00031 // No-op 00032 } 00033 00034 template <typename CHAR_TYPE> ACE_INLINE 00035 ACE_ARGV_Queue_Entry_T<CHAR_TYPE>::~ACE_ARGV_Queue_Entry_T (void) 00036 { 00037 // No-op just to keep some compilers happy... 00038 } 00039 00040 // Return the number of args 00041 template <typename CHAR_TYPE> 00042 ACE_INLINE int 00043 ACE_ARGV_T<CHAR_TYPE>::argc (void) const 00044 { 00045 ACE_TRACE ("ACE_ARGV_T::argc"); 00046 // Try to create the argv_ if it isn't there 00047 ACE_ARGV_T<CHAR_TYPE> *nonconst_this = 00048 const_cast <ACE_ARGV_T<CHAR_TYPE> *> (this); 00049 (void) nonconst_this->argv (); 00050 return this->argc_; 00051 } 00052 00053 // Return the arguments in a space-separated string 00054 template <typename CHAR_TYPE> 00055 ACE_INLINE const CHAR_TYPE * 00056 ACE_ARGV_T<CHAR_TYPE>::buf (void) 00057 { 00058 ACE_TRACE ("ACE_ARGV_T::buf"); 00059 00060 if (this->buf_ == 0 && this->iterative_) 00061 this->create_buf_from_queue (); 00062 00063 return (const CHAR_TYPE *) this->buf_; 00064 } 00065 00066 // Return the arguments in an entry-per-argument array 00067 00068 template <typename CHAR_TYPE> 00069 ACE_INLINE CHAR_TYPE ** 00070 ACE_ARGV_T<CHAR_TYPE>::argv (void) 00071 { 00072 ACE_TRACE ("ACE_ARGV_T::argv"); 00073 00074 // Try to create the argv_ if it isn't there 00075 if (this->argv_ == 0) 00076 { 00077 if (this->iterative_ && this->buf_ == 0) 00078 this->create_buf_from_queue (); 00079 00080 // Convert buf_ to argv_ 00081 if (this->string_to_argv () == -1) 00082 return (CHAR_TYPE **) 0; 00083 } 00084 00085 return (CHAR_TYPE **) this->argv_; 00086 } 00087 00088 // Subscript operator. 00089 00090 template <typename CHAR_TYPE> 00091 ACE_INLINE const CHAR_TYPE * 00092 ACE_ARGV_T<CHAR_TYPE>::operator[] (size_t i) 00093 { 00094 ACE_TRACE ("ACE_ARGV_T::operator[]"); 00095 00096 // Don't go out of bounds. 00097 if (i >= static_cast<size_t> (this->argc_)) 00098 return 0; 00099 00100 return (const CHAR_TYPE *) this->argv ()[i]; 00101 } 00102 00103 // Close versioned namespace, if enabled by the user. 00104 ACE_END_VERSIONED_NAMESPACE_DECL