All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.atomix.catalyst.buffer.AbstractBytes Maven / Gradle / Ivy

There is a newer version: 1.2.1
Show newest version
/*
 * Copyright 2015 the original author or authors.
 *
 * 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 io.atomix.catalyst.buffer;

import java.nio.BufferOverflowException;
import java.nio.BufferUnderflowException;
import java.nio.ByteOrder;

/**
 * Abstract bytes implementation.
 * 

* This class provides common state and bounds checking functionality for all {@link Bytes} implementations. * * @author Jordan Halterman */ public abstract class AbstractBytes implements Bytes { private boolean open = true; private SwappedBytes swap; /** * Checks whether the block is open. */ protected void checkOpen() { if (!open) throw new IllegalStateException("bytes not open"); } /** * Checks that the offset is within the bounds of the buffer. */ protected void checkOffset(long offset) { checkOpen(); if (offset < 0 || offset > size()) throw new IndexOutOfBoundsException(); } /** * Checks bounds for a read. */ protected long checkRead(long offset, long length) { checkOffset(offset); long position = offset + length; if (position > size()) throw new BufferUnderflowException(); return position; } /** * Checks bounds for a write. */ protected long checkWrite(long offset, long length) { checkOffset(offset); long position = offset + length; if (position > size()) throw new BufferOverflowException(); return position; } @Override public boolean isDirect() { return false; } @Override public boolean isFile() { return false; } @Override public ByteOrder order() { return ByteOrder.BIG_ENDIAN; } @Override public Bytes order(ByteOrder order) { if (order == null) throw new NullPointerException("order cannot be null"); if (order == order()) return this; if (swap != null) return swap; swap = new SwappedBytes(this); return swap; } @Override public void close() { open = false; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy