123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- // © 2024 and later: Unicode, Inc. and others.
- // License & terms of use: http://www.unicode.org/copyright.html
- #include "unicode/utypes.h"
- #ifndef MESSAGEFORMAT2_ARGUMENTS_H
- #define MESSAGEFORMAT2_ARGUMENTS_H
- #if U_SHOW_CPLUSPLUS_API
- #if !UCONFIG_NO_FORMATTING
- #if !UCONFIG_NO_MF2
- /**
- * \file
- * \brief C++ API: Formats messages using the draft MessageFormat 2.0.
- */
- #include "unicode/messageformat2_data_model_names.h"
- #include "unicode/messageformat2_formattable.h"
- #include "unicode/unistr.h"
- #ifndef U_HIDE_DEPRECATED_API
- #include <map>
- U_NAMESPACE_BEGIN
- /// @cond DOXYGEN_IGNORE
- // Export an explicit template instantiation of the LocalPointer that is used as a
- // data member of various MessageFormatDataModel classes.
- // (When building DLLs for Windows this is required.)
- // (See measunit_impl.h, datefmt.h, collationiterator.h, erarules.h and others
- // for similar examples.)
- #if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
- template class U_I18N_API LocalPointerBase<UnicodeString>;
- template class U_I18N_API LocalPointerBase<message2::Formattable>;
- template class U_I18N_API LocalArray<UnicodeString>;
- template class U_I18N_API LocalArray<message2::Formattable>;
- #endif
- /// @endcond
- namespace message2 {
- class MessageContext;
- // Arguments
- // ----------
- /**
- *
- * The `MessageArguments` class represents the named arguments to a message.
- * It is immutable and movable. It is not copyable.
- *
- * @internal ICU 75 technology preview
- * @deprecated This API is for technology preview only.
- */
- class U_I18N_API MessageArguments : public UObject {
- public:
- /**
- * Message arguments constructor, which takes a map and returns a container
- * of arguments that can be passed to a `MessageFormatter`.
- *
- * @param args A reference to a map from strings (argument names) to `message2::Formattable`
- * objects (argument values). The keys and values of the map are copied into the result.
- * @param status Input/output error code.
- *
- * @internal ICU 75 technology preview
- * @deprecated This API is for technology preview only.
- */
- MessageArguments(const std::map<UnicodeString, Formattable>& args, UErrorCode& status) {
- if (U_FAILURE(status)) {
- return;
- }
- argumentNames = LocalArray<UnicodeString>(new UnicodeString[argsLen = (int32_t) args.size()]);
- arguments = LocalArray<Formattable>(new Formattable[argsLen]);
- if (!argumentNames.isValid() || !arguments.isValid()) {
- status = U_MEMORY_ALLOCATION_ERROR;
- return;
- }
- int32_t i = 0;
- for (auto iter = args.begin(); iter != args.end(); ++iter) {
- argumentNames[i] = iter->first;
- arguments[i] = iter->second;
- i++;
- }
- }
- /**
- * Move operator:
- * The source MessageArguments will be left in a valid but undefined state.
- *
- * @internal ICU 75 technology preview
- * @deprecated This API is for technology preview only.
- */
- MessageArguments& operator=(MessageArguments&&) noexcept;
- /**
- * Default constructor.
- * Returns an empty arguments mapping.
- *
- * @internal ICU 75 technology preview
- * @deprecated This API is for technology preview only.
- */
- MessageArguments() = default;
- /**
- * Destructor.
- *
- * @internal ICU 75 technology preview
- * @deprecated This API is for technology preview only.
- */
- virtual ~MessageArguments();
- private:
- friend class MessageContext;
- const Formattable* getArgument(const data_model::VariableName&, UErrorCode&) const;
- // Avoids using Hashtable so that code constructing a Hashtable
- // doesn't have to appear in this header file
- LocalArray<UnicodeString> argumentNames;
- LocalArray<Formattable> arguments;
- int32_t argsLen = 0;
- }; // class MessageArguments
- } // namespace message2
- U_NAMESPACE_END
- #endif // U_HIDE_DEPRECATED_API
- #endif /* #if !UCONFIG_NO_MF2 */
- #endif /* #if !UCONFIG_NO_FORMATTING */
- #endif /* U_SHOW_CPLUSPLUS_API */
- #endif // MESSAGEFORMAT2_ARGUMENTS_H
- // eof
|