blob: 58233cdf3c5570f276fa3d379740588a92ff17a4 [file] [log] [blame]
/**********************************************************************
* Copyright (c) 2005,2010 IBM Corporation.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ptp.pldt.openmp.core.editorHelp;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.cdt.ui.IFunctionSummary;
import org.eclipse.cdt.ui.IFunctionSummary.IFunctionPrototypeSummary;
import org.eclipse.ptp.pldt.common.editorHelp.CHelpBookImpl;
import org.eclipse.ptp.pldt.common.editorHelp.FunctionPrototypeSummaryImpl;
import org.eclipse.ptp.pldt.common.editorHelp.FunctionSummaryImpl;
import org.eclipse.ptp.pldt.openmp.core.OpenMPPlugin;
/**
* Provide help for OpenMP APIs.<br>
* This includes hover help, F1 help, and content assist (ctrl-space)
* @author tibbitts
*
*/
public class OpenMPCHelpBook extends CHelpBookImpl {
private static final String TITLE = Messages.OpenMPCHelpBook_omp_c_and_fortran_help_book_title;
public OpenMPCHelpBook() {
super(OpenMPPlugin.getPluginId());
// populate func map
funcName2FuncInfo=makeFunctionMap();
// set title
setTitle(TITLE);
}
/**
* Make function map of API names and info.<br>
* Note this is also used for (one-time) generation of the html
* files by the main() and generateHTML() methods below.
* @return hashmap of the function names and associated info
*/
private static Map<String, IFunctionSummary> makeFunctionMap() {
Map<String, IFunctionSummary> funcMap= new HashMap<String, IFunctionSummary>();
funcMap.put("omp_set_num_threads", //$NON-NLS-1$
new FunctionSummaryImpl("omp_set_num_threads","", //$NON-NLS-1$ //$NON-NLS-2$
Messages.OpenMPCHelpBook_set_num_threads,
new FunctionPrototypeSummaryImpl(
"omp_set_num_threads", "void", //$NON-NLS-1$ //$NON-NLS-2$
"int num_threads"), null)); //$NON-NLS-1$
funcMap.put("omp_get_num_threads", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_get_num_threads", "", Messages.OpenMPCHelpBook_get_num_threads, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("omp_get_num_threads", //$NON-NLS-1$
"int", "int num_threads"), null)); //$NON-NLS-1$ //$NON-NLS-2$
funcMap.put("omp_get_max_threads", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_get_max_threads", "", Messages.OpenMPCHelpBook_get_max_threads, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("omp_get_max_threads", //$NON-NLS-1$
"int", "void"), null)); //$NON-NLS-1$ //$NON-NLS-2$
funcMap.put("omp_get_thread_num", new FunctionSummaryImpl( //$NON-NLS-1$
"get_thread_num", "", Messages.OpenMPCHelpBook_get_thread_num, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("get_thread_num", //$NON-NLS-1$
"int", "void"), null)); //$NON-NLS-1$ //$NON-NLS-2$
funcMap.put("omp_get_num_procs", new FunctionSummaryImpl( //$NON-NLS-1$
"get_num_procs", "", Messages.OpenMPCHelpBook_get_num_procs, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("get_num_procs", "int", //$NON-NLS-1$ //$NON-NLS-2$
"void"), null)); //$NON-NLS-1$
funcMap.put("omp_in_parallel", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_in_parallel", "", //$NON-NLS-1$ //$NON-NLS-2$
Messages.OpenMPCHelpBook_in_parallel,
new FunctionPrototypeSummaryImpl("omp_in_parallel", "int", //$NON-NLS-1$ //$NON-NLS-2$
"void"), null)); //$NON-NLS-1$
funcMap.put("omp_set_dynamic", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_set_dynamic", "", Messages.OpenMPCHelpBook_set_dynamic, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("omp_set_dynamic", //$NON-NLS-1$
"void", "int dynamic_threads"), null)); //$NON-NLS-1$ //$NON-NLS-2$
funcMap.put("omp_get_dynamic", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_get_dynamic", "", Messages.OpenMPCHelpBook_get_dynamic, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("omp_get_dynamic", //$NON-NLS-1$
"int", "void"), null)); //$NON-NLS-1$ //$NON-NLS-2$
funcMap.put("omp_set_nested", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_set_nested", "", Messages.OpenMPCHelpBook_set_nested, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("omp_set_nested", //$NON-NLS-1$
"void", "int nested"), null)); //$NON-NLS-1$ //$NON-NLS-2$
funcMap.put("omp_get_nested", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_get_nested", "", Messages.OpenMPCHelpBook_get_nested, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("omp_get_nested", //$NON-NLS-1$
"int", "void"), null)); //$NON-NLS-1$ //$NON-NLS-2$
funcMap.put("omp_init_lock", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_init_lock", "", Messages.OpenMPCHelpBook_init_lock, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("omp_init_lock", "void", //$NON-NLS-1$ //$NON-NLS-2$
"omp_lock_t *lock"), null)); //$NON-NLS-1$
funcMap.put("omp_init_nest_lock", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_init_nest_lock", "", Messages.OpenMPCHelpBook_nest_lock, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("omp_init_nest_lock", "void", //$NON-NLS-1$ //$NON-NLS-2$
"omp_nest_lock_t *lock"), null)); //$NON-NLS-1$
funcMap.put("omp_destroy_lock", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_destroy_lock", "", Messages.OpenMPCHelpBook_destroy_lock, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("omp_destroy_lock", //$NON-NLS-1$
"void", "omp_lock_t *lock"), null)); //$NON-NLS-1$ //$NON-NLS-2$
funcMap.put("omp_destroy_nest_lock", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_destroy_nest_lock", "", Messages.OpenMPCHelpBook_destroy_nest_lock, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("omp_destroy_nest_lock", //$NON-NLS-1$
"void", "omp_nest_lock_t *lock"), null)); //$NON-NLS-1$ //$NON-NLS-2$
funcMap.put("omp_set_lock", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_set_lock", "", Messages.OpenMPCHelpBook_set_lock, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("omp_set_lock", "void", //$NON-NLS-1$ //$NON-NLS-2$
"omp_lock_t *lock"), null)); //$NON-NLS-1$
funcMap.put("omp_set_nest_lock", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_set_nest_lock", "", Messages.OpenMPCHelpBook_set_nest_lock, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("omp_set_nest_lock", "void", //$NON-NLS-1$ //$NON-NLS-2$
"omp_nest_lock_t *lock"), null)); //$NON-NLS-1$
funcMap.put("omp_test_lock", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_test_lock", "", Messages.OpenMPCHelpBook_test_lock, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("omp_test_lock", "int", //$NON-NLS-1$ //$NON-NLS-2$
"omp_lock_t *lock2"), null)); //$NON-NLS-1$
funcMap.put("omp_test_nest_lock", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_test_nest_lock", "", Messages.OpenMPCHelpBook_test_nest_lock, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("omp_test_nest_lock", "int", //$NON-NLS-1$ //$NON-NLS-2$
"omp_nest_lock_t *lock"), null)); //$NON-NLS-1$
funcMap.put("omp_unset_lock", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_unset_lock", "", Messages.OpenMPCHelpBook_unset_lock, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("omp_unset_lock", //$NON-NLS-1$
"void", "omp_lock_t *lock"), null)); //$NON-NLS-1$ //$NON-NLS-2$
funcMap.put("omp_unset_nest_lock", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_unset_nest_lock", "", Messages.OpenMPCHelpBook_unset_nest_lock, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("omp_unset_nest_lock", //$NON-NLS-1$
"void", "omp_nest_lock_t *lock"), null)); //$NON-NLS-1$ //$NON-NLS-2$
funcMap.put("omp_get_wtime", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_get_wtime", "", Messages.OpenMPCHelpBook_get_wtime, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("omp_get_wtime", "double", //$NON-NLS-1$ //$NON-NLS-2$
"void"), null)); //$NON-NLS-1$
funcMap.put("omp_get_wtick", new FunctionSummaryImpl( //$NON-NLS-1$
"omp_get_wtick", "", Messages.OpenMPCHelpBook_get_wtick, //$NON-NLS-1$ //$NON-NLS-2$
new FunctionPrototypeSummaryImpl("omp_get_wtick", "double", //$NON-NLS-1$ //$NON-NLS-2$
"void"), null)); //$NON-NLS-1$
// try to define constants too...
// funcMap.put("OMP_DYNAMIC", new FunctionSummaryImpl(
// "OMP_DYNAMIC", "", "OMP_DYNAMIC description",
// new FunctionPrototypeSummaryImpl("OMP_DYNAMIC", "ret",
// "int arg1, int arg2"), null));
return funcMap;
}
/** one-time generation of html docs in generateHTML() uses this value */
private static final String HTML_DIR = "C:\\ews\\ptpJan06\\org.eclipse.ptp.pldt.openmp.core\\html\\"; //$NON-NLS-1$
/**
* generate html documents (one-time)
*/
public static void generateHTML(Map fMap) {
int count=0;
Collection fColl = fMap.values();
for (Iterator iter = fColl.iterator(); iter.hasNext();) {
FunctionSummaryImpl fsi = (FunctionSummaryImpl) iter.next();
IFunctionPrototypeSummary fspi = fsi.getPrototype();
String proto = fspi.getPrototypeString(false);
String args = fspi.getArguments();
String rt = fspi.getReturnType();
if (fsi != null) {
PrintStream html = null;
String filename=HTML_DIR+fsi.getName() + ".html"; //$NON-NLS-1$
try {
html = new PrintStream(new FileOutputStream(filename));
html.print("<html><head><title>"); //$NON-NLS-1$
html.print(fsi.getName());
html.println("</title>"); //$NON-NLS-1$
html.println("<body>"); //$NON-NLS-1$
html.print("<H3>"); //$NON-NLS-1$
html.print(fsi.getName());
html.println("</H3>"); //$NON-NLS-1$
html.println("<PRE>"); //$NON-NLS-1$
html.println(fspi.getPrototypeString(false));
html.println("</PRE>"); //$NON-NLS-1$
html.println("<DL><DD>"); //$NON-NLS-1$
html.println(fsi.getDescription());
html.println("<P></DL></body></html>"); //$NON-NLS-1$
} catch (IOException e) {
e.printStackTrace();
} finally {
if (html != null)
html.close();
System.out.println("wrote "+filename); //$NON-NLS-1$
count++;
}
}
}
System.out.println("Wrote "+count+" html files."); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* Run as Java app to generate the HTML files that will be used
* for F1 help.
* @param args unused
*/
public static void main(String[] args) {
Map map = makeFunctionMap();
generateHTML(map);
}
}