Home | History | Annotate | Download | only in unicode
      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