// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/********************************************************************
* COPYRIGHT:
* Copyright (c) 2002-2006, International Business Machines Corporation and
* others. All Rights Reserved.
********************************************************************/
/* Created by weiv 05/09/2002 */
#ifndef U_TESTFW_DATAMAP
#define U_TESTFW_DATAMAP
#include "unicode/resbund.h"
#include "unicode/testtype.h"
U_NAMESPACE_BEGIN
class Hashtable;
U_NAMESPACE_END
/** Holder of test data and settings. Allows addressing of items by name.
* For test cases, names are defined in the "Headers" section. For settings
* and info data, names are keys in data. Currently, we return scalar strings
* and integers and arrays of strings and integers. Arrays should be deposited
* of by the user.
*/
class T_CTEST_EXPORT_API DataMap {
public:
virtual ~DataMap();
protected:
DataMap();
int32_t utoi(const UnicodeString &s) const;
public:
/** get the string from the DataMap. Addressed by name
* @param key name of the data field.
* @return a string containing the data
*/
virtual const UnicodeString getString(const char* key, UErrorCode &status) const = 0;
/** get the string from the DataMap. Addressed by name
* parses a bundle string into an integer
* @param key name of the data field.
* @return an integer containing the data
*/
virtual int32_t getInt(const char* key, UErrorCode &status) const = 0;
/**
* Get a signed integer without runtime parsing.
* @param key name of the data field.
* @param status UErrorCode in/out parameter
* @return the integer
*/
virtual int32_t getInt28(const char* key, UErrorCode &status) const = 0;
/**
* Get an unsigned integer without runtime parsing.
* @param key name of the data field.
* @param status UErrorCode in/out parameter
* @return the integer
*/
virtual uint32_t getUInt28(const char* key, UErrorCode &status) const = 0;
/**
* Get a vector of integers without runtime parsing.
* @param length output parameter for the length of the vector
* @param key name of the data field.
* @param status UErrorCode in/out parameter
* @return the integer vector, do not delete
*/
virtual const int32_t *getIntVector(int32_t &length, const char *key, UErrorCode &status) const = 0;
/**
* Get binary data without runtime parsing.
* @param length output parameter for the length of the data
* @param key name of the data field.
* @param status UErrorCode in/out parameter
* @return the binary data, do not delete
*/
virtual const uint8_t *getBinary(int32_t &length, const char *key, UErrorCode &status) const = 0;
/** get an array of strings from the DataMap. Addressed by name.
* The user must dispose of it after usage, using delete.
* @param key name of the data field.
* @return a string array containing the data
*/
virtual const UnicodeString* getStringArray(int32_t& count, const char* key, UErrorCode &status) const = 0;
/** get an array of integers from the DataMap. Addressed by name.
* The user must dispose of it after usage, using delete.
* @param key name of the data field.
* @return an integer array containing the data
*/
virtual const int32_t* getIntArray(int32_t& count, const char* key, UErrorCode &status) const = 0;
// ... etc ...
};
// This one is already concrete - it is going to be instantiated from
// concrete data by TestData children...
class T_CTEST_EXPORT_API RBDataMap : public DataMap{
private:
Hashtable *fData;
public:
virtual ~RBDataMap();
public:
RBDataMap();
RBDataMap(UResourceBundle *data, UErrorCode &status);
RBDataMap(UResourceBundle *headers, UResourceBundle *data, UErrorCode &status);
public:
void init(UResourceBundle *data, UErrorCode &status);
void init(UResourceBundle *headers, UResourceBundle *data, UErrorCode &status);
virtual const ResourceBundle *getItem(const char* key, UErrorCode &status) const;
virtual const UnicodeString getString(const char* key, UErrorCode &status) const;
virtual int32_t getInt28(const char* key, UErrorCode &status) const;
virtual uint32_t getUInt28(const char* key, UErrorCode &status) const;
virtual const int32_t *getIntVector(int32_t &length, const char *key, UErrorCode &status) const;
virtual const uint8_t *getBinary(int32_t &length, const char *key, UErrorCode &status) const;
virtual int32_t getInt(const char* key, UErrorCode &status) const;
virtual const UnicodeString* getStringArray(int32_t& count, const char* key, UErrorCode &status) const;
virtual const int32_t* getIntArray(int32_t& count, const char* key, UErrorCode &status) const;
// ... etc ...
};
#endif