// Path: ohc-core/src/main/java/org/caffinitas/ohc/Ticker.java
// public interface Ticker
// {
//     Ticker DEFAULT = new DefaultTicker();
// 
//     long nanos();
// 
//     long currentTimeMillis();
// }


import com.google.common.primitives.Ints;
import org.caffinitas.ohc.Ticker;
/*
 *      Copyright (C) 2014 Robert Stupp, Koeln, Germany, robert-stupp.de
 *
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */
package org.caffinitas.ohc.linked;



/**
 * Manages cache entry time-to-live in off-heap memory.
 * <p>
 * TTL entries are organized in {@code slots} slots. The <i>slot</i> is chosen using
 * the entry's {@code expireAt} absolute timestamp value - rounded by the provided
 * {@code precision}.
 * Technically the index of a slot is calculated using the formula:
 * {@code slotIndex = (expireAt >> precisionShift) & slotBitmask}.
 * </p>
 * <p>
 * Each slot maintains an unsorted list of entries. Each entry consists of the
 * {@code hashEntryAdr} of the cache's entry and the {@code expireAt} absolute
 * timestamp. The size of a slot's list is unbounded, it is resized if necessary -
 * both increasing and decreasing.
 * </p>
 */
final class Timeouts
{
    private final long slotBitmask;

    private final int precisionShift;
    private final int slotCount;
    private final Slot[] slots;

// Path: ohc-core/src/main/java/org/caffinitas/ohc/Ticker.java
// public interface Ticker
// {
//     Ticker DEFAULT = new DefaultTicker();
// 
//     long nanos();
// 
//     long currentTimeMillis();
// }


// Path: ohc-core/src/main/java/org/caffinitas/ohc/linked/Timeouts.java
import com.google.common.primitives.Ints;
import org.caffinitas.ohc.Ticker;

/*
 *      Copyright (C) 2014 Robert Stupp, Koeln, Germany, robert-stupp.de
 *
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */
package org.caffinitas.ohc.linked;



/**
 * Manages cache entry time-to-live in off-heap memory.
 * <p>
 * TTL entries are organized in {@code slots} slots. The <i>slot</i> is chosen using
 * the entry's {@code expireAt} absolute timestamp value - rounded by the provided
 * {@code precision}.
 * Technically the index of a slot is calculated using the formula:
 * {@code slotIndex = (expireAt >> precisionShift) & slotBitmask}.
 * </p>
 * <p>
 * Each slot maintains an unsorted list of entries. Each entry consists of the
 * {@code hashEntryAdr} of the cache's entry and the {@code expireAt} absolute
 * timestamp. The size of a slot's list is unbounded, it is resized if necessary -
 * both increasing and decreasing.
 * </p>
 */
final class Timeouts
{
    private final long slotBitmask;

    private final int precisionShift;
    private final int slotCount;
    private final Slot[] slots;

    private final Ticker ticker;