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

#ifndef __gnu_java_util_prefs_FileBasedPreferences__
#define __gnu_java_util_prefs_FileBasedPreferences__

#pragma interface

#include <java/util/prefs/AbstractPreferences.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace util
      {
        namespace prefs
        {
            class FileBasedPreferences;
        }
      }
    }
  }
}

class gnu::java::util::prefs::FileBasedPreferences : public ::java::util::prefs::AbstractPreferences
{

public: // actually package-private
  FileBasedPreferences();
  FileBasedPreferences(::gnu::java::util::prefs::FileBasedPreferences *, ::java::lang::String *);
private:
  void load();
public:
  virtual jboolean isUserNode();
public: // actually protected
  virtual JArray< ::java::lang::String * > * childrenNamesSpi();
  virtual ::java::util::prefs::AbstractPreferences * childSpi(::java::lang::String *);
  virtual JArray< ::java::lang::String * > * keysSpi();
  virtual ::java::lang::String * getSpi(::java::lang::String *);
  virtual void putSpi(::java::lang::String *, ::java::lang::String *);
  virtual void removeSpi(::java::lang::String *);
  virtual void flushSpi();
  virtual void syncSpi();
  virtual void removeNodeSpi();
private:
  static ::java::lang::String * DATA_FILE;
  ::java::io::File * __attribute__((aligned(__alignof__( ::java::util::prefs::AbstractPreferences)))) directory;
  ::java::io::File * dataFile;
  ::java::util::Properties * properties;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_util_prefs_FileBasedPreferences__
