/* * Copyright (c) 2013-2017 Cinchapi Inc. * * 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 com.cinchapi.concourse.server.plugin.data; import io.atomix.catalyst.buffer.Buffer; import java.util.Map; import java.util.Set; import com.google.common.collect.Sets; /** * A {@link Dataset} that contains results from a Concourse Server method call, * mapping record ids to field keys to contained values. * <p> * This implementation is flexible enough to support values expressed in * different ways (e.g. TObjects vs Object). * </p> * * @author Jeff Nelson */ public abstract class ResultDataset<V> extends Dataset<Long, String, V> { @Override protected Map<V, Set<Long>> createInvertedMultimap() { return TrackingLinkedHashMultimap.create(); } @Override protected String deserializeAttribute(Buffer buffer) { return buffer.readUTF8(); } @Override protected Set<Long> deserializeEntities(Buffer buffer) { int count = buffer.readInt(); Set<Long> entities = Sets.newLinkedHashSetWithExpectedSize(count); while (entities.size() < count) { entities.add(buffer.readLong()); } return entities; } @Override protected void serializeAttribute(String attribute, Buffer buffer) { buffer.writeUTF8(attribute); } @Override protected void serializeEntities(Set<Long> entities, Buffer buffer) { buffer.writeInt(entities.size()); entities.forEach((entity) -> buffer.writeLong(entity)); } }