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

#ifndef __java_util_SimpleTimeZone__
#define __java_util_SimpleTimeZone__

#pragma interface

#include <java/util/TimeZone.h>
#include <gcj/array.h>


class java::util::SimpleTimeZone : public ::java::util::TimeZone
{

public:
  SimpleTimeZone(jint, ::java::lang::String *);
  SimpleTimeZone(jint, ::java::lang::String *, jint, jint, jint, jint, jint, jint, jint, jint);
  SimpleTimeZone(jint, ::java::lang::String *, jint, jint, jint, jint, jint, jint, jint, jint, jint);
  SimpleTimeZone(jint, ::java::lang::String *, jint, jint, jint, jint, jint, jint, jint, jint, jint, jint, jint);
  virtual void setStartYear(jint);
private:
  jint checkRule(jint, jint, jint);
public:
  virtual void setStartRule(jint, jint, jint, jint);
  virtual void setStartRule(jint, jint, jint, jint, jboolean);
  virtual void setStartRule(jint, jint, jint);
  virtual void setEndRule(jint, jint, jint, jint);
  virtual void setEndRule(jint, jint, jint, jint, jboolean);
  virtual void setEndRule(jint, jint, jint);
  virtual jint getOffset(jint, jint, jint, jint, jint, jint);
  virtual jint getRawOffset();
  virtual void setRawOffset(jint);
  virtual jint getDSTSavings();
  virtual void setDSTSavings(jint);
  virtual jboolean useDaylightTime();
private:
  jint getDaysInMonth(jint, jint);
  jboolean isBefore(jint, jint, jint, jint, jint, jint, jint, jint, jint, jint);
public:
  virtual jboolean inDaylightTime(::java::util::Date *);
  virtual jint hashCode();
  virtual jboolean equals(::java::lang::Object *);
  virtual jboolean hasSameRules(::java::util::TimeZone *);
  virtual ::java::lang::String * toString();
private:
  void readObject(::java::io::ObjectInputStream *);
  void writeObject(::java::io::ObjectOutputStream *);
  jint __attribute__((aligned(__alignof__( ::java::util::TimeZone)))) rawOffset;
  jboolean useDaylight;
  jint dstSavings;
  jint startYear;
  static const jint DOM_MODE = 1;
  static const jint DOW_IN_MONTH_MODE = 2;
  static const jint DOW_GE_DOM_MODE = 3;
  static const jint DOW_LE_DOM_MODE = 4;
  jint startMode;
  jint startMonth;
  jint startDay;
  jint startDayOfWeek;
  jint startTime;
  jint startTimeMode;
  jint endMonth;
  jint endMode;
  jint endDay;
  jint endDayOfWeek;
  jint endTime;
  jint endTimeMode;
  JArray< jbyte > * monthLength;
  static JArray< jbyte > * monthArr;
  jint serialVersionOnStream;
  static const jlong serialVersionUID = -403250971215465050LL;
public:
  static const jint STANDARD_TIME = 1;
  static const jint WALL_TIME = 0;
  static const jint UTC_TIME = 2;
  static ::java::lang::Class class$;
};

#endif // __java_util_SimpleTimeZone__
