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