001/**
002 * This file is part of the Kompics P2P Framework.
003 *
004 * Copyright (C) 2009 Swedish Institute of Computer Science (SICS) Copyright (C)
005 * 2009 Royal Institute of Technology (KTH)
006 *
007 * Kompics is free software; you can redistribute it and/or modify it under the
008 * terms of the GNU General Public License as published by the Free Software
009 * Foundation; either version 2 of the License, or (at your option) any later
010 * version.
011 *
012 * This program is distributed in the hope that it will be useful, but WITHOUT
013 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
014 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
015 * details.
016 *
017 * You should have received a copy of the GNU General Public License along with
018 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
019 * Place - Suite 330, Boston, MA 02111-1307, USA.
020 */
021package se.sics.kompics.simulator.adaptor.distributions;
022
023import java.util.Random;
024
025/**
026 * The <code>LongExponentialDistribution</code> class.
027 *
028 * @author Cosmin Arad {@literal <[email protected]>}
029 * @version $Id: LongExponentialDistribution.java 750 2009-04-02 09:55:01Z Cosmin $
030 */
031public class LongExponentialDistribution extends Distribution<Long> {
032    private static final long serialVersionUID = 1760380746716287473L;
033
034    private final Random random;
035    private final double mean;
036
037    public LongExponentialDistribution(long mean, Random random) {
038        super(Type.EXPONENTIAL, Long.class);
039        this.random = random;
040        this.mean = mean;
041    }
042
043    @Override
044    public final Long draw() {
045        double u = random.nextDouble();
046        return Math.round(-mean * Math.log(1 - u));
047    }
048}