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

#ifndef __gnu_java_text_StringFormatBuffer__
#define __gnu_java_text_StringFormatBuffer__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace text
      {
          class StringFormatBuffer;
      }
    }
  }
  namespace java
  {
    namespace text
    {
        class AttributedCharacterIterator$Attribute;
    }
  }
}

class gnu::java::text::StringFormatBuffer : public ::java::lang::Object
{

public:
  StringFormatBuffer(jint);
  StringFormatBuffer(::java::lang::StringBuffer *);
  virtual void append(::java::lang::String *);
  virtual void append(::java::lang::String *, ::java::text::AttributedCharacterIterator$Attribute *);
  virtual void append(::java::lang::String *, JArray< jint > *, JArray< ::java::util::HashMap * > *);
  virtual void append(jchar);
  virtual void append(jchar, ::java::text::AttributedCharacterIterator$Attribute *);
  virtual void setDefaultAttribute(::java::text::AttributedCharacterIterator$Attribute *);
  virtual ::java::text::AttributedCharacterIterator$Attribute * getDefaultAttribute();
  virtual void cutTail(jint);
  virtual jint length();
  virtual void clear();
  virtual ::java::lang::StringBuffer * getBuffer();
  virtual ::java::lang::String * toString();
private:
  ::java::lang::StringBuffer * __attribute__((aligned(__alignof__( ::java::lang::Object)))) buffer;
  ::java::text::AttributedCharacterIterator$Attribute * defaultAttr;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_text_StringFormatBuffer__
