亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? inetcidr.java

?? DHCP 的JAVA實現
?? JAVA
字號:
/*
 *	This file is part of dhcp4java, a DHCP API for the Java language.
 *	(c) 2006 Stephan Hadinger
 *
 *	This library is free software; you can redistribute it and/or
 *	modify it under the terms of the GNU Lesser General Public
 *	License as published by the Free Software Foundation; either
 *	version 2.1 of the License, or (at your option) any later version.
 *
 *	This library is distributed in the hope that it will be useful,
 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *	Lesser General Public License for more details.
 *
 *	You should have received a copy of the GNU Lesser General Public
 *	License along with this library; if not, write to the Free Software
 *	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */
package org.dhcp4java;

import java.io.Serializable;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dhcp4java.Util;

/**
 * @author Stephan Hadinger
 * @version 1.00
 *
 */
public class InetCidr implements Serializable, Comparable<InetCidr> {
	private static final long serialVersionUID = 1L;

    private final int addr;
    private final int mask;

    /**
     * Constructor for InetCidr.
     * 
     * <p>Takes a network address (IPv4) and a mask length
     * 
     * @param addr IPv4 address
     * @param mask mask lentgh (between 1 and 32)
     * @throws NullPointerException if addr is null
     * @throws IllegalArgumentException if addr is not IPv4
     */
    public InetCidr(InetAddress addr, int mask) {
        if (addr == null) {
            throw new NullPointerException("addr is null");
        }
        if (!(addr instanceof Inet4Address)) {
            throw new IllegalArgumentException("Only IPv4 addresses supported");
        }
        if (mask < 1 || mask > 32) {
            throw new IllegalArgumentException("Bad mask:" + mask + " must be between 1 and 32");
        }

        // apply mask to address
        this.addr = Util.inetAddress2Int(addr) & (int) gCidrMask[mask];
        this.mask = mask;
    }

    /**
     * Constructs a <tt>InetCidr</tt> provided an ip address and an ip mask.
     * 
     * <p>If the mask is not valid, an exception is raised.
     * 
     * @param addr the ip address (IPv4)
     * @param netMask the ip mask
     * @throws IllegalArgumentException if <tt>addr</tt> or <tt>netMask</tt> is <tt>null</tt>.
     * @throws IllegalArgumentException if the <tt>netMask</tt> is not a valid one.
     */
    public InetCidr(InetAddress addr, InetAddress netMask) {
    	if ((addr == null) || (netMask == null)) {
    		throw new NullPointerException();
    	}
    	if (!(addr instanceof Inet4Address) ||
    		!(netMask instanceof Inet4Address)) {
            throw new IllegalArgumentException("Only IPv4 addresses supported");
    	}
    	Integer intMask = gCidr.get(netMask);
    	if (intMask == null) {
    		throw new IllegalArgumentException("netmask: "+netMask+" is not a valid mask");
    	}
        this.addr = Util.inetAddress2Int(addr) & (int) gCidrMask[intMask];
        this.mask = intMask;
    }

    @Override
    public String toString() {
        return Util.int2InetAddress(addr).getHostAddress()+ '/' + this.mask;
    }


    /**
     * @return Returns the addr.
     */
    public InetAddress getAddr() {
        return Util.int2InetAddress(addr);
    }
    /**
     * @return Returns the addr as a long.
     */
    public long getAddrLong() {
    	return addr & 0xFFFFFFFFL;
    }
    /**
     * @return Returns the mask.
     */
    public int getMask() {
        return this.mask;
    }
    
    /**
     * Returns a <tt>long</tt> representation of Cidr.
     * 
     * <P>The high 32 bits contain the mask, the low 32 bits the network address.
     * 
     * @return the <tt>long</tt> representation of the Cidr
     */
    public final long toLong() {
    	return (addr & 0xFFFFFFFFL) + ( ((long)mask) << 32);
    }
    
    /**
     * Creates a new <tt>InetCidr</tt> from its <tt>long</tt> representation.
     * @param l the Cidr in its "long" format
     * @return the object
     * @throws IllegalArgumentException
     */
    public static final InetCidr fromLong(long l) {
    	if (l < 0) {
    		throw new IllegalArgumentException("l must not be negative: "+l);
    	}
    	long ip = l & 0xFFFFFFFFL;
    	long mask = l >> 32L;
    	return new InetCidr(Util.long2InetAddress(ip), (int) mask);
    }

    @Override
    public int hashCode() {
        return this.addr ^ this.mask;
    }

    @Override
    public boolean equals(Object obj) {
        if ((obj == null) || (!(obj instanceof InetCidr))) {
            return false;
        }
        InetCidr cidr = (InetCidr) obj;

        return ((this.addr == cidr.addr) &&
                 (this.mask == cidr.mask));
    }

    /**
     * Returns an array of all cidr combinations with the provided ip address.
     * 
     * <p>The array is ordered from the most specific to the most general mask.
     * 
     * @param addr
     * @return array of all cidr possible with this address
     */
    public static InetCidr[] addr2Cidr(InetAddress addr) {
    	if (addr == null) {
            throw new IllegalArgumentException("addr must not be null");
    	}
        if (!(addr instanceof Inet4Address)) {
            throw new IllegalArgumentException("Only IPv4 addresses supported");
        }
        int        addrInt = Util.inetAddress2Int(addr);
        InetCidr[] cidrs   = new InetCidr[32];

        for (int i = cidrs.length; i >= 1; i--) {
            cidrs[32 - i] = new InetCidr(Util.int2InetAddress(addrInt & (int)gCidrMask[i]), i);
        }
        return cidrs;
    }
    
    /**
     * Compare two InetCidr by its addr as main criterion, mask as second.
     * 
     * <p>Note: this class has a natural ordering that is inconsistent with equals.
     * @param o
     * @return a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
     */
	public int compareTo(InetCidr o) {
		if (o == null) {
			throw new NullPointerException();
		}
		if (equals(o)) {
			return 0;
		}
		if (int2UnsignedLong(this.addr) < int2UnsignedLong(o.addr)) {
			return -1;
		} else if (int2UnsignedLong(this.addr) > int2UnsignedLong(o.addr)) {
			return 1;
		} else {		// addr are identical, now coparing mask
			if (this.mask < o.mask) {
				return -1;
			} else if (this.mask > o.mask) {
				return 1;
			} else {
				return 0;		// shoul not happen
			}
		}
	}

    private final static long int2UnsignedLong(int i) {
    	return (i & 0xFFFFFFFFL);
    }

	/**
     * Checks whether a list of InetCidr is strictly sorted (no 2 equal objects).
     * 
     * @param list list of potentially sorted <tt>InetCidr</tt>
     * @return true if <tt>list</tt> is sorted or <tt>null</tt>
     * @throws NullPointerException if one or more elements of the list are null
     */
    public static boolean isSorted(List<InetCidr> list) {
    	if (list == null) {
    		return true;
    	}
    	InetCidr pivot = null;
    	for (InetCidr cidr : list) {
    		if (cidr == null) {
    			throw new NullPointerException();
    		}
    		if (pivot == null) {
    			pivot = cidr;
    		} else {
    			if (pivot.compareTo(cidr) >= 0) {
    				return false;
    			}
    			pivot = cidr;
    		}
    	}
    	return true;
    }
    
    /**
     * Checks whether the list does not contain any overlapping cidr(s).
     * 
     * <p>Pre-requisite: list must be already sorted.
     * @param list sorted list of <tt>InetCidr</tt>
     * @throws NullPointerException if a list element is null
     * @throws IllegalStateException if overlapping cidr are detected
     */
    public static void checkNoOverlap(List<InetCidr> list) {
    	if (list == null) { return; }
    	assert(isSorted(list));
    	InetCidr prev = null;
    	long pivotEnd = -1;
    	for (InetCidr cidr : list) {
    		if (cidr == null) {
    			throw new NullPointerException();
    		}
			if ((prev != null) && (cidr.getAddrLong() <= pivotEnd)) {
				throw new IllegalStateException("Overlapping cidr: "+prev+", "+cidr);
			}
			pivotEnd = cidr.getAddrLong() + (gCidrMask[cidr.getMask()] ^ 0xFFFFFFFFL);
			prev = cidr;
    	}
    }

    private static final String[] CIDR_MASKS = {
            "128.0.0.0",
            "192.0.0.0",
            "224.0.0.0",
            "240.0.0.0",
            "248.0.0.0",
            "252.0.0.0",
            "254.0.0.0",
            "255.0.0.0",
            "255.128.0.0",
            "255.192.0.0",
            "255.224.0.0",
            "255.240.0.0",
            "255.248.0.0",
            "255.252.0.0",
            "255.254.0.0",
            "255.255.0.0",
            "255.255.128.0",
            "255.255.192.0",
            "255.255.224.0",
            "255.255.240.0",
            "255.255.248.0",
            "255.255.252.0",
            "255.255.254.0",
            "255.255.255.0",
            "255.255.255.128",
            "255.255.255.192",
            "255.255.255.224",
            "255.255.255.240",
            "255.255.255.248",
            "255.255.255.252",
            "255.255.255.254",
            "255.255.255.255"
    };

    private static final Map<InetAddress, Integer>	gCidr     = new HashMap<InetAddress, Integer>(48);
    private static final long[]						gCidrMask = new long[33];

    static {
        try {
            gCidrMask[0] = 0;
            for (int i = 0; i < CIDR_MASKS.length; i++) {
                InetAddress mask = InetAddress.getByName(CIDR_MASKS[i]);

                gCidrMask[i + 1] = Util.inetAddress2Long(mask);
                gCidr.put(mask, i + 1);
            }
        } catch (UnknownHostException e) {
            throw new IllegalStateException("Unable to initialize CIDR");
        }
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品视频www在线观看 | 欧美午夜电影网| 天堂在线一区二区| 亚洲视频综合在线| 久久久五月婷婷| 日韩欧美激情一区| 欧美日韩视频一区二区| 99国产精品久久久久久久久久 | 91在线视频免费观看| 日本欧美久久久久免费播放网| 亚洲欧美另类小说视频| 国产亚洲欧美在线| 精品美女在线播放| 日韩欧美一区二区不卡| 欧美欧美午夜aⅴ在线观看| 色香蕉成人二区免费| 成人美女在线视频| 成人激情免费网站| 国内精品久久久久影院一蜜桃| 毛片av一区二区三区| 美腿丝袜亚洲综合| 久久99精品国产.久久久久久| 丝袜亚洲精品中文字幕一区| 亚洲图片有声小说| 三级精品在线观看| 午夜激情久久久| 麻豆精品一二三| 国产呦精品一区二区三区网站| 亚洲精品国产a| 亚洲成av人在线观看| 亚洲一区在线看| 日韩av中文字幕一区二区| 免费av成人在线| 亚洲第一在线综合网站| 天堂va蜜桃一区二区三区漫画版| 美女脱光内衣内裤视频久久影院| 久久国产三级精品| 成人一区二区三区| av在线不卡观看免费观看| 91老司机福利 在线| 欧美日韩中字一区| 精品久久人人做人人爰| 国产精品久久午夜夜伦鲁鲁| 亚洲人xxxx| 久久国产日韩欧美精品| 狠狠v欧美v日韩v亚洲ⅴ| 国产福利精品一区二区| 欧美综合久久久| 91麻豆精品国产91久久久久久久久 | 亚洲精品高清在线| 午夜亚洲国产au精品一区二区| 午夜精品久久久久久久99樱桃| 久久成人av少妇免费| 99re6这里只有精品视频在线观看| 色菇凉天天综合网| 日韩欧美高清dvd碟片| 中文字幕在线一区二区三区| 亚洲视频综合在线| 精品一区二区免费看| 91在线视频观看| 欧美tickling挠脚心丨vk| 亚洲三级免费观看| 日本人妖一区二区| 色呦呦日韩精品| 国产欧美精品日韩区二区麻豆天美| 亚洲欧洲美洲综合色网| 九九九精品视频| 在线中文字幕一区| 日本一区二区三区国色天香| 日韩av一级电影| 欧洲激情一区二区| 亚洲欧洲日产国产综合网| 久久爱www久久做| 欧美美女喷水视频| 久久精品一区二区| 婷婷综合另类小说色区| 色婷婷av一区二区三区gif| 欧美丰满少妇xxxbbb| 亚洲精品国产一区二区三区四区在线 | 日韩欧美综合在线| 亚洲国产日韩精品| av亚洲精华国产精华| 国产欧美视频一区二区三区| 久久精品999| 精品国产乱码久久| 亚洲乱码国产乱码精品精98午夜 | 亚洲在线观看免费| 99re这里都是精品| 久久精品亚洲乱码伦伦中文| 国产在线麻豆精品观看| 欧美日韩一二三| 一个色妞综合视频在线观看| 99久久精品国产毛片| 国产精品国产馆在线真实露脸 | 狠狠狠色丁香婷婷综合激情 | 日本vs亚洲vs韩国一区三区| 91精品国产麻豆国产自产在线 | 51精品视频一区二区三区| 亚洲国产综合91精品麻豆| 欧美日韩三级在线| 亚洲欧洲日韩在线| 91麻豆自制传媒国产之光| 国产精品激情偷乱一区二区∴| 国产99久久久国产精品| 国产亚洲精品资源在线26u| 色就色 综合激情| 久久国内精品自在自线400部| 国产精品日产欧美久久久久| 欧美日韩你懂得| 国产不卡一区视频| 亚洲一二三四久久| 久久综合久久综合亚洲| 97久久精品人人澡人人爽| 美女在线一区二区| 亚洲视频在线观看三级| 日韩一区二区免费在线观看| 99精品国产91久久久久久 | 中文字幕制服丝袜一区二区三区| 91麻豆精品国产| 97aⅴ精品视频一二三区| 蜜臀国产一区二区三区在线播放 | 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 亚洲成av人片观看| 久久久不卡影院| 欧美日韩精品福利| 99re66热这里只有精品3直播| 蜜臀av一区二区| 亚洲一区电影777| 中文字幕在线不卡一区| 欧美精品一区二区不卡| 欧美日韩国产成人在线免费| 一本大道久久精品懂色aⅴ| 国产一区二区三区四区五区美女 | 国内精品嫩模私拍在线| 亚洲第一会所有码转帖| 亚洲欧洲日韩女同| 中文在线资源观看网站视频免费不卡| 欧美精三区欧美精三区| 91麻豆6部合集magnet| 99天天综合性| 成人一区在线看| 成人综合在线视频| 国产精品亚洲综合一区在线观看| 男女视频一区二区| 午夜av区久久| 日韩av电影天堂| 麻豆精品一区二区| 视频在线观看一区| 亚洲午夜视频在线| 亚洲精品成人悠悠色影视| 亚洲免费视频中文字幕| 国产精品白丝在线| 亚洲欧美日韩国产综合| 亚洲图片另类小说| 亚洲欧美综合另类在线卡通| 日韩美女视频一区| 亚洲欧美一区二区三区久本道91| 欧美国产日韩精品免费观看| 国产精品网站一区| 国产精品理论片| 亚洲黄色尤物视频| 亚洲国产美女搞黄色| 日韩成人一级大片| 经典三级视频一区| 成人天堂资源www在线| 97成人超碰视| 欧美日韩成人综合天天影院 | 国产精品第一页第二页第三页| 亚洲欧洲精品天堂一级| 亚洲精品视频在线观看免费| 亚洲一级二级在线| 老司机免费视频一区二区三区| 国产精品一级片| 欧美手机在线视频| 日韩一级黄色片| 国产欧美一区二区精品忘忧草| 夜夜爽夜夜爽精品视频| 人人狠狠综合久久亚洲| 国产福利不卡视频| 欧美亚洲日本一区| 日韩欧美中文字幕公布| 日本一区二区三级电影在线观看| 中文字幕亚洲在| 久久9热精品视频| 91蜜桃视频在线| 99久久婷婷国产| 国产精品欧美久久久久无广告| 北岛玲一区二区三区四区| 国产宾馆实践打屁股91| 丁香五精品蜜臀久久久久99网站 | 91精彩视频在线观看| 在线看日韩精品电影| 精品日韩成人av| 亚洲综合区在线| 国精产品一区一区三区mba桃花| 欧美专区日韩专区| 日韩欧美视频一区| 亚洲天堂精品在线观看| 激情都市一区二区| 91精品国产一区二区三区蜜臀|