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

#ifndef __java_net_InetSocketAddress__
#define __java_net_InetSocketAddress__

#pragma interface

#include <java/net/SocketAddress.h>
extern "Java"
{
  namespace java
  {
    namespace net
    {
        class InetAddress;
        class InetSocketAddress;
    }
  }
}

class java::net::InetSocketAddress : public ::java::net::SocketAddress
{

public:
  InetSocketAddress(::java::net::InetAddress *, jint);
  InetSocketAddress(jint);
  InetSocketAddress(::java::lang::String *, jint);
private:
  InetSocketAddress(::java::lang::String *, jint, jboolean);
public:
  static ::java::net::InetSocketAddress * createUnresolved(::java::lang::String *, jint);
  virtual jboolean equals(::java::lang::Object *);
  virtual ::java::net::InetAddress * getAddress();
  virtual ::java::lang::String * getHostName();
  virtual jint getPort();
  virtual jint hashCode();
  virtual jboolean isUnresolved();
  virtual ::java::lang::String * toString();
private:
  static const jlong serialVersionUID = 5076001401234631237LL;
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::net::SocketAddress)))) hostname;
  ::java::net::InetAddress * addr;
  jint port;
public:
  static ::java::lang::Class class$;
};

#endif // __java_net_InetSocketAddress__
