/* * Copyright 2014 Higher Frequency Trading http://www.higherfrequencytrading.com * * 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 net.openhft.chronicle.map; import net.openhft.lang.model.Byteable; import net.openhft.lang.model.DataValueClasses; import org.jetbrains.annotations.NotNull; public final class OffHeapUpdatableChronicleMapBuilder extends AbstractChronicleMapBuilder> { public static OffHeapUpdatableChronicleMapBuilder of( @NotNull Class keyClass, @NotNull Class valueClass) { if (!Byteable.class.isAssignableFrom(valueClass)) { if (!valueClass.isInterface()) { throw new IllegalArgumentException( "Value class should be either Byteable subclass or interface," + "allowing direct Byteable implementation generation"); } valueClass = DataValueClasses.directClassFor(valueClass); } return new OffHeapUpdatableChronicleMapBuilder(keyClass, valueClass); } OffHeapUpdatableChronicleMapBuilder(Class keyClass, Class valueClass) { super(keyClass, valueClass); prepareValueBytesOnAcquire(new ZeroOutValueBytes(valueSize())); } @Override OffHeapUpdatableChronicleMapBuilder self() { return this; } /** * {@inheritDoc} Also, it overrides any previous {@link #prepareValueBytesOnAcquire} * configuration to this {@code OffHeapUpdatableChronicleMapBuilder}. * *

By default, the default value is not specified, default {@linkplain * #prepareValueBytesOnAcquire prepare value bytes routine} is specified instead. * * @see #defaultValueProvider(DefaultValueProvider) * @see #prepareValueBytesOnAcquire(PrepareValueBytes) */ @Override public OffHeapUpdatableChronicleMapBuilder defaultValue(V defaultValue) { return super.defaultValue(defaultValue); } /** * {@inheritDoc} Also, it overrides any previous {@link #prepareValueBytesOnAcquire} * configuration to this {@code OffHeapUpdatableChronicleMapBuilder}. * *

By default, the default value provider is not specified, default {@linkplain * #prepareValueBytesOnAcquire prepare value bytes routine} is specified instead. * * @see #defaultValue(Object) * @see #prepareValueBytesOnAcquire(PrepareValueBytes) */ @Override public OffHeapUpdatableChronicleMapBuilder defaultValueProvider( @NotNull DefaultValueProvider defaultValueProvider) { return super.defaultValueProvider(defaultValueProvider); } /** * Configures the procedure which is called on the bytes, which later the returned value is * pointing to, if the key is absent, on {@link ChronicleMap#acquireUsing(Object, Object) * acquireUsing()} call on maps, created by this builder. * *

The default preparation callback zeroes out the value bytes. * * @param prepareValueBytes what to do with the value bytes before assigning them into the * {@link Byteable} value to return from {@code acquireUsing()} call * @return this builder back * @see #defaultValue(Object) * @see #defaultValueProvider(DefaultValueProvider) */ @Override public OffHeapUpdatableChronicleMapBuilder prepareValueBytesOnAcquire( @NotNull PrepareValueBytes prepareValueBytes) { return super.prepareValueBytesOnAcquire(prepareValueBytes); } }