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

#ifndef __java_util_TreeMap$DescendingSet__
#define __java_util_TreeMap$DescendingSet__

#pragma interface

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


class java::util::TreeMap$DescendingSet : public ::java::lang::Object
{

public:
  TreeMap$DescendingSet(::java::util::NavigableSet *);
  jboolean add(::java::lang::Object *);
  jboolean addAll(::java::util::Collection *);
  ::java::lang::Object * ceiling(::java::lang::Object *);
  void clear();
  ::java::util::Comparator * comparator();
  jboolean contains(::java::lang::Object *);
  jboolean containsAll(::java::util::Collection *);
  ::java::util::Iterator * descendingIterator();
  ::java::util::NavigableSet * descendingSet();
  jboolean equals(::java::lang::Object *);
  ::java::lang::Object * first();
  ::java::lang::Object * floor(::java::lang::Object *);
  jint hashCode();
  ::java::util::SortedSet * headSet(::java::lang::Object *);
  ::java::util::NavigableSet * headSet(::java::lang::Object *, jboolean);
  ::java::lang::Object * higher(::java::lang::Object *);
  jboolean isEmpty();
  ::java::util::Iterator * iterator();
  ::java::lang::Object * last();
  ::java::lang::Object * lower(::java::lang::Object *);
  ::java::lang::Object * pollFirst();
  ::java::lang::Object * pollLast();
  jboolean remove(::java::lang::Object *);
  jboolean removeAll(::java::util::Collection *);
  jboolean retainAll(::java::util::Collection *);
  jint size();
  ::java::util::SortedSet * subSet(::java::lang::Object *, ::java::lang::Object *);
  ::java::util::NavigableSet * subSet(::java::lang::Object *, jboolean, ::java::lang::Object *, jboolean);
  ::java::util::SortedSet * tailSet(::java::lang::Object *);
  ::java::util::NavigableSet * tailSet(::java::lang::Object *, jboolean);
  JArray< ::java::lang::Object * > * toArray();
  JArray< ::java::lang::Object * > * toArray(JArray< ::java::lang::Object * > *);
  ::java::lang::String * toString();
private:
  ::java::util::NavigableSet * __attribute__((aligned(__alignof__( ::java::lang::Object)))) set;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_TreeMap$DescendingSet__
