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