Argv_Type_Converter.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 
00003 //=============================================================================
00004 /**
00005  *  @file    Argv_Type_Converter.h
00006  *
00007  *  Argv_Type_Converter.h,v 1.9 2005/10/28 16:14:51 ossama Exp
00008  *
00009  *  @author Si Mong Park <spark@ociweb.com>
00010  */
00011 //=============================================================================
00012 
00013 #ifndef ACE_ARGV_TYPE_CONVERTER_H
00014 #define ACE_ARGV_TYPE_CONVERTER_H
00015 
00016 #include /**/ "ace/pre.h"
00017 
00018 #include "ace/ACE_export.h"
00019 #include "ace/OS_Memory.h"
00020 
00021 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00022 # pragma once
00023 #endif /* ACE_LACKS_PRAGMA_ONCE */
00024 
00025 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00026 
00027 /**
00028  * @class ACE_Argv_Type_Converter
00029  *
00030  * @brief To convert 'char' input/command line parameter to 'wchar_t'.
00031  *
00032  * This class is to convert 'char' type command line paramter to
00033  * wide-character (wchar_t) format and stores the copy of it.
00034  * This is useful for all classes that use 'char**' argv but cannot
00035  * be converted into 'ACE_TCHAR**' version.
00036  * Note that the converted data will be lost upon destruction, so
00037  * classes should use this class as their data member.
00038  */
00039 class ACE_Export ACE_Argv_Type_Converter
00040 {
00041 public:
00042 
00043   ACE_Argv_Type_Converter (int &argc, char** argv);
00044 
00045 #if defined (ACE_USES_WCHAR)
00046   ACE_Argv_Type_Converter (int &argc, wchar_t** argv);
00047 #endif  // ACE_USES_WCHAR
00048 
00049   ~ACE_Argv_Type_Converter (void);
00050 
00051   /// Returns the pointer of converted command line.
00052   ACE_TCHAR** get_TCHAR_argv (void);
00053 
00054   /// Returns the pointer of ASCII (char) command line.
00055   char** get_ASCII_argv (void);
00056 
00057   /// Returns the number of sub paramters (argc).
00058   int& get_argc (void);
00059 
00060 private:
00061 
00062   /// Copy Constructor should not be used.
00063   ACE_Argv_Type_Converter (const ACE_Argv_Type_Converter&);
00064 
00065   /// Assignment '=' operator should not be used.
00066   ACE_Argv_Type_Converter operator= (const ACE_Argv_Type_Converter&);
00067 
00068 #if defined (ACE_USES_WCHAR)
00069 
00070   /// Perform common initialization for two Ctor's.
00071   void initialize (void);
00072 
00073   /// Align all entries in the char type argv list with wchar_t type
00074   /// argv list.
00075   void align_char_with_wchar (void);
00076 
00077   /// Align all entries in the wchar_t type argv list with char type
00078   /// argv list.
00079   void align_wchar_with_char (void);
00080 
00081   /// Clean up removed (comsumed) argv entries and reset the pass flags.
00082   void cleanup (void);
00083 #endif  // ACE_USES_WCHAR
00084 
00085 private:
00086   /// Original number of input paramter, same as 'argc'.
00087   int &saved_argc_;
00088 
00089   /// Data member pointer that contains converted argv in ACE_ANTI_TCHAR.
00090   char** char_argv_;
00091 
00092 #if defined (ACE_USES_WCHAR)
00093   /// Data member pointer that contains converted argv in ACE_TCHAR.
00094   wchar_t** wchar_argv_;
00095 
00096   /// argc value before any argv has been passed.
00097   int before_pass_argc_;
00098 
00099   /// FALSE represents original argv passed in is char, and TRUE
00100   /// represents wchar_t.
00101   const int original_type_;
00102 
00103   /// TRUE indicates wchar_t type argv has been passed.
00104   int wchar_passed_;
00105 
00106   /// TRUE indicates char type argv has been passed.
00107   int char_passed_;
00108 #endif  /* ACE_USES_WCHAR */
00109 };
00110 
00111 ACE_END_VERSIONED_NAMESPACE_DECL
00112 
00113 #if defined (__ACE_INLINE__)
00114 #include "ace/Argv_Type_Converter.inl"
00115 #endif  /* __ACE_INLINE__ */
00116 
00117 #include /**/ "ace/post.h"
00118 
00119 #endif  /* ACE_ARGV_TYPE_CONVERTER_H */

Generated on Thu Nov 9 09:41:45 2006 for ACE by doxygen 1.3.6