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

#ifndef __gnu_java_net_protocol_http_HTTPDateFormat__
#define __gnu_java_net_protocol_http_HTTPDateFormat__

#pragma interface

#include <java/text/DateFormat.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace net
      {
        namespace protocol
        {
          namespace http
          {
              class HTTPDateFormat;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace text
    {
        class FieldPosition;
        class NumberFormat;
        class ParsePosition;
    }
  }
}

class gnu::java::net::protocol::http::HTTPDateFormat : public ::java::text::DateFormat
{

public:
  HTTPDateFormat();
  virtual ::java::lang::StringBuffer * format(::java::util::Date *, ::java::lang::StringBuffer *, ::java::text::FieldPosition *);
  virtual ::java::util::Date * parse(::java::lang::String *, ::java::text::ParsePosition *);
private:
  jint skipWhitespace(::java::lang::String *, jint);
  jint skipNonWhitespace(::java::lang::String *, jint);
  jint skipTo(::java::lang::String *, jint, jchar);
public:
  virtual void setCalendar(::java::util::Calendar *);
  virtual void setNumberFormat(::java::text::NumberFormat *);
public: // actually package-private
  static JArray< ::java::lang::String * > * DAYS_OF_WEEK;
  static JArray< ::java::lang::String * > * MONTHS;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_net_protocol_http_HTTPDateFormat__
