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

#ifndef __javax_swing_text_DefaultStyledDocument$ElementBuffer__
#define __javax_swing_text_DefaultStyledDocument$ElementBuffer__

#pragma interface

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

extern "Java"
{
  namespace javax
  {
    namespace swing
    {
      namespace text
      {
          class AbstractDocument$DefaultDocumentEvent;
          class DefaultStyledDocument;
          class DefaultStyledDocument$ElementBuffer;
          class DefaultStyledDocument$ElementBuffer$Edit;
          class DefaultStyledDocument$ElementSpec;
          class Element;
      }
    }
  }
}

class javax::swing::text::DefaultStyledDocument$ElementBuffer : public ::java::lang::Object
{

public:
  DefaultStyledDocument$ElementBuffer(::javax::swing::text::DefaultStyledDocument *, ::javax::swing::text::Element *);
  virtual ::javax::swing::text::Element * getRootElement();
  virtual void remove(jint, jint, ::javax::swing::text::AbstractDocument$DefaultDocumentEvent *);
public: // actually protected
  virtual void removeUpdate();
private:
  jboolean removeElements(::javax::swing::text::Element *, jint, jint);
public: // actually package-private
  virtual void create(jint, JArray< ::javax::swing::text::DefaultStyledDocument$ElementSpec * > *, ::javax::swing::text::AbstractDocument$DefaultDocumentEvent *);
private:
  jboolean canJoin(::javax::swing::text::Element *, ::javax::swing::text::Element *);
  ::javax::swing::text::Element * join(::javax::swing::text::Element *, ::javax::swing::text::Element *, ::javax::swing::text::Element *, jint, jint);
public: // actually protected
  virtual void changeUpdate();
public:
  virtual void change(jint, jint, ::javax::swing::text::AbstractDocument$DefaultDocumentEvent *);
  virtual ::javax::swing::text::Element * clone(::javax::swing::text::Element *, ::javax::swing::text::Element *);
private:
  ::javax::swing::text::Element * cloneAsNecessary(::javax::swing::text::Element *, ::javax::swing::text::Element *, jint, jint);
public:
  virtual void insert(jint, jint, JArray< ::javax::swing::text::DefaultStyledDocument$ElementSpec * > *, ::javax::swing::text::AbstractDocument$DefaultDocumentEvent *);
private:
  void prepareEdit(jint, jint);
  void finishEdit(::javax::swing::text::AbstractDocument$DefaultDocumentEvent *);
public: // actually protected
  virtual void insertUpdate(JArray< ::javax::swing::text::DefaultStyledDocument$ElementSpec * > *);
private:
  void pop();
  void insertElement(::javax::swing::text::DefaultStyledDocument$ElementSpec *);
  void insertFirstContentTag(JArray< ::javax::swing::text::DefaultStyledDocument$ElementSpec * > *);
  void insertContentTag(::javax::swing::text::DefaultStyledDocument$ElementSpec *, ::javax::swing::text::DefaultStyledDocument$ElementBuffer$Edit *);
  void createFracture(JArray< ::javax::swing::text::DefaultStyledDocument$ElementSpec * > *);
  void fracture(jint);
  void recreate(jint, jint);
  ::javax::swing::text::Element * recreateFracturedElement(::javax::swing::text::Element *, ::javax::swing::text::Element *);
  jboolean split(jint, jint);
  static const jlong serialVersionUID = 1688745877691146623LL;
  ::javax::swing::text::Element * __attribute__((aligned(__alignof__( ::java::lang::Object)))) root;
  jint offset;
  jint endOffset;
  jint length;
  jint pos;
  ::javax::swing::text::Element * fracturedParent;
  ::javax::swing::text::Element * fracturedChild;
  jboolean createdFracture;
  ::java::util::Stack * elementStack;
  JArray< ::javax::swing::text::DefaultStyledDocument$ElementBuffer$Edit * > * insertPath;
  jboolean recreateLeafs;
  ::java::util::ArrayList * edits;
  jboolean offsetLastIndex;
  jboolean offsetLastIndexReplace;
public: // actually package-private
  ::javax::swing::text::DefaultStyledDocument * this$0;
  static jboolean $assertionsDisabled;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_text_DefaultStyledDocument$ElementBuffer__
