gov.llnl.babel.backend.ucxx
Class Cxx

java.lang.Object
  extended by gov.llnl.babel.backend.ucxx.Cxx

public class Cxx
extends java.lang.Object

Class Cxx contains common C++ language binding routines shared by the C++ backend code generators. This class simply collects many common C+ binding routines into one place.


Field Summary
static int FILE_ROLE_IMPL
           
static int FILE_ROLE_MAX
           
static int FILE_ROLE_MIN
           
static int FILE_ROLE_NONE
           
static int FILE_ROLE_SKEL
           
static int FILE_ROLE_STUB
           
static java.lang.String[] FILE_ROLE_SUFFIX
           
static int FILE_TYPE_C_HEADER
           
static int FILE_TYPE_C_SOURCE
           
static int FILE_TYPE_CXX_HEADER
           
static int FILE_TYPE_CXX_SOURCE
           
static java.lang.String[] FILE_TYPE_EXTENSION
           
static int FILE_TYPE_MAX
           
static int FILE_TYPE_MIN
           
static int FILE_TYPE_NONE
           
static java.lang.String NULL
           
 
Constructor Summary
Cxx()
           
 
Method Summary
static java.lang.String argComment(Argument arg)
          convert an argument to a comment indicating the mode and perhaps the type.
static void beginExternCRegion(LanguageWriterForCxx writer)
          begin a region of method calls with C linkage
static void closeUCxxNamespace(LanguageWriterForCxx writer)
           
static java.lang.String constCast(java.lang.String newtype, java.lang.String arg)
          generate a constCast
static LanguageWriterForCxx createHeader(Symbol symbol, int role, java.lang.String filegroup, Context context)
          Create an empty header file and return the language writer to create subsequent content.
static LanguageWriterForCxx createSource(Symbol symbol, int role, java.lang.String filegroup, Context context)
          Create an empty source file and return the language writer to create subsequent content.
static void endExternCRegion(LanguageWriterForCxx writer)
          end region of method calls with C linkage
static void generateArgumentList(LanguageWriterForCxx writer, Method method, Context context, boolean rarrays, boolean isStub)
           
static void generateExceptionSetBody(LanguageWriterForCxx writer, java.util.Set throw_set, Context context)
          Generate Signature for the exception throwing method
static void generateExceptionSetSignature(LanguageWriterForCxx writer, SymbolID id, java.util.Set throw_set, int index, boolean stub, boolean isSuper)
          Generate Signature for the exception throwing method
static java.lang.String generateFilename(java.lang.String symbolName, int role, int ftype)
          Generate the filename associated with a symbol identifier.
static java.lang.String generateFilename(SymbolID id, int role, int ftype, Context context)
          Generate the filename associated with a symbol identifier.
static java.lang.String generateFunctionDeclaration(Method m, Extendable d_ext, Context context, java.lang.String d_self, boolean isSuper, boolean rarrays)
           
static java.util.Set generateImplHeaderDependencyIncludes(LanguageWriterForCxx writer, Extendable ext, boolean removeSelf, Context context)
          Generates include directives for all the extendables that this extendable inherits from for Impls.
static java.util.Set generateImplSourceIncludes(LanguageWriterForCxx writer, Class cls, Context context)
          Generates include directives for all the Babel clases used in this Impl.cxx file
static java.util.Set generateIncludes(LanguageWriterForCxx writer, Extendable ext, boolean removeSelf, Context context)
          Generates include directives for all the extendables that this extendable inherits from.
static java.util.Set generateIncludeSet(Extendable ext, Context context)
          Generate the set of SymbolID's that this Extendable must #include.
static java.lang.String generateInitialization(Method m, Extendable d_ext, java.lang.String d_self, Context context)
          Generates initialization of methods prior to IOR call.
static void generateInlineMethodSignature(LanguageWriterForCxx writer, Context context, Method method, java.lang.String altcomment, int role, boolean isSuper, boolean rarrays, boolean hasInvariants)
           
static java.lang.String generateIORCall(Method m, Extendable d_ext, Context context, java.lang.String d_self, boolean isSuper, boolean rarrays)
           
static void generateMethodSignature(LanguageWriterForCxx writer, Context context, Method method, java.lang.String altcomment, int role, boolean rarrays, boolean hasInvariants)
           
static java.lang.String generatePostIORCall(Method m, Extendable d_ext, java.lang.String d_self, boolean isSuper, boolean rarrays)
           
static java.lang.String generatePostIORCleanup(Method m, boolean rarrays)
           
static java.lang.String generatePreIORCall(Method m, Extendable d_ext, java.lang.String d_self, boolean isSuper, boolean rarrays, Context context)
          Function generates argument initialization prior to IOR call.
static java.lang.String generateRoleDescription(SymbolID id, int role)
          Generate the role description associated with the symbol identifier and the specified role of the file.
static java.util.Set generateSourceIncludes(LanguageWriterForCxx writer, Extendable ext, Context context)
          Generates include directives for all the Babel clases used in this Stub .cxx file
static void generateThrowsList(LanguageWriterForCxx writer, Method method, boolean canThrowNullIORException, boolean hasInvariants, Context context)
           
static java.lang.String generateThrowsList(Method method, boolean canThrowNullIORException, boolean hasInvariants, Context context)
           
static java.lang.String getCxxString(Type type, boolean rarrays, Context context)
          Convert the type to a Cxx representation in string form
static java.lang.String getEnumName(SymbolID id)
          Convert a sidl enumerated type into its symbol name, which is just the colon separated symbol name
static java.util.Map getExceptionSets(java.util.Collection methods)
          On the first time it is called it generates sets of exceptions for all the methods in this Extendable.
static java.lang.String getFileExtension(int ftype)
          Returns the appropriate file extension String based on the file type, prepended with the period (e.g., ".hxx").
static java.lang.String getFileSuffix(int role)
          Returns the appropriate String suffix associated with the specified role.
static java.util.Set getFrontIncludes(Extendable ext, Context context)
          Generates include directives for all the extendables that this extendable inherits from.
static java.lang.String getImplSymbolName(SymbolID id, java.lang.String postfix)
          Convert a symbol name into its C++ identifier.
static java.lang.String getImplSymbolNameWithoutLeadingColons(SymbolID id, java.lang.String postfix)
          Convert a symbol name into its C++ identifier.
static java.lang.String getIORCacheVariable(Interface ifc)
          Returns the name of the IOR cache variable for the passed in interface.
static java.lang.String getIORCall(java.lang.String objName, SymbolID id)
           
static java.lang.String getIORCall(java.lang.String objName, Type t)
           
static java.lang.String getLocalIOR(Type t)
           
static java.lang.String getMethodImplName(SymbolID id, java.lang.String methodName)
          Generate the impl method's name.
static java.lang.String getMethodSkelName(SymbolID id, java.lang.String methodName)
          Generate the skel method's name.
static java.lang.String getMethodStubName(SymbolID id, java.lang.String methodName, boolean isSuper)
          Generate the stub method's name.
static java.lang.String getObjectName(SymbolID id)
          Convert a sidl symbol name into its object name -- for the purposes of this package that means convert it into its typedef object name.
static java.lang.String getRarrayReturnString(Type type, Context context)
          Generate a Cxx return string for the specified sidl type.
static java.lang.String getReturnString(Type type, Context context)
          Generate a Cxx return string for the specified sidl type.
static java.util.List getStubMethodList(Extendable ext)
          This returns the list of all methods that need to have stub methods generated.
static java.lang.String getSymbolName(SymbolID id)
           
static java.lang.String getSymbolName(SymbolID id, java.lang.String postfix)
          Convert a symbol name into its C++ identifier.
static java.lang.String getSymbolNameWithoutLeadingColons(SymbolID id, java.lang.String postfix)
           
static void initializeLocalIOR(LanguageWriterForCxx writer, Interface ifc, java.lang.String self, boolean inList)
          Prints a string that initializes the cache variable for the passed in interface.
static boolean inlineStub(Method m)
          Determines if the stub function should be inlined based on the simplicity of the arguments and return type.
static void nestImplPackagesInNamespaces(LanguageWriterForCxx writer, Symbol symbol)
          Generate a the namespaces in which the C++ class is nested.
static void nestPackagesInNamespaces(LanguageWriterForCxx writer, Symbol symbol)
          Generate a the namespaces in which the C++ class is nested.
static void nestPackagesInNamespaces(LanguageWriterForCxx writer, SymbolID symbolid)
          Generate a the namespaces in which the C++ class is nested.
static void openUCxxNamespace(LanguageWriterForCxx writer)
          Opens ucxx namespace
static java.lang.String prependGlobalUCxx()
           
static java.lang.String prependLocalUCxx()
           
static java.lang.String reinterpretCast(java.lang.String newtype, java.lang.String arg)
          generate a reinterpretCast
static void unnestImplPackagesInNamespaces(LanguageWriterForCxx writer, Symbol symbol)
          Close the namespaces in which the C++ class is nested.
static void unnestPackagesInNamespaces(LanguageWriterForCxx writer, Symbol symbol)
          Close the namespaces in which the C++ class is nested.
static void unnestPackagesInNamespaces(LanguageWriterForCxx writer, SymbolID symbolid)
          Close the namespaces in which the C++ class is nested.
static void writeCallsToParentInterfaceConstructors(LanguageWriterForCxx writer, Class cls, java.lang.String self)
          Prints cache initialization for all parent interfaces of this extendable.
static void writeInterfaceCacheInitialization(LanguageWriterForCxx writer, Extendable ext, java.lang.String self)
          Prints cache initialization for all parent interfaces of this extendable.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

FILE_ROLE_MIN

public static final int FILE_ROLE_MIN
See Also:
Constant Field Values

FILE_ROLE_MAX

public static final int FILE_ROLE_MAX
See Also:
Constant Field Values

FILE_ROLE_NONE

public static final int FILE_ROLE_NONE
See Also:
Constant Field Values

FILE_ROLE_IMPL

public static final int FILE_ROLE_IMPL
See Also:
Constant Field Values

FILE_ROLE_SKEL

public static final int FILE_ROLE_SKEL
See Also:
Constant Field Values

FILE_ROLE_STUB

public static final int FILE_ROLE_STUB
See Also:
Constant Field Values

NULL

public static final java.lang.String NULL
See Also:
Constant Field Values

FILE_ROLE_SUFFIX

public static final java.lang.String[] FILE_ROLE_SUFFIX

FILE_TYPE_MIN

public static final int FILE_TYPE_MIN
See Also:
Constant Field Values

FILE_TYPE_MAX

public static final int FILE_TYPE_MAX
See Also:
Constant Field Values

FILE_TYPE_NONE

public static final int FILE_TYPE_NONE
See Also:
Constant Field Values

FILE_TYPE_CXX_HEADER

public static final int FILE_TYPE_CXX_HEADER
See Also:
Constant Field Values

FILE_TYPE_CXX_SOURCE

public static final int FILE_TYPE_CXX_SOURCE
See Also:
Constant Field Values

FILE_TYPE_C_HEADER

public static final int FILE_TYPE_C_HEADER
See Also:
Constant Field Values

FILE_TYPE_C_SOURCE

public static final int FILE_TYPE_C_SOURCE
See Also:
Constant Field Values

FILE_TYPE_EXTENSION

public static final java.lang.String[] FILE_TYPE_EXTENSION
Constructor Detail

Cxx

public Cxx()
Method Detail

getFileSuffix

public static java.lang.String getFileSuffix(int role)
Returns the appropriate String suffix associated with the specified role.

Parameters:
role - the int associated with the role of the file to differentiate skeletons, stubs, impls, etc.

getFileExtension

public static java.lang.String getFileExtension(int ftype)
Returns the appropriate file extension String based on the file type, prepended with the period (e.g., ".hxx").

Parameters:
ftype - the int associated with the type of the file to differentiate between header and source

generateFilename

public static java.lang.String generateFilename(SymbolID id,
                                                int role,
                                                int ftype,
                                                Context context)
Generate the filename associated with a symbol identifier.
  1. Replaces the "." scope separators in the symbol by underscores
  2. Appends a "_" + suffix, if appropriate
  3. Appends the appropriate extension

Parameters:
id - the SymbolID of the Symbol
role - the int associated with the role of the file to differentiate skeletons, stubs, impls, etc.
ftype - the int associated with the type of the file to differentiate between header and source When the --generate-subdirs and --short-file-names options are used simultaneously, the generated file names will not include the package names of the packages containing the symbol whose SymbolID is passed as an argument. Thus, either long or short names must be used in all clients or servers that have interdependencies; mixing short and long names will result in compile and/or runtime errors.

generateFilename

public static java.lang.String generateFilename(java.lang.String symbolName,
                                                int role,
                                                int ftype)
Generate the filename associated with a symbol identifier.
  1. Replaces the "." scope separators in the symbol by underscores
  2. Appends a "_" + suffix, if appropriate
  3. Appends the appropriate extension

Parameters:
symbolName - the stringified name of the Symbol
role - the int associated with the role of the file to differentiate skeletons, stubs, impls, etc.
ftype - the int associated with the type of the file to differentiate between header and source

generateRoleDescription

public static java.lang.String generateRoleDescription(SymbolID id,
                                                       int role)
Generate the role description associated with the symbol identifier and the specified role of the file.

Parameters:
id - the SymbolID of the Symbol
role - the int associated with the role of the file to differentiate skeletons, stubs, impls, etc.

createHeader

public static LanguageWriterForCxx createHeader(Symbol symbol,
                                                int role,
                                                java.lang.String filegroup,
                                                Context context)
                                         throws CodeGenerationException
Create an empty header file and return the language writer to create subsequent content.

Parameters:
symbol - the SymbolID of the Symbol
role - the int identifying the role of the file to differentiate skeletons, stubs, impls, etc.
filegroup - a String to associate the file with for possible makefile generation
Throws:
CodeGenerationException

createSource

public static LanguageWriterForCxx createSource(Symbol symbol,
                                                int role,
                                                java.lang.String filegroup,
                                                Context context)
                                         throws CodeGenerationException
Create an empty source file and return the language writer to create subsequent content.

Parameters:
symbol - the SymbolID of the Symbol
role - the int identifying the role of the file to differentiate skeletons, stubs, impls, etc.
filegroup - a String to associate the file with for possible makefile generation
Throws:
CodeGenerationException

nestPackagesInNamespaces

public static void nestPackagesInNamespaces(LanguageWriterForCxx writer,
                                            Symbol symbol)
Generate a the namespaces in which the C++ class is nested. Increase the tab levels in the language writer appropriately.

Parameters:
writer - the language writer for C++
symbol - the symbol begin written to this file, containing the hierarchy of packages to which it belongs.
See Also:
unnestPackagesInNamespaces(gov.llnl.babel.backend.writers.LanguageWriterForCxx, gov.llnl.babel.symbols.Symbol)

unnestPackagesInNamespaces

public static void unnestPackagesInNamespaces(LanguageWriterForCxx writer,
                                              Symbol symbol)
Close the namespaces in which the C++ class is nested. Decrease the tab levels in the language writer appropriately.

Parameters:
writer - the language writer for C++
symbol - the symbol begin written to this file, containing the hierarchy of packages to which it belongs.
See Also:
nestPackagesInNamespaces(gov.llnl.babel.backend.writers.LanguageWriterForCxx, gov.llnl.babel.symbols.Symbol)

nestImplPackagesInNamespaces

public static void nestImplPackagesInNamespaces(LanguageWriterForCxx writer,
                                                Symbol symbol)
Generate a the namespaces in which the C++ class is nested. Increase the tab levels in the language writer appropriately.

Parameters:
writer - the language writer for C++
symbol - the symbol begin written to this file, containing the hierarchy of packages to which it belongs.
See Also:
unnestPackagesInNamespaces(gov.llnl.babel.backend.writers.LanguageWriterForCxx, gov.llnl.babel.symbols.Symbol)

unnestImplPackagesInNamespaces

public static void unnestImplPackagesInNamespaces(LanguageWriterForCxx writer,
                                                  Symbol symbol)
Close the namespaces in which the C++ class is nested. Decrease the tab levels in the language writer appropriately.

Parameters:
writer - the language writer for C++
symbol - the symbol begin written to this file, containing the hierarchy of packages to which it belongs.
See Also:
nestPackagesInNamespaces(gov.llnl.babel.backend.writers.LanguageWriterForCxx, gov.llnl.babel.symbols.Symbol)

nestPackagesInNamespaces

public static void nestPackagesInNamespaces(LanguageWriterForCxx writer,
                                            SymbolID symbolid)
Generate a the namespaces in which the C++ class is nested. Increase the tab levels in the language writer appropriately.

Parameters:
writer - the language writer for C++
symbolid - the symbol begin written to this file, containing the hierarchy of packages to which it belongs.
See Also:
unnestPackagesInNamespaces(gov.llnl.babel.backend.writers.LanguageWriterForCxx, gov.llnl.babel.symbols.Symbol)

unnestPackagesInNamespaces

public static void unnestPackagesInNamespaces(LanguageWriterForCxx writer,
                                              SymbolID symbolid)
Close the namespaces in which the C++ class is nested. Decrease the tab levels in the language writer appropriately.

Parameters:
writer - the language writer for C++
symbolid - the symbol begin written to this file, containing the hierarchy of packages to which it belongs.
See Also:
nestPackagesInNamespaces(gov.llnl.babel.backend.writers.LanguageWriterForCxx, gov.llnl.babel.symbols.Symbol)

beginExternCRegion

public static void beginExternCRegion(LanguageWriterForCxx writer)
begin a region of method calls with C linkage

Parameters:
writer - languageWriter for the file

endExternCRegion

public static void endExternCRegion(LanguageWriterForCxx writer)
end region of method calls with C linkage

Parameters:
writer - languageWriter for the file

getSymbolName

public static java.lang.String getSymbolName(SymbolID id,
                                             java.lang.String postfix)
Convert a symbol name into its C++ identifier. This method replaces the "." scope separators in the symbol by "::".

Parameters:
id - the SymbolID of the Symbol. & @param postfix an optional postfix for the class itself

getImplSymbolName

public static java.lang.String getImplSymbolName(SymbolID id,
                                                 java.lang.String postfix)
Convert a symbol name into its C++ identifier. This method replaces the "." scope separators in the symbol by "::".

Parameters:
id - the SymbolID of the Symbol. & @param postfix an optional postfix for the class itself

getImplSymbolNameWithoutLeadingColons

public static java.lang.String getImplSymbolNameWithoutLeadingColons(SymbolID id,
                                                                     java.lang.String postfix)
Convert a symbol name into its C++ identifier. This method replaces the "." scope separators in the symbol by "::".

Parameters:
id - the SymbolID of the Symbol.
postfix - an optional postfix for the class itself

getSymbolName

public static java.lang.String getSymbolName(SymbolID id)

getSymbolNameWithoutLeadingColons

public static java.lang.String getSymbolNameWithoutLeadingColons(SymbolID id,
                                                                 java.lang.String postfix)
See Also:
getSymbolName(gov.llnl.babel.symbols.SymbolID, java.lang.String)

getEnumName

public static java.lang.String getEnumName(SymbolID id)
Convert a sidl enumerated type into its symbol name, which is just the colon separated symbol name

Parameters:
id - the SymbolID of the Symbol.

getObjectName

public static java.lang.String getObjectName(SymbolID id)
Convert a sidl symbol name into its object name -- for the purposes of this package that means convert it into its typedef object name. The typedef name is the sidl symbol name with the "." scope separators replaced by "::".

Parameters:
id - the SymbolID of the Symbol.

argComment

public static java.lang.String argComment(Argument arg)
convert an argument to a comment indicating the mode and perhaps the type.

Parameters:
arg -
Returns:
either a comment string

reinterpretCast

public static java.lang.String reinterpretCast(java.lang.String newtype,
                                               java.lang.String arg)
generate a reinterpretCast

Parameters:
newtype - the new type to cast to
arg - the variable to cast
Returns:
string that properly declares the cast

constCast

public static java.lang.String constCast(java.lang.String newtype,
                                         java.lang.String arg)
generate a constCast

Parameters:
newtype - the new type to cast to
arg - the variable to cast
Returns:
string that properly declares the cast

openUCxxNamespace

public static void openUCxxNamespace(LanguageWriterForCxx writer)
Opens ucxx namespace


closeUCxxNamespace

public static void closeUCxxNamespace(LanguageWriterForCxx writer)

prependGlobalUCxx

public static java.lang.String prependGlobalUCxx()

prependLocalUCxx

public static java.lang.String prependLocalUCxx()

getCxxString

public static java.lang.String getCxxString(Type type,
                                            boolean rarrays,
                                            Context context)
                                     throws CodeGenerationException
Convert the type to a Cxx representation in string form

Throws:
CodeGenerationException

getReturnString

public static java.lang.String getReturnString(Type type,
                                               Context context)
                                        throws CodeGenerationException
Generate a Cxx return string for the specified sidl type. Most of the sidl return strings are listed in the static structures defined at the start of the class. Symbol types and array types require special processing. This version will treat all rarrays as sidl arrays

Parameters:
type - the Type whose return string is being built.
Throws:
CodeGenerationException

getRarrayReturnString

public static java.lang.String getRarrayReturnString(Type type,
                                                     Context context)
                                              throws CodeGenerationException
Generate a Cxx return string for the specified sidl type. Most of the sidl return strings are listed in the static structures defined at the start of the class. Symbol types and array types require special processing. This one turns on the possibility of rarrays

Parameters:
type - the Type whose return string is being built.
Throws:
CodeGenerationException

getIORCall

public static java.lang.String getIORCall(java.lang.String objName,
                                          Type t)

getIORCall

public static java.lang.String getIORCall(java.lang.String objName,
                                          SymbolID id)

getLocalIOR

public static java.lang.String getLocalIOR(Type t)

getStubMethodList

public static java.util.List getStubMethodList(Extendable ext)
This returns the list of all methods that need to have stub methods generated. This includes all locally defined methods and all locally overloaded methods (i.e., if a method defined in a parent class is overloaded by a locally defined method, it must be included).

Returns:
list of Method objects

getMethodImplName

public static java.lang.String getMethodImplName(SymbolID id,
                                                 java.lang.String methodName)
Generate the impl method's name.

Parameters:
id - the SymbolID of the Symbol associated with the method.
methodName - the String version of the name of the method whose impl name is being built.

getMethodSkelName

public static java.lang.String getMethodSkelName(SymbolID id,
                                                 java.lang.String methodName)
Generate the skel method's name.

Parameters:
id - the SymbolID of the Symbol associated with the method.
methodName - the String version of the name of the method whose skel name is being built.

getMethodStubName

public static java.lang.String getMethodStubName(SymbolID id,
                                                 java.lang.String methodName,
                                                 boolean isSuper)
Generate the stub method's name.

Parameters:
id - the SymbolID of the Symbol associated with the method.
methodName - the String version of the name of the method whose impl name is being built.

generateIncludeSet

public static java.util.Set generateIncludeSet(Extendable ext,
                                               Context context)
                                        throws CodeGenerationException
Generate the set of SymbolID's that this Extendable must #include.

Throws:
CodeGenerationException

getFrontIncludes

public static java.util.Set getFrontIncludes(Extendable ext,
                                             Context context)
                                      throws CodeGenerationException
Generates include directives for all the extendables that this extendable inherits from.

Parameters:
writer - Language writer for C++
ext - Extendible (Class or Interface) to generate dependencies
removeSelf - True if called from a Stub generator since this would cause an inclusion loop in Stub.h False if called from an impl generator since the impl may need to know about the stub.
Throws:
CodeGenerationException

generateImplHeaderDependencyIncludes

public static java.util.Set generateImplHeaderDependencyIncludes(LanguageWriterForCxx writer,
                                                                 Extendable ext,
                                                                 boolean removeSelf,
                                                                 Context context)
                                                          throws CodeGenerationException
Generates include directives for all the extendables that this extendable inherits from for Impls. For Impl header files only

Parameters:
writer - Language writer for C++
ext - Extendible (Class or Interface) to generate dependencies
removeSelf - True if called from a Stub generator since this would cause an inclusion loop in Stub.h False if called from an impl generator since the impl may need to know about the stub.
Throws:
CodeGenerationException

generateSourceIncludes

public static java.util.Set generateSourceIncludes(LanguageWriterForCxx writer,
                                                   Extendable ext,
                                                   Context context)
                                            throws CodeGenerationException
Generates include directives for all the Babel clases used in this Stub .cxx file

Parameters:
writer - Language writer for C++
ext - Extendible (Class or Interface) to generate dependencies
Throws:
CodeGenerationException

generateImplSourceIncludes

public static java.util.Set generateImplSourceIncludes(LanguageWriterForCxx writer,
                                                       Class cls,
                                                       Context context)
                                                throws CodeGenerationException
Generates include directives for all the Babel clases used in this Impl.cxx file

Parameters:
writer - Language writer for C++
ext - Extendible (Class or Interface) to generate dependencies
Throws:
CodeGenerationException

generateIncludes

public static java.util.Set generateIncludes(LanguageWriterForCxx writer,
                                             Extendable ext,
                                             boolean removeSelf,
                                             Context context)
                                      throws CodeGenerationException
Generates include directives for all the extendables that this extendable inherits from.

Parameters:
writer - Language writer for C++
ext - Extendible (Class or Interface) to generate dependencies
removeSelf - True if called from a Stub generator since this would cause an inclusion loop in Stub.h False if called from an impl generator since the impl may need to know about the stub.
Throws:
CodeGenerationException

generateMethodSignature

public static void generateMethodSignature(LanguageWriterForCxx writer,
                                           Context context,
                                           Method method,
                                           java.lang.String altcomment,
                                           int role,
                                           boolean rarrays,
                                           boolean hasInvariants)
                                    throws CodeGenerationException
Throws:
CodeGenerationException

generateInlineMethodSignature

public static void generateInlineMethodSignature(LanguageWriterForCxx writer,
                                                 Context context,
                                                 Method method,
                                                 java.lang.String altcomment,
                                                 int role,
                                                 boolean isSuper,
                                                 boolean rarrays,
                                                 boolean hasInvariants)
                                          throws CodeGenerationException
Throws:
CodeGenerationException

generateArgumentList

public static void generateArgumentList(LanguageWriterForCxx writer,
                                        Method method,
                                        Context context,
                                        boolean rarrays,
                                        boolean isStub)
                                 throws CodeGenerationException
Throws:
CodeGenerationException

generateThrowsList

public static void generateThrowsList(LanguageWriterForCxx writer,
                                      Method method,
                                      boolean canThrowNullIORException,
                                      boolean hasInvariants,
                                      Context context)

generateThrowsList

public static java.lang.String generateThrowsList(Method method,
                                                  boolean canThrowNullIORException,
                                                  boolean hasInvariants,
                                                  Context context)

generateExceptionSetSignature

public static void generateExceptionSetSignature(LanguageWriterForCxx writer,
                                                 SymbolID id,
                                                 java.util.Set throw_set,
                                                 int index,
                                                 boolean stub,
                                                 boolean isSuper)
                                          throws CodeGenerationException
Generate Signature for the exception throwing method

Throws:
CodeGenerationException

generateExceptionSetBody

public static void generateExceptionSetBody(LanguageWriterForCxx writer,
                                            java.util.Set throw_set,
                                            Context context)
Generate Signature for the exception throwing method


inlineStub

public static boolean inlineStub(Method m)
Determines if the stub function should be inlined based on the simplicity of the arguments and return type. The logic is that the stub function should be inlined unless it throws an exception or one or more of it's arguments or return type is: bool, dcomplex, fcomplex, string, object out/inout, or array out/inout. RETURNS: True if babel method should be inlined


generateFunctionDeclaration

public static java.lang.String generateFunctionDeclaration(Method m,
                                                           Extendable d_ext,
                                                           Context context,
                                                           java.lang.String d_self,
                                                           boolean isSuper,
                                                           boolean rarrays)
                                                    throws CodeGenerationException
Throws:
CodeGenerationException

getIORCacheVariable

public static java.lang.String getIORCacheVariable(Interface ifc)
Returns the name of the IOR cache variable for the passed in interface.

Parameters:
ifc - the Interface the cache variable name is based on.

initializeLocalIOR

public static void initializeLocalIOR(LanguageWriterForCxx writer,
                                      Interface ifc,
                                      java.lang.String self,
                                      boolean inList)
Prints a string that initializes the cache variable for the passed in interface.

Parameters:
writer - Launguage writer to output on.
ifc - the Interface the cache variable name is based on.
self - String giving the name of the ior variable to be assigned to the cache
inList - True if this initialization is in a C++ initialization list. False prints a normal expression.

writeInterfaceCacheInitialization

public static void writeInterfaceCacheInitialization(LanguageWriterForCxx writer,
                                                     Extendable ext,
                                                     java.lang.String self)
                                              throws CodeGenerationException
Prints cache initialization for all parent interfaces of this extendable. (For use in _set_ior())

Parameters:
writer - Launguage writer to output on.
ext - the Extendable were generating this initialization for.
self - String giving the name of the ior variable to be assigned to the cache.
Throws:
CodeGenerationException

writeCallsToParentInterfaceConstructors

public static void writeCallsToParentInterfaceConstructors(LanguageWriterForCxx writer,
                                                           Class cls,
                                                           java.lang.String self)
                                                    throws CodeGenerationException
Prints cache initialization for all parent interfaces of this extendable. (For use in _set_ior())

Parameters:
writer - Launguage writer to output on.
cls - the Class were generating this initialization for. (Only classes need to call their parent interface constructors, because they can initialize the IOR caches with correct values. Interfaces can just use defualt constructors.)
self - String giving the name of the ior variable to be assigned to the cache.
Throws:
CodeGenerationException

generateInitialization

public static java.lang.String generateInitialization(Method m,
                                                      Extendable d_ext,
                                                      java.lang.String d_self,
                                                      Context context)
                                               throws CodeGenerationException
Generates initialization of methods prior to IOR call.

Throws:
CodeGenerationException

generatePreIORCall

public static java.lang.String generatePreIORCall(Method m,
                                                  Extendable d_ext,
                                                  java.lang.String d_self,
                                                  boolean isSuper,
                                                  boolean rarrays,
                                                  Context context)
                                           throws CodeGenerationException
Function generates argument initialization prior to IOR call.

Throws:
CodeGenerationException

generateIORCall

public static java.lang.String generateIORCall(Method m,
                                               Extendable d_ext,
                                               Context context,
                                               java.lang.String d_self,
                                               boolean isSuper,
                                               boolean rarrays)
                                        throws CodeGenerationException
Throws:
CodeGenerationException

generatePostIORCleanup

public static java.lang.String generatePostIORCleanup(Method m,
                                                      boolean rarrays)
                                               throws CodeGenerationException
Throws:
CodeGenerationException

generatePostIORCall

public static java.lang.String generatePostIORCall(Method m,
                                                   Extendable d_ext,
                                                   java.lang.String d_self,
                                                   boolean isSuper,
                                                   boolean rarrays)
                                            throws CodeGenerationException
Throws:
CodeGenerationException

getExceptionSets

public static java.util.Map getExceptionSets(java.util.Collection methods)
On the first time it is called it generates sets of exceptions for all the methods in this Extendable. Most methods probably don't declare any exceptions, so they hold the "1 implicit exception" set.