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

#ifndef __javax_naming_NameClassPair__
#define __javax_naming_NameClassPair__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace javax
  {
    namespace naming
    {
        class NameClassPair;
    }
  }
}

class javax::naming::NameClassPair : public ::java::lang::Object
{

public:
  NameClassPair(::java::lang::String *, ::java::lang::String *);
  NameClassPair(::java::lang::String *, ::java::lang::String *, jboolean);
  virtual ::java::lang::String * getClassName();
  virtual ::java::lang::String * getName();
  virtual jboolean isRelative();
  virtual void setClassName(::java::lang::String *);
  virtual void setName(::java::lang::String *);
  virtual void setRelative(jboolean);
  virtual void setNameInNamespace(::java::lang::String *);
  virtual ::java::lang::String * getNameInNamespace();
  virtual ::java::lang::String * toString();
private:
  static const jlong serialVersionUID = 5620776610160863339LL;
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) name;
  ::java::lang::String * className;
  jboolean isRel;
  ::java::lang::String * fullName;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_naming_NameClassPair__
