]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/cmdargs.h
Don't define __STRICT_ANSI__, we should build both with and without it.
[wxWidgets.git] / include / wx / cmdargs.h
index 57b22b42e54260266391c968ad1071b2d5c49ade..e4167f0fd6a4502aa4938a4a3f0464281c154211 100644 (file)
@@ -3,7 +3,6 @@
 // Purpose:     declaration of wxCmdLineArgsArray helper class
 // Author:      Vadim Zeitlin
 // Created:     2007-11-12
 // Purpose:     declaration of wxCmdLineArgsArray helper class
 // Author:      Vadim Zeitlin
 // Created:     2007-11-12
-// RCS-ID:      $Id$
 // Copyright:   (c) 2007 Vadim Zeitlin <vadim@wxwindows.org>
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 // Copyright:   (c) 2007 Vadim Zeitlin <vadim@wxwindows.org>
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
@@ -26,7 +25,7 @@
 // as it's used for compatibility, it tries to look as much as traditional
 // (char **) argv as possible, in particular it provides implicit conversions
 // to "char **" and also array-like operator[]
 // as it's used for compatibility, it tries to look as much as traditional
 // (char **) argv as possible, in particular it provides implicit conversions
 // to "char **" and also array-like operator[]
-class wxCmdLineArgsArray
+class WXDLLIMPEXP_BASE wxCmdLineArgsArray
 {
 public:
     wxCmdLineArgsArray() { m_argsA = NULL; m_argsW = NULL; }
 {
 public:
     wxCmdLineArgsArray() { m_argsA = NULL; m_argsW = NULL; }
@@ -80,14 +79,31 @@ public:
         return !m_args.empty();
     }
 
         return !m_args.empty();
     }
 
+    // and the same for "if ( !argv )" checks
+    bool operator!() const
+    {
+        return m_args.empty();
+    }
+
     wxString operator[](size_t n) const
     {
         return m_args[n];
     }
 
     wxString operator[](size_t n) const
     {
         return m_args[n];
     }
 
-    // this is the only method of this class which doesn't exist solely for
-    // compatibility purposes: it allows to access the arguments as a
-    // convenient array of wxStrings
+    // we must provide this overload for g++ 3.4 which can't choose between
+    // our operator[](size_t) and ::operator[](char**, int) otherwise
+    wxString operator[](int n) const
+    {
+        return m_args[n];
+    }
+
+
+    // convenience methods, i.e. not existing only for backwards compatibility
+
+    // do we have any arguments at all?
+    bool IsEmpty() const { return m_args.empty(); }
+
+    // access the arguments as a convenient array of wxStrings
     const wxArrayString& GetArguments() const { return m_args; }
 
     ~wxCmdLineArgsArray()
     const wxArrayString& GetArguments() const { return m_args; }
 
     ~wxCmdLineArgsArray()
@@ -119,9 +135,16 @@ private:
     mutable char **m_argsA;
     mutable wchar_t **m_argsW;
 
     mutable char **m_argsA;
     mutable wchar_t **m_argsW;
 
-    DECLARE_NO_COPY_CLASS(wxCmdLineArgsArray)
+    wxDECLARE_NO_COPY_CLASS(wxCmdLineArgsArray);
 };
 
 };
 
+// provide global operator overload for compatibility with the existing code
+// doing things like "if ( condition && argv )"
+inline bool operator&&(bool cond, const wxCmdLineArgsArray& array)
+{
+    return cond && !array.IsEmpty();
+}
+
 #endif // wxUSE_UNICODE
 
 #endif // _WX_CMDARGS_H_
 #endif // wxUSE_UNICODE
 
 #endif // _WX_CMDARGS_H_