
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_util_ResourceBundle__
#define __java_util_ResourceBundle__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>


class java::util::ResourceBundle : public ::java::lang::Object
{

public:
  ResourceBundle();
  virtual ::java::lang::String * getString(::java::lang::String *);
  virtual JArray< ::java::lang::String * > * getStringArray(::java::lang::String *);
  virtual ::java::lang::Object * getObject(::java::lang::String *);
  virtual ::java::util::Locale * getLocale();
public: // actually protected
  virtual void setParent(::java::util::ResourceBundle *);
public:
  static ::java::util::ResourceBundle * getBundle(::java::lang::String *);
  static ::java::util::ResourceBundle * getBundle(::java::lang::String *, ::java::util::Locale *);
  static ::java::util::ResourceBundle * getBundle(::java::lang::String *, ::java::util::Locale *, ::java::lang::ClassLoader *);
public: // actually protected
  virtual ::java::lang::Object * handleGetObject(::java::lang::String *) = 0;
public:
  virtual ::java::util::Enumeration * getKeys() = 0;
private:
  static ::java::util::ResourceBundle * tryBundle(::java::lang::String *, ::java::lang::ClassLoader *);
  static ::java::util::ResourceBundle * tryBundle(::java::lang::String *, ::java::util::Locale *, ::java::lang::ClassLoader *, jboolean);
  static const jint CACHE_SIZE = 100;
public: // actually protected
  ::java::util::ResourceBundle * __attribute__((aligned(__alignof__( ::java::lang::Object)))) parent;
private:
  ::java::util::Locale * locale;
  static ::java::util::Map * bundleCache;
  static ::java::util::ResourceBundle$BundleKey * lookupKey;
  static ::java::lang::Object * nullEntry;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_ResourceBundle__
