blob: 5ecd35d3c9c9c65fedc8b1c08043436183836882 [file] [log] [blame]
/*
******************************************************************************
*
* Copyright (C) 1998-2001, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
*
* File rbdata.h
*
* Modification History:
*
* Date Name Description
* 06/11/99 stephen Creation. (Moved here from resbund.cpp)
******************************************************************************
*/
#ifndef RBDATA_H
#define RBDATA_H 1
#include "unicode/utypes.h"
#include "hash.h"
#include "unicode/unistr.h"
/**
* Abstract base class for data stored in resource bundles. These
* objects are kept in hashtables, indexed by strings. We never need
* to copy or clone these objects, since they are created once and
* never deleted.
*/
class ResourceBundleData
{
public:
virtual ~ResourceBundleData() {}
virtual UClassID getDynamicClassID(void) const = 0;
UErrorCode fCreationStatus;
};
/** Concrete data class representing a list of strings. */
class StringList : public ResourceBundleData
{
public:
StringList();
StringList(UnicodeString* adopted, int32_t count);
virtual ~StringList();
const UnicodeString& operator[](int32_t i) const;
virtual UClassID getDynamicClassID(void) const;
static UClassID getStaticClassID(void);
static UClassID fgClassID;
int32_t fCount;
UnicodeString *fStrings;
};
/** Concrete data class representing a 2-dimensional list of strings. */
class String2dList : public ResourceBundleData
{
public:
String2dList();
String2dList(UnicodeString** adopted, int32_t rowCount, int32_t colCount);
virtual ~String2dList();
const UnicodeString& getString(int32_t rowIndex, int32_t colIndex);
virtual UClassID getDynamicClassID(void) const;
static UClassID getStaticClassID(void);
static UClassID fgClassID;
int32_t fRowCount;
int32_t fColCount;
UnicodeString **fStrings;
};
/**
* Concrete data class representing a tagged list of strings. This is
* implemented using a hash table.
*/
class TaggedList : public ResourceBundleData
{
Hashtable *hash;
public:
TaggedList();
virtual ~TaggedList();
void put(const UnicodeString& tag, const UnicodeString& data);
const UnicodeString* get(const UnicodeString& tag) const;
UBool nextElement(const UnicodeString*& key,
const UnicodeString*& value,
int32_t& pos) const;
int32_t count() const;
virtual UClassID getDynamicClassID(void) const;
static UClassID getStaticClassID(void);
static UClassID fgClassID;
};
#endif