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

#ifndef __java_util_Collections$SynchronizedSortedMap__
#define __java_util_Collections$SynchronizedSortedMap__

#pragma interface

#include <java/util/Collections$SynchronizedMap.h>

class java::util::Collections$SynchronizedSortedMap : public ::java::util::Collections$SynchronizedMap
{

public: // actually package-private
  Collections$SynchronizedSortedMap(::java::util::SortedMap *);
  Collections$SynchronizedSortedMap(::java::lang::Object *, ::java::util::SortedMap *);
public:
  ::java::util::Comparator * comparator();
  ::java::lang::Object * firstKey();
  ::java::util::SortedMap * headMap(::java::lang::Object *);
  ::java::lang::Object * lastKey();
  ::java::util::SortedMap * subMap(::java::lang::Object *, ::java::lang::Object *);
  ::java::util::SortedMap * tailMap(::java::lang::Object *);
private:
  static const jlong serialVersionUID = -8798146769416483793LL;
  ::java::util::SortedMap * __attribute__((aligned(__alignof__( ::java::util::Collections$SynchronizedMap)))) sm;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_Collections$SynchronizedSortedMap__
