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

#ifndef __gnu_java_util_prefs_NodeReader__
#define __gnu_java_util_prefs_NodeReader__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace util
      {
        namespace prefs
        {
            class NodeReader;
        }
      }
    }
  }
}

class gnu::java::util::prefs::NodeReader : public ::java::lang::Object
{

public:
  NodeReader(::java::io::Reader *, ::java::util::prefs::PreferencesFactory *);
  NodeReader(::java::io::InputStream *, ::java::util::prefs::PreferencesFactory *);
  virtual void importPreferences();
private:
  void readPreferences();
  void readRoot();
  void readNodes(::java::util::prefs::Preferences *);
  void readMap(::java::util::prefs::Preferences *);
  void readEntries(::java::util::prefs::Preferences *);
  void skipTill(::java::lang::String *);
  ::java::lang::String * readTill(::java::lang::String *);
  ::java::lang::String * nextTag();
  ::java::io::BufferedReader * __attribute__((aligned(__alignof__( ::java::lang::Object)))) br;
  ::java::lang::String * line;
  ::java::util::prefs::PreferencesFactory * factory;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_util_prefs_NodeReader__
