1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/******************************************************************** 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * COPYRIGHT: 3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Copyright (c) 2002-2006, International Business Machines Corporation and 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * others. All Rights Reserved. 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ********************************************************************/ 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* Created by weiv 05/09/2002 */ 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef U_TESTFW_DATAMAP 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define U_TESTFW_DATAMAP 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/resbund.h" 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/testtype.h" 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_BEGIN 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass Hashtable; 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_END 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** Holder of test data and settings. Allows addressing of items by name. 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * For test cases, names are defined in the "Headers" section. For settings 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * and info data, names are keys in data. Currently, we return scalar strings 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * and integers and arrays of strings and integers. Arrays should be deposited 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * of by the user. 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass T_CTEST_EXPORT_API DataMap { 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic: 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual ~DataMap(); 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruprotected: 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru DataMap(); 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t utoi(const UnicodeString &s) const; 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic: 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** get the string from the DataMap. Addressed by name 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param key name of the data field. 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return a string containing the data 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual const UnicodeString getString(const char* key, UErrorCode &status) const = 0; 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** get the string from the DataMap. Addressed by name 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * parses a bundle string into an integer 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param key name of the data field. 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return an integer containing the data 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual int32_t getInt(const char* key, UErrorCode &status) const = 0; 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Get a signed integer without runtime parsing. 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param key name of the data field. 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param status UErrorCode in/out parameter 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the integer 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual int32_t getInt28(const char* key, UErrorCode &status) const = 0; 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Get an unsigned integer without runtime parsing. 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param key name of the data field. 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param status UErrorCode in/out parameter 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the integer 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual uint32_t getUInt28(const char* key, UErrorCode &status) const = 0; 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Get a vector of integers without runtime parsing. 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param length output parameter for the length of the vector 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param key name of the data field. 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param status UErrorCode in/out parameter 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the integer vector, do not delete 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual const int32_t *getIntVector(int32_t &length, const char *key, UErrorCode &status) const = 0; 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Get binary data without runtime parsing. 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param length output parameter for the length of the data 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param key name of the data field. 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param status UErrorCode in/out parameter 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return the binary data, do not delete 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual const uint8_t *getBinary(int32_t &length, const char *key, UErrorCode &status) const = 0; 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** get an array of strings from the DataMap. Addressed by name. 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * The user must dispose of it after usage, using delete. 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param key name of the data field. 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return a string array containing the data 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual const UnicodeString* getStringArray(int32_t& count, const char* key, UErrorCode &status) const = 0; 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** get an array of integers from the DataMap. Addressed by name. 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * The user must dispose of it after usage, using delete. 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param key name of the data field. 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return an integer array containing the data 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual const int32_t* getIntArray(int32_t& count, const char* key, UErrorCode &status) const = 0; 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // ... etc ... 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// This one is already concrete - it is going to be instantiated from 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// concrete data by TestData children... 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass T_CTEST_EXPORT_API RBDataMap : public DataMap{ 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruprivate: 105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Hashtable *fData; 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic: 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual ~RBDataMap(); 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic: 111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru RBDataMap(); 112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru RBDataMap(UResourceBundle *data, UErrorCode &status); 114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru RBDataMap(UResourceBundle *headers, UResourceBundle *data, UErrorCode &status); 115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic: 117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru void init(UResourceBundle *data, UErrorCode &status); 118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru void init(UResourceBundle *headers, UResourceBundle *data, UErrorCode &status); 119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual const ResourceBundle *getItem(const char* key, UErrorCode &status) const; 121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual const UnicodeString getString(const char* key, UErrorCode &status) const; 123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual int32_t getInt28(const char* key, UErrorCode &status) const; 124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual uint32_t getUInt28(const char* key, UErrorCode &status) const; 125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual const int32_t *getIntVector(int32_t &length, const char *key, UErrorCode &status) const; 126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual const uint8_t *getBinary(int32_t &length, const char *key, UErrorCode &status) const; 127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual int32_t getInt(const char* key, UErrorCode &status) const; 129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual const UnicodeString* getStringArray(int32_t& count, const char* key, UErrorCode &status) const; 131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual const int32_t* getIntArray(int32_t& count, const char* key, UErrorCode &status) const; 132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // ... etc ... 134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 139