blob: b15daeffde86a20970f78cb3146844e511c987b3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.cassandra.db.composites;
import java.nio.ByteBuffer;
import org.apache.cassandra.cache.IMeasurableMemory;
import org.apache.cassandra.config.CFMetaData;
import org.apache.cassandra.db.filter.ColumnSlice;
import org.apache.cassandra.utils.memory.AbstractAllocator;
/**
* A composite value.
*
* This can be though as a list of ByteBuffer, except that this also include an
* 'end-of-component' flag, that allow precise selection of composite ranges.
*
* We also make a difference between "true" composites and the "simple" ones. The
* non-truly composite will have a size() == 1 but differs from true composites with
* size() == 1 in the way they are stored. Most code shouldn't have to care about the
* difference.
*/
public interface Composite extends IMeasurableMemory
{
public enum EOC
{
START(-1), NONE(-1), END(1);
// If composite p has this EOC and is a strict prefix of composite c, then this
// the result of the comparison of p and c. Basically, p sorts before c unless
// it's EOC is END.
public final int prefixComparisonResult;
private EOC(int prefixComparisonResult)
{
this.prefixComparisonResult = prefixComparisonResult;
}
public static EOC from(int eoc)
{
return eoc == 0 ? NONE : (eoc < 0 ? START : END);
}
}
public int size();
public boolean isEmpty();
public ByteBuffer get(int i);
public EOC eoc();
public Composite withEOC(EOC eoc);
public Composite start();
public Composite end();
public ColumnSlice slice();
public boolean isStatic();
public boolean isPrefixOf(CType type, Composite other);
public ByteBuffer toByteBuffer();
public int dataSize();
public Composite copy(CFMetaData cfm, AbstractAllocator allocator);
}