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

#ifndef __gnu_java_util_prefs_NodeWriter__
#define __gnu_java_util_prefs_NodeWriter__

#pragma interface

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

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

public:
  NodeWriter(::java::util::prefs::Preferences *, ::java::io::OutputStream *);
  virtual void writePrefsTree();
  virtual void writePrefs();
private:
  void writeHeader();
  void writePreferences();
  void writeRoot();
  void writeRootMap();
  jint writeParents();
  void writeCloseParents(jint);
  void writeNode();
  void writeNode(::java::util::prefs::Preferences *, jint);
  void writeMap(::java::util::prefs::Preferences *, jint);
  void writeEntries(::java::util::prefs::Preferences *, ::java::lang::String *);
  void indent(jint);
  ::java::util::prefs::Preferences * __attribute__((aligned(__alignof__( ::java::lang::Object)))) prefs;
  ::java::io::BufferedWriter * bw;
  jboolean subtree;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_util_prefs_NodeWriter__
