1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
// © 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 = static_cast<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
|