/*******************************************************************************
* Copyright (c) 2004-2010 Gabor Bergmann and Daniel Varro
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Gabor Bergmann - initial API and implementation
*******************************************************************************/
package org.eclipse.incquery.runtime.rete.construction.psystem;
/**
* @author Bergmann Gábor
*
*/
public interface ITypeInfoProviderConstraint {
/**
* Returns type information that is known about the variable if this constraint holds. Null if no such information
* is discernible.
*
* @param variable
* @return the inferred type information, or TypeInfoSpecials.NO_TYPE_INFO_PROVIDED if no type information is
* inferrable. Never returns null.
*/
public Object getTypeInfo(PVariable variable);
public static enum TypeInfoSpecials {
NO_TYPE_INFO_PROVIDED, ANY_UNARY, ANY_TERNARY;
public static Object wrapUnary(Object typeKey) {
return typeKey == null ? ITypeInfoProviderConstraint.TypeInfoSpecials.ANY_UNARY : typeKey;
}
public static Object unwrapUnary(Object typeKey) {
return typeKey == ITypeInfoProviderConstraint.TypeInfoSpecials.ANY_UNARY ? null : typeKey;
}
public static Object wrapTernary(Object typeKey) {
return typeKey == null ? ITypeInfoProviderConstraint.TypeInfoSpecials.ANY_TERNARY : typeKey;
}
public static Object unwrapTernary(Object typeKey) {
return typeKey == ITypeInfoProviderConstraint.TypeInfoSpecials.ANY_TERNARY ? null : typeKey;
}
public static Object wrapAny(Object typeKey) {
return typeKey == null ? ITypeInfoProviderConstraint.TypeInfoSpecials.NO_TYPE_INFO_PROVIDED : typeKey;
}
}
}