/*******************************************************************************
 * Copyright (c) 2004, 2009 QNX Software Systems and others.
 * 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:
 *     QNX Software Systems - initial API and implementation
 *******************************************************************************/
package org.eclipse.cdt.core.browser;

/**
 * @noextend This interface is not intended to be extended by clients.
 * @noimplement This interface is not intended to be implemented by clients.
 */
public interface IQualifiedTypeName extends Comparable<IQualifiedTypeName> {

	public final static String QUALIFIER = "::"; //$NON-NLS-1$

	public String getName();

	public String getFullyQualifiedName();
	public IQualifiedTypeName getEnclosingTypeName();
	public String[] getEnclosingNames();

	public boolean isQualified();
	public boolean isEmpty();
	public boolean isGlobal();
	
	public IQualifiedTypeName append(String qualifiedName);
	public IQualifiedTypeName append(String[] names);
	public IQualifiedTypeName append(IQualifiedTypeName typeName);

	public String[] segments();
	public String segment(int index);
	public int segmentCount();
	public String lastSegment();
	public int matchingFirstSegments(IQualifiedTypeName typeName);
	public IQualifiedTypeName removeFirstSegments(int count);
	public IQualifiedTypeName removeLastSegments(int count);
	public boolean isPrefixOf(IQualifiedTypeName typeName);

	public boolean isLowLevel();
	public boolean isValidSegment(String segment);
	public boolean isValid();
	
	public boolean equals(IQualifiedTypeName typeName);
	public boolean equalsIgnoreCase(IQualifiedTypeName typeName);
	public int compareTo(IQualifiedTypeName typeName);
	public int compareToIgnoreCase(IQualifiedTypeName typeName);
}
