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

#ifndef __java_net_InetAddress__
#define __java_net_InetAddress__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace net
    {
        class InetAddress;
    }
  }
}

class java::net::InetAddress : public ::java::lang::Object
{

public: // actually package-private
  InetAddress(JArray< jbyte > *, ::java::lang::String *, jint);
public:
  virtual jboolean isMulticastAddress();
  virtual jboolean isAnyLocalAddress();
  virtual jboolean isLoopbackAddress();
  virtual jboolean isLinkLocalAddress();
  virtual jboolean isSiteLocalAddress();
  virtual jboolean isMCGlobal();
  virtual jboolean isMCNodeLocal();
  virtual jboolean isMCLinkLocal();
  virtual jboolean isMCSiteLocal();
  virtual jboolean isMCOrgLocal();
  virtual ::java::lang::String * getHostName();
public: // actually package-private
  virtual ::java::lang::String * internalGetCanonicalHostName();
public:
  virtual ::java::lang::String * getCanonicalHostName();
  virtual JArray< jbyte > * getAddress();
  virtual ::java::lang::String * getHostAddress();
  virtual jint hashCode();
  virtual jboolean equals(::java::lang::Object *);
  virtual ::java::lang::String * toString();
  static ::java::net::InetAddress * getByAddress(JArray< jbyte > *);
  static ::java::net::InetAddress * getByAddress(::java::lang::String *, JArray< jbyte > *);
public: // actually package-private
  static ::java::net::InetAddress * getByLiteral(::java::lang::String *);
public:
  static ::java::net::InetAddress * getByName(::java::lang::String *);
  static JArray< ::java::net::InetAddress * > * getAllByName(::java::lang::String *);
  static ::java::net::InetAddress * getLocalHost();
private:
  ::java::lang::Object * readResolve();
  void readObject(::java::io::ObjectInputStream *);
  void writeObject(::java::io::ObjectOutputStream *);
  static const jlong serialVersionUID = 3286316764910316507LL;
public: // actually package-private
  static ::java::net::InetAddress * ANY_IF;
  static ::java::net::InetAddress * LOCALHOST;
private:
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) address;
public: // actually package-private
  JArray< jbyte > * addr;
  ::java::lang::String * hostName;
private:
  jint family;
public:
  static ::java::lang::Class class$;
};

#endif // __java_net_InetAddress__
