blob: 3a7f696756f7e8118b6db4ecc3fdb1be16fc35c5 [file] [log] [blame]
/*
* Copyright 2017-present Open Networking Laboratory
*
* 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.onosproject.store.primitives.resources.impl;
import io.atomix.catalyst.buffer.BufferInput;
import io.atomix.catalyst.buffer.BufferOutput;
import io.atomix.catalyst.serializer.CatalystSerializable;
import io.atomix.catalyst.serializer.SerializableTypeResolver;
import io.atomix.catalyst.serializer.Serializer;
import io.atomix.catalyst.serializer.SerializerRegistry;
import io.atomix.copycat.Command;
import io.atomix.copycat.Query;
/**
* Atomic counter map commands.
*/
public final class AtomixAtomicCounterMapCommands {
private AtomixAtomicCounterMapCommands() {
}
public abstract static class AtomicCounterMapCommand<V> implements Command<V>, CatalystSerializable {
@Override
public CompactionMode compaction() {
return CompactionMode.SNAPSHOT;
}
@Override
public void writeObject(BufferOutput<?> buffer, Serializer serializer) {
}
@Override
public void readObject(BufferInput<?> buffer, Serializer serializer) {
}
}
public abstract static class AtomicCounterMapQuery<V> implements Query<V>, CatalystSerializable {
@Override
public void writeObject(BufferOutput<?> buffer, Serializer serializer) {
}
@Override
public void readObject(BufferInput<?> buffer, Serializer serializer) {
}
}
public abstract static class KeyCommand<V> extends AtomicCounterMapCommand<V> {
private String key;
public KeyCommand() {
}
public KeyCommand(String key) {
this.key = key;
}
public String key() {
return key;
}
@Override
public void writeObject(BufferOutput<?> buffer, Serializer serializer) {
buffer.writeString(key);
}
@Override
public void readObject(BufferInput<?> buffer, Serializer serializer) {
key = buffer.readString();
}
}
public abstract static class KeyQuery<V> extends AtomicCounterMapQuery<V> {
private String key;
public KeyQuery() {
}
public KeyQuery(String key) {
this.key = key;
}
public String key() {
return key;
}
@Override
public void writeObject(BufferOutput<?> buffer, Serializer serializer) {
buffer.writeString(key);
}
@Override
public void readObject(BufferInput<?> buffer, Serializer serializer) {
key = buffer.readString();
}
}
public static class KeyValueCommand<V> extends KeyCommand<V> {
private long value;
public KeyValueCommand() {
}
public KeyValueCommand(String key, long value) {
super(key);
this.value = value;
}
public long value() {
return value;
}
@Override
public void writeObject(BufferOutput<?> buffer, Serializer serializer) {
super.writeObject(buffer, serializer);
buffer.writeLong(value);
}
@Override
public void readObject(BufferInput<?> buffer, Serializer serializer) {
super.readObject(buffer, serializer);
value = buffer.readLong();
}
}
public static class Get extends KeyQuery<Long> {
public Get() {
}
public Get(String key) {
super(key);
}
}
public static class Put extends KeyValueCommand<Long> {
public Put() {
}
public Put(String key, long value) {
super(key, value);
}
}
public static class PutIfAbsent extends KeyValueCommand<Long> {
public PutIfAbsent() {
}
public PutIfAbsent(String key, long value) {
super(key, value);
}
}
public static class Replace extends KeyCommand<Boolean> {
private long replace;
private long value;
public Replace() {
}
public Replace(String key, long replace, long value) {
super(key);
this.replace = replace;
this.value = value;
}
public long replace() {
return replace;
}
public long value() {
return value;
}
@Override
public void writeObject(BufferOutput<?> buffer, Serializer serializer) {
super.writeObject(buffer, serializer);
buffer.writeLong(replace);
buffer.writeLong(value);
}
@Override
public void readObject(BufferInput<?> buffer, Serializer serializer) {
super.readObject(buffer, serializer);
replace = buffer.readLong();
value = buffer.readLong();
}
}
public static class Remove extends KeyCommand<Long> {
public Remove() {
}
public Remove(String key) {
super(key);
}
}
public static class RemoveValue extends KeyValueCommand<Boolean> {
public RemoveValue() {
}
public RemoveValue(String key, long value) {
super(key, value);
}
}
public static class IncrementAndGet extends KeyCommand<Long> {
public IncrementAndGet() {
}
public IncrementAndGet(String key) {
super(key);
}
}
public static class DecrementAndGet extends KeyCommand<Long> {
public DecrementAndGet(String key) {
super(key);
}
public DecrementAndGet() {
}
}
public static class GetAndIncrement extends KeyCommand<Long> {
public GetAndIncrement() {
}
public GetAndIncrement(String key) {
super(key);
}
}
public static class GetAndDecrement extends KeyCommand<Long> {
public GetAndDecrement() {
}
public GetAndDecrement(String key) {
super(key);
}
}
public abstract static class DeltaCommand extends KeyCommand<Long> {
private long delta;
public DeltaCommand() {
}
public DeltaCommand(String key, long delta) {
super(key);
this.delta = delta;
}
public long delta() {
return delta;
}
@Override
public void writeObject(BufferOutput<?> buffer, Serializer serializer) {
super.writeObject(buffer, serializer);
buffer.writeLong(delta);
}
@Override
public void readObject(BufferInput<?> buffer, Serializer serializer) {
super.readObject(buffer, serializer);
delta = buffer.readLong();
}
}
public static class AddAndGet extends DeltaCommand {
public AddAndGet() {
}
public AddAndGet(String key, long delta) {
super(key, delta);
}
}
public static class GetAndAdd extends DeltaCommand {
public GetAndAdd() {
}
public GetAndAdd(String key, long delta) {
super(key, delta);
}
}
public static class Size extends AtomicCounterMapQuery<Integer> {
}
public static class IsEmpty extends AtomicCounterMapQuery<Boolean> {
}
public static class Clear extends AtomicCounterMapCommand<Void> {
}
/**
* Counter map command type resolver.
*/
public static class TypeResolver implements SerializableTypeResolver {
@Override
public void resolve(SerializerRegistry registry) {
registry.register(Get.class, -790);
registry.register(Put.class, -791);
registry.register(PutIfAbsent.class, -792);
registry.register(Replace.class, -793);
registry.register(Remove.class, -794);
registry.register(RemoveValue.class, -795);
registry.register(IncrementAndGet.class, -796);
registry.register(DecrementAndGet.class, -797);
registry.register(GetAndIncrement.class, -798);
registry.register(GetAndDecrement.class, -799);
registry.register(AddAndGet.class, -800);
registry.register(GetAndAdd.class, -801);
registry.register(Size.class, -801);
registry.register(IsEmpty.class, -801);
registry.register(Clear.class, -801);
}
}
}