#include <stdbool.h>
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
/*!
@mainpage
#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 struct argpar_item *) 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
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>.
*/
/*
# define ARGPAR_HIDDEN __attribute__((visibility("hidden")))
#endif
+/* 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
+
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 struct argpar_item *) argpar_item_type()\endlink.
*/
enum argpar_item_type {
/// Option
/// @cond hidden_macro
ARGPAR_HIDDEN
/// @endcond
-enum argpar_item_type argpar_item_type(const struct argpar_item *item);
+enum argpar_item_type argpar_item_type(
+ const struct argpar_item *item) ARGPAR_NOEXCEPT;
/*!
@brief
ARGPAR_HIDDEN
/// @endcond
const struct argpar_opt_descr *argpar_item_opt_descr(
- const struct argpar_item *item);
+ const struct argpar_item *item) ARGPAR_NOEXCEPT;
/*!
@brief
/// @cond hidden_macro
ARGPAR_HIDDEN
/// @endcond
-const char *argpar_item_opt_arg(const struct argpar_item *item);
+const char *argpar_item_opt_arg(const struct argpar_item *item) ARGPAR_NOEXCEPT;
/*!
@brief
/// @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 struct argpar_item *item) ARGPAR_NOEXCEPT;
/*!
@brief
/// @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 struct argpar_item *item) ARGPAR_NOEXCEPT;
/*!
@brief
/// @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 struct argpar_item *item) ARGPAR_NOEXCEPT;
/*!
@brief
/// @cond hidden_macro
ARGPAR_HIDDEN
/// @endcond
-void argpar_item_destroy(const struct argpar_item *item);
+void argpar_item_destroy(const struct argpar_item *item) ARGPAR_NOEXCEPT;
/*!
@def ARGPAR_ITEM_DESTROY_AND_RESET(_item)
@{
*/
+/*!
+@brief
+ Parsing error type, as returned by
+ \link argpar_error_type(const struct argpar_error *) argpar_error_type()\endlink.
+*/
+enum argpar_error_type {
+ /// Unknown option error
+ ARGPAR_ERROR_TYPE_UNKNOWN_OPT,
+
+ /// Missing option argument error
+ ARGPAR_ERROR_TYPE_MISSING_OPT_ARG,
+
+ /// Unexpected option argument error
+ ARGPAR_ERROR_TYPE_UNEXPECTED_OPT_ARG,
+};
+
/*!
@struct argpar_error
*/
struct argpar_error;
+/*!
+@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
+/// @endcond
+enum argpar_error_type argpar_error_type(
+ const struct argpar_error *error) ARGPAR_NOEXCEPT;
+
/*!
@brief
Returns the index of the original argument (in \p argv, as passed to
/// @cond hidden_macro
ARGPAR_HIDDEN
/// @endcond
-unsigned int argpar_error_orig_index(const struct argpar_error *error);
+unsigned int argpar_error_orig_index(
+ const struct argpar_error *error) ARGPAR_NOEXCEPT;
/*!
@brief
<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.
@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 struct argpar_error *) 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 struct argpar_error *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
@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 struct argpar_error *) 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 struct argpar_error *error,
+ bool *is_short) ARGPAR_NOEXCEPT;
/*!
@brief
/// @cond hidden_macro
ARGPAR_HIDDEN
/// @endcond
-void argpar_error_destroy(const struct argpar_error *error);
+void argpar_error_destroy(const struct argpar_error *error) ARGPAR_NOEXCEPT;
/// @}
/// @endcond
struct argpar_iter *argpar_iter_create(unsigned int argc,
const char * const *argv,
- const struct argpar_opt_descr *descrs);
+ const struct argpar_opt_descr *descrs) ARGPAR_NOEXCEPT;
/*!
@brief
/// @cond hidden_macro
ARGPAR_HIDDEN
/// @endcond
-void argpar_iter_destroy(struct argpar_iter *iter);
+void argpar_iter_destroy(struct argpar_iter *iter) ARGPAR_NOEXCEPT;
/*!
@brief
/// End of iteration (no more original arguments to parse)
ARGPAR_ITER_NEXT_STATUS_END,
- /// Unknown option error
- ARGPAR_ITER_NEXT_STATUS_ERROR_UNKNOWN_OPT = -1,
-
- /// Missing option argument error
- ARGPAR_ITER_NEXT_STATUS_ERROR_MISSING_OPT_ARG = -2,
-
- /// Unexpected option argument error
- ARGPAR_ITER_NEXT_STATUS_ERROR_UNEXPECTED_OPT_ARG = -3,
+ /// Parsing error
+ ARGPAR_ITER_NEXT_STATUS_ERROR = -1,
/// Memory error
ARGPAR_ITER_NEXT_STATUS_ERROR_MEMORY = -12,
@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
/// @endcond
enum argpar_iter_next_status argpar_iter_next(
struct argpar_iter *iter, const struct argpar_item **item,
- const struct argpar_error **error);
+ const struct argpar_error **error) ARGPAR_NOEXCEPT;
/*
* Returns the number of ingested elements from `argv`, as passed to
/// @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 struct argpar_iter *iter) ARGPAR_NOEXCEPT;
/// @}
/// @}
+#if defined(__cplusplus)
+}
+#endif
+
#endif /* ARGPAR_ARGPAR_H */