package de.lmu.ifi.dbs.elki.data.type; /* This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ import de.lmu.ifi.dbs.elki.persistent.ByteBufferSerializer; /** * Class wrapping a particular data type. * * @author Erich Schubert * * @apiviz.composedOf ByteBuffererSerializer * * @param Java type we represent. */ public class SimpleTypeInformation implements TypeInformation { /** * The restriction class we represent. */ private Class cls; /** * Type label. */ private String label = null; /** * Type serializer. */ private ByteBufferSerializer serializer = null; /** * Constructor. * * @param cls restriction class */ public SimpleTypeInformation(Class cls) { super(); this.cls = cls; } /** * Constructor. * * @param cls restriction class * @param label type label */ public SimpleTypeInformation(Class cls, String label) { super(); this.cls = cls; this.label = label; } /** * Constructor. * * @param cls restriction class * @param serializer Serializer */ public SimpleTypeInformation(Class cls, ByteBufferSerializer serializer) { super(); this.cls = cls; this.serializer = serializer; } /** * Constructor. * * @param cls restriction class * @param label type label * @param serializer Serializer */ public SimpleTypeInformation(Class cls, String label, ByteBufferSerializer serializer) { super(); this.cls = cls; this.label = label; this.serializer = serializer; } /** * Get the raw restriction class. * * @return Restriction class */ public final Class getRestrictionClass() { return cls; } @Override public boolean isAssignableFromType(TypeInformation type) { if (!(type instanceof SimpleTypeInformation)) { return false; } final SimpleTypeInformation simpleType = (SimpleTypeInformation) type; return cls.isAssignableFrom(simpleType.getRestrictionClass()); } @Override public boolean isAssignableFrom(Object other) { return cls.isInstance(other); } /** * Cast the object to type T (actually to the given restriction class!). * * @param other Object to cast. * @return Instance */ @SuppressWarnings("unchecked") public T cast(Object other) { return (T) cls.cast(other); } @Override public String toString() { return getRestrictionClass().getSimpleName(); } /** * Get the type label. * * @return Label */ public String getLabel() { return label; } /** * Get the serializer for this type. * * @return Type serializer */ public ByteBufferSerializer getSerializer() { return serializer; } /** * Set the serializer for this type. * * @param serializer Serializer to use */ public void setSerializer(ByteBufferSerializer serializer) { this.serializer = serializer; } }