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

#ifndef __javax_naming_directory_BasicAttributes$1__
#define __javax_naming_directory_BasicAttributes$1__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace javax
  {
    namespace naming
    {
        class NamingEnumeration;
      namespace directory
      {
          class BasicAttributes;
          class BasicAttributes$1;
      }
    }
  }
}

class javax::naming::directory::BasicAttributes$1 : public ::java::lang::Object
{

public: // actually package-private
  BasicAttributes$1(::javax::naming::directory::BasicAttributes *, ::javax::naming::NamingEnumeration *);
public:
  jboolean hasMore();
  jboolean hasMoreElements();
  ::java::lang::String * BasicAttributes$1$next();
  ::java::lang::String * BasicAttributes$1$nextElement();
  void close();
  ::java::lang::Object * next();
  ::java::lang::Object * nextElement();
public: // actually package-private
  ::javax::naming::directory::BasicAttributes * __attribute__((aligned(__alignof__( ::java::lang::Object)))) this$0;
private:
  ::javax::naming::NamingEnumeration * val$attrs;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_naming_directory_BasicAttributes$1__
