/*******************************************************************************
* Copyright (c) 2003, 2010 IBM Corporation 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:
* Andrew Niefer (Rational Software) - initial implementation
*******************************************************************************/
package org.eclipse.cdt.internal.ui.search;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable;
import org.eclipse.cdt.internal.core.dom.parser.c.CVariableReadWriteFlags;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVariableReadWriteFlags;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMName;
public class CSearchUtil {
public static int LRU_WORKINGSET_LIST_SIZE= 3;
private static LRUWorkingSets workingSetsCache;
public CSearchUtil() {
super();
}
public static void updateLRUWorkingSets(IWorkingSet[] workingSets) {
if (workingSets == null || workingSets.length < 1)
return;
CSearchUtil.getLRUWorkingSets().add(workingSets);
}
public static LRUWorkingSets getLRUWorkingSets() {
if (CSearchUtil.workingSetsCache == null) {
CSearchUtil.workingSetsCache = new LRUWorkingSets(CSearchUtil.LRU_WORKINGSET_LIST_SIZE);
}
return CSearchUtil.workingSetsCache;
}
public static String toString(IWorkingSet[] workingSets) {
if( workingSets != null && workingSets.length > 0 ){
String string = new String();
for( int i = 0; i < workingSets.length; i++ ){
if( i > 0 )
string += ", "; //$NON-NLS-1$
string += workingSets[i].getName();
}
return string;
}
return null;
}
public static boolean isWriteOccurrence(IASTName node, IBinding binding) {
boolean isWrite;
if (binding instanceof ICPPVariable) {
isWrite = ((CPPVariableReadWriteFlags.getReadWriteFlags(node) & PDOMName.WRITE_ACCESS) != 0);
}
else {
isWrite = ((CVariableReadWriteFlags.getReadWriteFlags(node) & PDOMName.WRITE_ACCESS) != 0);
}
return isWrite;
}
}