Add and use type definitions for structures and enumerations
[argpar.git] / argpar / argpar.h
index 07ec8c47071f8f0f850e7d41020faa8d66361688..4060470f805626b4dc8b62b80931fbb0737c48e7 100644 (file)
 
 #include <stdbool.h>
 
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
 /*!
 @mainpage
 
@@ -83,7 +87,8 @@ A parsing item (the result of argpar_iter_next()) has the type
 #argpar_item.
 
 Get the type (option or non-option) of an item with
-argpar_item_type(). Each item type has its set of dedicated functions
+\link argpar_item_type(const argpar_item_t *) argpar_item_type()\endlink.
+Each item type has its set of dedicated functions
 (\c argpar_item_opt_ and \c argpar_item_non_opt_ prefixes).
 
 argpar_iter_next() produces the items in the same order that it parses
@@ -96,14 +101,14 @@ example, that for:
 
 argpar_iter_next() produces the following items, in this order:
 
--# Option item (<code>\--hello</code>).
--# Option item (<code>\--count</code> with argument <code>23</code>).
--# Non-option item (<code>/path/to/file</code>).
--# Option item (<code>-a</code>).
--# Option item (<code>-b</code>).
--# Option item (<code>\--type</code> with argument <code>file</code>).
--# Non-option item (<code>\--</code>).
--# Non-option item (<code>magie</code>).
+-# Option item: <code>\--hello</code>.
+-# Option item: <code>\--count</code> with argument <code>23</code>.
+-# Non-option item: <code>/path/to/file</code>.
+-# Option item: <code>-a</code>.
+-# Option item: <code>-b</code>.
+-# Option item: <code>\--type</code> with argument <code>file</code>.
+-# Non-option item: <code>\--</code>.
+-# Non-option item: <code>magie</code>.
 */
 
 /*
@@ -119,7 +124,14 @@ argpar_iter_next() produces the following items, in this order:
 # define ARGPAR_HIDDEN __attribute__((visibility("hidden")))
 #endif
 
-struct argpar_opt_descr;
+/* Internal: `noexcept` specifier if C++ ≥ 11 */
+#if defined(__cplusplus) && (__cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900))
+# define ARGPAR_NOEXCEPT noexcept
+#else
+# define ARGPAR_NOEXCEPT
+#endif
+
+typedef struct argpar_opt_descr argpar_opt_descr_t;
 
 /*!
 @name Item API
@@ -128,15 +140,16 @@ struct argpar_opt_descr;
 
 /*!
 @brief
-    Type of a parsing item, as returned by argpar_item_type().
+    Type of a parsing item, as returned by
+    \link argpar_item_type(const argpar_item *) argpar_item_type()\endlink.
 */
-enum argpar_item_type {
+typedef enum argpar_item_type {
        /// Option
        ARGPAR_ITEM_TYPE_OPT,
 
        /// Non-option
        ARGPAR_ITEM_TYPE_NON_OPT,
-};
+} argpar_item_type_t;
 
 /*!
 @struct argpar_item
@@ -146,7 +159,7 @@ enum argpar_item_type {
 
 argpar_iter_next() sets a pointer to such a type.
 */
-struct argpar_item;
+typedef struct argpar_item argpar_item_t;
 
 /*!
 @brief
@@ -164,7 +177,7 @@ struct argpar_item;
 /// @cond hidden_macro
 ARGPAR_HIDDEN
 /// @endcond
-enum argpar_item_type argpar_item_type(const struct argpar_item *item);
+argpar_item_type_t argpar_item_type(const argpar_item_t *item) ARGPAR_NOEXCEPT;
 
 /*!
 @brief
@@ -184,8 +197,8 @@ enum argpar_item_type argpar_item_type(const struct argpar_item *item);
 /// @cond hidden_macro
 ARGPAR_HIDDEN
 /// @endcond
-const struct argpar_opt_descr *argpar_item_opt_descr(
-               const struct argpar_item *item);
+const argpar_opt_descr_t *argpar_item_opt_descr(
+               const argpar_item_t *item) ARGPAR_NOEXCEPT;
 
 /*!
 @brief
@@ -206,7 +219,7 @@ const struct argpar_opt_descr *argpar_item_opt_descr(
 /// @cond hidden_macro
 ARGPAR_HIDDEN
 /// @endcond
-const char *argpar_item_opt_arg(const struct argpar_item *item);
+const char *argpar_item_opt_arg(const argpar_item_t *item) ARGPAR_NOEXCEPT;
 
 /*!
 @brief
@@ -229,7 +242,8 @@ const char *argpar_item_opt_arg(const struct argpar_item *item);
 /// @cond hidden_macro
 ARGPAR_HIDDEN
 /// @endcond
-const char *argpar_item_non_opt_arg(const struct argpar_item *item);
+const char *argpar_item_non_opt_arg(
+               const argpar_item_t *item) ARGPAR_NOEXCEPT;
 
 /*!
 @brief
@@ -265,7 +279,8 @@ argument index of \c mix is&nbsp;4.
 /// @cond hidden_macro
 ARGPAR_HIDDEN
 /// @endcond
-unsigned int argpar_item_non_opt_orig_index(const struct argpar_item *item);
+unsigned int argpar_item_non_opt_orig_index(
+               const argpar_item_t *item) ARGPAR_NOEXCEPT;
 
 /*!
 @brief
@@ -300,7 +315,8 @@ argument index of \c mix is&nbsp;1.
 /// @cond hidden_macro
 ARGPAR_HIDDEN
 /// @endcond
-unsigned int argpar_item_non_opt_non_opt_index(const struct argpar_item *item);
+unsigned int argpar_item_non_opt_non_opt_index(
+               const argpar_item_t *item) ARGPAR_NOEXCEPT;
 
 /*!
 @brief
@@ -312,7 +328,7 @@ unsigned int argpar_item_non_opt_non_opt_index(const struct argpar_item *item);
 /// @cond hidden_macro
 ARGPAR_HIDDEN
 /// @endcond
-void argpar_item_destroy(const struct argpar_item *item);
+void argpar_item_destroy(const argpar_item_t *item) ARGPAR_NOEXCEPT;
 
 /*!
 @def ARGPAR_ITEM_DESTROY_AND_RESET(_item)
@@ -323,7 +339,7 @@ void argpar_item_destroy(const struct argpar_item *item);
 
 @param[in] _item
     Item to destroy and variable to reset
-    (<code>const struct argpar_item *</code> type).
+    (<code>const argpar_item_t *</code> type).
 */
 #define ARGPAR_ITEM_DESTROY_AND_RESET(_item)                           \
        {                                                               \
@@ -338,7 +354,12 @@ void argpar_item_destroy(const struct argpar_item *item);
 @{
 */
 
-enum argpar_error_type {
+/*!
+@brief
+    Parsing error type, as returned by
+    \link argpar_error_type(const argpar_error_t *) argpar_error_type()\endlink.
+*/
+typedef enum argpar_error_type {
        /// Unknown option error
        ARGPAR_ERROR_TYPE_UNKNOWN_OPT,
 
@@ -347,7 +368,7 @@ enum argpar_error_type {
 
        /// Unexpected option argument error
        ARGPAR_ERROR_TYPE_UNEXPECTED_OPT_ARG,
-};
+} argpar_error_type_t;
 
 /*!
 @struct argpar_error
@@ -355,11 +376,26 @@ enum argpar_error_type {
 @brief
     Opaque parsing error type
 */
-struct argpar_error;
+typedef struct argpar_error argpar_error_t;
+
+/*!
+@brief
+    Returns the type of the parsing error object \p error.
+
+@param[in] error
+    Parsing error of which to get the type.
+
+@returns
+    Type of \p error.
 
+@pre
+    \p error is not \c NULL.
+*/
+/// @cond hidden_macro
 ARGPAR_HIDDEN
-enum argpar_error_type argpar_error_type(
-       const struct argpar_error *error);
+/// @endcond
+argpar_error_type_t argpar_error_type(
+               const argpar_error_t *error) ARGPAR_NOEXCEPT;
 
 /*!
 @brief
@@ -379,7 +415,8 @@ enum argpar_error_type argpar_error_type(
 /// @cond hidden_macro
 ARGPAR_HIDDEN
 /// @endcond
-unsigned int argpar_error_orig_index(const struct argpar_error *error);
+unsigned int argpar_error_orig_index(
+               const argpar_error_t *error) ARGPAR_NOEXCEPT;
 
 /*!
 @brief
@@ -393,9 +430,6 @@ With the long option with argument form, for example
 <code>\--mireille=deyglun</code>, this function only returns the name
 part (<code>\--mireille</code> in the last example).
 
-You may only call this function if the call to argpar_iter_next() which
-set \p error returned #ARGPAR_ITER_NEXT_STATUS_ERROR_UNKNOWN_OPT.
-
 @param[in] error
     Parsing error of which to get the name of the unknown option.
 
@@ -405,23 +439,21 @@ set \p error returned #ARGPAR_ITER_NEXT_STATUS_ERROR_UNKNOWN_OPT.
 @pre
     \p error is not \c NULL.
 @pre
-    The call to argpar_iter_next() which set \p error returned
-    #ARGPAR_ITER_NEXT_STATUS_ERROR_UNKNOWN_OPT.
+    The type of \p error, as returned by
+    \link argpar_error_type(const argpar_error_t *) argpar_error_type()\endlink,
+    is #ARGPAR_ERROR_TYPE_UNKNOWN_OPT.
 */
 /// @cond hidden_macro
 ARGPAR_HIDDEN
 /// @endcond
-const char *argpar_error_unknown_opt_name(const struct argpar_error *error);
+const char *argpar_error_unknown_opt_name(
+               const argpar_error_t *error) ARGPAR_NOEXCEPT;
 
 /*!
 @brief
     Returns the descriptor of the option for which the parsing error
     described by \p error occurred.
 
-You may only call this function if the call to argpar_iter_next() which
-set \p error returned #ARGPAR_ITER_NEXT_STATUS_ERROR_MISSING_OPT_ARG or
-#ARGPAR_ITER_NEXT_STATUS_ERROR_UNEXPECTED_OPG_ARG.
-
 @param[in] error
     Parsing error of which to get the option descriptor.
 @param[out] is_short
@@ -441,15 +473,16 @@ set \p error returned #ARGPAR_ITER_NEXT_STATUS_ERROR_MISSING_OPT_ARG or
 @pre
     \p error is not \c NULL.
 @pre
-    The call to argpar_iter_next() which set \p error returned
-    #ARGPAR_ITER_NEXT_STATUS_ERROR_MISSING_OPT_ARG or
-    #ARGPAR_ITER_NEXT_STATUS_ERROR_UNEXPECTED_OPG_ARG.
+    The type of \p error, as returned by
+    \link argpar_error_type(const argpar_error_t *) argpar_error_type()\endlink,
+    is #ARGPAR_ERROR_TYPE_MISSING_OPT_ARG or
+    #ARGPAR_ERROR_TYPE_UNEXPECTED_OPT_ARG.
 */
 /// @cond hidden_macro
 ARGPAR_HIDDEN
 /// @endcond
-const struct argpar_opt_descr *argpar_error_opt_descr(
-               const struct argpar_error *error, bool *is_short);
+const argpar_opt_descr_t *argpar_error_opt_descr(const argpar_error_t *error,
+               bool *is_short) ARGPAR_NOEXCEPT;
 
 /*!
 @brief
@@ -461,7 +494,7 @@ const struct argpar_opt_descr *argpar_error_opt_descr(
 /// @cond hidden_macro
 ARGPAR_HIDDEN
 /// @endcond
-void argpar_error_destroy(const struct argpar_error *error);
+void argpar_error_destroy(const argpar_error_t *error) ARGPAR_NOEXCEPT;
 
 /// @}
 
@@ -480,7 +513,7 @@ terminated with #ARGPAR_OPT_DESCR_SENTINEL, as its \p descrs parameter.
 The typical usage is, for example:
 
 @code
-const struct argpar_opt_descr descrs[] = {
+const argpar_opt_descr_t descrs[] = {
     { 0, 'd', NULL, false },
     { 1, '\0', "squeeze", true },
     { 2, 'm', "meow", true },
@@ -488,7 +521,7 @@ const struct argpar_opt_descr descrs[] = {
 };
 @endcode
 */
-struct argpar_opt_descr {
+typedef struct argpar_opt_descr {
        /// Numeric ID, to uniquely identify this descriptor
        const int id;
 
@@ -500,7 +533,7 @@ struct argpar_opt_descr {
 
        /// \c true if this option has an argument
        const bool with_arg;
-};
+} argpar_opt_descr_t;
 
 /*!
 @brief
@@ -509,7 +542,7 @@ struct argpar_opt_descr {
 The typical usage is, for example:
 
 @code
-const struct argpar_opt_descr descrs[] = {
+const argpar_opt_descr_t descrs[] = {
     { 0, 'd', NULL, false },
     { 1, '\0', "squeeze", true },
     { 2, 'm', "meow", true },
@@ -527,7 +560,7 @@ const struct argpar_opt_descr descrs[] = {
 
 argpar_iter_create() returns a pointer to such a type.
 */
-struct argpar_iter;
+typedef struct argpar_iter argpar_iter_t;
 
 /*!
 @brief
@@ -586,9 +619,8 @@ argpar_iter_next().
 /// @cond hidden_macro
 ARGPAR_HIDDEN
 /// @endcond
-struct argpar_iter *argpar_iter_create(unsigned int argc,
-               const char * const *argv,
-               const struct argpar_opt_descr *descrs);
+argpar_iter_t *argpar_iter_create(unsigned int argc, const char * const *argv,
+               const argpar_opt_descr_t *descrs) ARGPAR_NOEXCEPT;
 
 /*!
 @brief
@@ -603,7 +635,7 @@ struct argpar_iter *argpar_iter_create(unsigned int argc,
 /// @cond hidden_macro
 ARGPAR_HIDDEN
 /// @endcond
-void argpar_iter_destroy(struct argpar_iter *iter);
+void argpar_iter_destroy(argpar_iter_t *iter) ARGPAR_NOEXCEPT;
 
 /*!
 @brief
@@ -611,19 +643,19 @@ void argpar_iter_destroy(struct argpar_iter *iter);
 
 Error status enumerators have a negative value.
 */
-enum argpar_iter_next_status {
+typedef enum argpar_iter_next_status {
        /// Success
        ARGPAR_ITER_NEXT_STATUS_OK,
 
        /// End of iteration (no more original arguments to parse)
        ARGPAR_ITER_NEXT_STATUS_END,
 
-       /// Argument error
+       /// Parsing error
        ARGPAR_ITER_NEXT_STATUS_ERROR = -1,
 
        /// Memory error
        ARGPAR_ITER_NEXT_STATUS_ERROR_MEMORY = -12,
-};
+} argpar_iter_next_status_t;
 
 /*!
 @brief
@@ -643,12 +675,9 @@ If there are no more original arguments to parse, this function returns
     @endparblock
 @param[out] error
     @parblock
-    When this function returns
-    #ARGPAR_ITER_NEXT_STATUS_ERROR_UNKNOWN_OPT,
-    #ARGPAR_ITER_NEXT_STATUS_ERROR_MISSING_OPT_ARG, or
-    #ARGPAR_ITER_NEXT_STATUS_ERROR_UNEXPECTED_OPG_ARG, if this parameter
-    is not \c NULL,
-    \p *error contains details about the error.
+    When this function returns #ARGPAR_ITER_NEXT_STATUS_ERROR,
+    if this parameter is not \c NULL, \p *error contains details about
+    the error.
 
     Destroy \p *error with argpar_error_destroy().
     @endparblock
@@ -664,9 +693,9 @@ If there are no more original arguments to parse, this function returns
 /// @cond hidden_macro
 ARGPAR_HIDDEN
 /// @endcond
-enum argpar_iter_next_status argpar_iter_next(
-               struct argpar_iter *iter, const struct argpar_item **item,
-               const struct argpar_error **error);
+argpar_iter_next_status_t argpar_iter_next(argpar_iter_t *iter,
+               const argpar_item_t **item,
+               const argpar_error_t **error) ARGPAR_NOEXCEPT;
 
 /*
  * Returns the number of ingested elements from `argv`, as passed to
@@ -693,10 +722,15 @@ enum argpar_iter_next_status argpar_iter_next(
 /// @cond hidden_macro
 ARGPAR_HIDDEN
 /// @endcond
-unsigned int argpar_iter_ingested_orig_args(const struct argpar_iter *iter);
+unsigned int argpar_iter_ingested_orig_args(
+               const argpar_iter_t *iter) ARGPAR_NOEXCEPT;
 
 /// @}
 
 /// @}
 
+#if defined(__cplusplus)
+}
+#endif
+
 #endif /* ARGPAR_ARGPAR_H */
This page took 0.028973 seconds and 4 git commands to generate.