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

#ifndef __java_util_TreeMap$SubMap$NavigableEntrySet__
#define __java_util_TreeMap$SubMap$NavigableEntrySet__

#pragma interface

#include <java/util/TreeMap$SubMap$EntrySet.h>

class java::util::TreeMap$SubMap$NavigableEntrySet : public ::java::util::TreeMap$SubMap$EntrySet
{

  TreeMap$SubMap$NavigableEntrySet(::java::util::TreeMap$SubMap *);
public:
  ::java::util::Map$Entry * TreeMap$SubMap$NavigableEntrySet$ceiling(::java::util::Map$Entry *);
  ::java::util::Comparator * comparator();
  ::java::util::Iterator * descendingIterator();
  ::java::util::NavigableSet * descendingSet();
  ::java::util::Map$Entry * TreeMap$SubMap$NavigableEntrySet$first();
  ::java::util::Map$Entry * TreeMap$SubMap$NavigableEntrySet$floor(::java::util::Map$Entry *);
  ::java::util::SortedSet * TreeMap$SubMap$NavigableEntrySet$headSet(::java::util::Map$Entry *);
  ::java::util::NavigableSet * TreeMap$SubMap$NavigableEntrySet$headSet(::java::util::Map$Entry *, jboolean);
  ::java::util::Map$Entry * TreeMap$SubMap$NavigableEntrySet$higher(::java::util::Map$Entry *);
  ::java::util::Map$Entry * TreeMap$SubMap$NavigableEntrySet$last();
  ::java::util::Map$Entry * TreeMap$SubMap$NavigableEntrySet$lower(::java::util::Map$Entry *);
  ::java::util::Map$Entry * TreeMap$SubMap$NavigableEntrySet$pollFirst();
  ::java::util::Map$Entry * TreeMap$SubMap$NavigableEntrySet$pollLast();
  ::java::util::SortedSet * TreeMap$SubMap$NavigableEntrySet$subSet(::java::util::Map$Entry *, ::java::util::Map$Entry *);
  ::java::util::NavigableSet * TreeMap$SubMap$NavigableEntrySet$subSet(::java::util::Map$Entry *, jboolean, ::java::util::Map$Entry *, jboolean);
  ::java::util::SortedSet * TreeMap$SubMap$NavigableEntrySet$tailSet(::java::util::Map$Entry *);
  ::java::util::NavigableSet * TreeMap$SubMap$NavigableEntrySet$tailSet(::java::util::Map$Entry *, jboolean);
  ::java::lang::Object * pollFirst();
  ::java::lang::Object * higher(::java::lang::Object *);
  ::java::lang::Object * lower(::java::lang::Object *);
  ::java::lang::Object * pollLast();
  ::java::lang::Object * first();
  ::java::lang::Object * last();
  ::java::util::NavigableSet * subSet(::java::lang::Object *, jboolean, ::java::lang::Object *, jboolean);
  ::java::util::SortedSet * subSet(::java::lang::Object *, ::java::lang::Object *);
  ::java::lang::Object * ceiling(::java::lang::Object *);
  ::java::lang::Object * floor(::java::lang::Object *);
  ::java::util::NavigableSet * tailSet(::java::lang::Object *, jboolean);
  ::java::util::SortedSet * tailSet(::java::lang::Object *);
  ::java::util::NavigableSet * headSet(::java::lang::Object *, jboolean);
  ::java::util::SortedSet * headSet(::java::lang::Object *);
public: // actually package-private
  TreeMap$SubMap$NavigableEntrySet(::java::util::TreeMap$SubMap *, ::java::util::TreeMap$SubMap$NavigableEntrySet *);
  static ::java::util::TreeMap$SubMap * access$15(::java::util::TreeMap$SubMap$NavigableEntrySet *);
  ::java::util::TreeMap$SubMap * __attribute__((aligned(__alignof__( ::java::util::TreeMap$SubMap$EntrySet)))) this$1;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_TreeMap$SubMap$NavigableEntrySet__
