public class Cxx
extends java.lang.Object
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.Modifier and Type | Field and Description |
---|---|
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 and Description |
---|
Cxx() |
Modifier and Type | Method and Description |
---|---|
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.
|
public static final int FILE_ROLE_MIN
public static final int FILE_ROLE_MAX
public static final int FILE_ROLE_NONE
public static final int FILE_ROLE_IMPL
public static final int FILE_ROLE_SKEL
public static final int FILE_ROLE_STUB
public static final java.lang.String NULL
public static final java.lang.String[] FILE_ROLE_SUFFIX
public static final int FILE_TYPE_MIN
public static final int FILE_TYPE_MAX
public static final int FILE_TYPE_NONE
public static final int FILE_TYPE_CXX_HEADER
public static final int FILE_TYPE_CXX_SOURCE
public static final int FILE_TYPE_C_HEADER
public static final int FILE_TYPE_C_SOURCE
public static final java.lang.String[] FILE_TYPE_EXTENSION
public static java.lang.String getFileSuffix(int role)
String
suffix associated with
the specified role.role
- the int
associated with the role of the
file to differentiate skeletons, stubs, impls, etc.public static java.lang.String getFileExtension(int ftype)
String
based on
the file type, prepended with the period (e.g., ".hxx").ftype
- the int
associated with the type of the
file to differentiate between header and sourcepublic static java.lang.String generateFilename(SymbolID id, int role, int ftype, Context context)
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.public static java.lang.String generateFilename(java.lang.String symbolName, int role, int ftype)
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 sourcepublic static java.lang.String generateRoleDescription(SymbolID id, int role)
id
- the SymbolID
of the Symbol
role
- the int
associated with the role of the
file to differentiate skeletons, stubs, impls, etc.public static LanguageWriterForCxx createHeader(Symbol symbol, int role, java.lang.String filegroup, Context context) throws CodeGenerationException
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 generationCodeGenerationException
public static LanguageWriterForCxx createSource(Symbol symbol, int role, java.lang.String filegroup, Context context) throws CodeGenerationException
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 generationCodeGenerationException
public static void nestPackagesInNamespaces(LanguageWriterForCxx writer, Symbol symbol)
writer
- the language writer for C++symbol
- the symbol begin written to this file, containing
the hierarchy of packages to which it belongs.unnestPackagesInNamespaces(gov.llnl.babel.backend.writers.LanguageWriterForCxx, gov.llnl.babel.symbols.Symbol)
public static void unnestPackagesInNamespaces(LanguageWriterForCxx writer, Symbol symbol)
writer
- the language writer for C++symbol
- the symbol begin written to this file, containing
the hierarchy of packages to which it belongs.nestPackagesInNamespaces(gov.llnl.babel.backend.writers.LanguageWriterForCxx, gov.llnl.babel.symbols.Symbol)
public static void nestImplPackagesInNamespaces(LanguageWriterForCxx writer, Symbol symbol)
writer
- the language writer for C++symbol
- the symbol begin written to this file, containing
the hierarchy of packages to which it belongs.unnestPackagesInNamespaces(gov.llnl.babel.backend.writers.LanguageWriterForCxx, gov.llnl.babel.symbols.Symbol)
public static void unnestImplPackagesInNamespaces(LanguageWriterForCxx writer, Symbol symbol)
writer
- the language writer for C++symbol
- the symbol begin written to this file, containing
the hierarchy of packages to which it belongs.nestPackagesInNamespaces(gov.llnl.babel.backend.writers.LanguageWriterForCxx, gov.llnl.babel.symbols.Symbol)
public static void nestPackagesInNamespaces(LanguageWriterForCxx writer, SymbolID symbolid)
writer
- the language writer for C++symbolid
- the symbol begin written to this file, containing
the hierarchy of packages to which it belongs.unnestPackagesInNamespaces(gov.llnl.babel.backend.writers.LanguageWriterForCxx, gov.llnl.babel.symbols.Symbol)
public static void unnestPackagesInNamespaces(LanguageWriterForCxx writer, SymbolID symbolid)
writer
- the language writer for C++symbolid
- the symbol begin written to this file, containing
the hierarchy of packages to which it belongs.nestPackagesInNamespaces(gov.llnl.babel.backend.writers.LanguageWriterForCxx, gov.llnl.babel.symbols.Symbol)
public static void beginExternCRegion(LanguageWriterForCxx writer)
writer
- languageWriter for the filepublic static void endExternCRegion(LanguageWriterForCxx writer)
writer
- languageWriter for the filepublic static java.lang.String getSymbolName(SymbolID id, java.lang.String postfix)
id
- the SymbolID
of the Symbol
.
& @param postfix an optional postfix for the class itselfpublic static java.lang.String getImplSymbolName(SymbolID id, java.lang.String postfix)
id
- the SymbolID
of the Symbol
.
& @param postfix an optional postfix for the class itselfpublic static java.lang.String getImplSymbolNameWithoutLeadingColons(SymbolID id, java.lang.String postfix)
id
- the SymbolID
of the Symbol
.postfix
- an optional postfix for the class itselfpublic static java.lang.String getSymbolName(SymbolID id)
public static java.lang.String getSymbolNameWithoutLeadingColons(SymbolID id, java.lang.String postfix)
public static java.lang.String getEnumName(SymbolID id)
id
- the SymbolID
of the Symbol
.public static java.lang.String getObjectName(SymbolID id)
id
- the SymbolID
of the Symbol
.public static java.lang.String argComment(Argument arg)
arg
- public static java.lang.String reinterpretCast(java.lang.String newtype, java.lang.String arg)
newtype
- the new type to cast toarg
- the variable to castpublic static java.lang.String constCast(java.lang.String newtype, java.lang.String arg)
newtype
- the new type to cast toarg
- the variable to castpublic static void openUCxxNamespace(LanguageWriterForCxx writer)
public static void closeUCxxNamespace(LanguageWriterForCxx writer)
public static java.lang.String prependGlobalUCxx()
public static java.lang.String prependLocalUCxx()
public static java.lang.String getCxxString(Type type, boolean rarrays, Context context) throws CodeGenerationException
CodeGenerationException
public static java.lang.String getReturnString(Type type, Context context) throws CodeGenerationException
type
- the Type
whose return string is being built.CodeGenerationException
public static java.lang.String getRarrayReturnString(Type type, Context context) throws CodeGenerationException
type
- the Type
whose return string is being built.CodeGenerationException
public static java.lang.String getIORCall(java.lang.String objName, Type t)
public static java.lang.String getIORCall(java.lang.String objName, SymbolID id)
public static java.lang.String getLocalIOR(Type t)
public static java.util.List getStubMethodList(Extendable ext)
Method
objectspublic static java.lang.String getMethodImplName(SymbolID id, java.lang.String methodName)
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.public static java.lang.String getMethodSkelName(SymbolID id, java.lang.String methodName)
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.public static java.lang.String getMethodStubName(SymbolID id, java.lang.String methodName, boolean isSuper)
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.public static java.util.Set generateIncludeSet(Extendable ext, Context context) throws CodeGenerationException
CodeGenerationException
public static java.util.Set getFrontIncludes(Extendable ext, Context context) throws CodeGenerationException
writer
- Language writer for C++ext
- Extendible (Class or Interface) to generate dependenciesremoveSelf
- 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.CodeGenerationException
public static java.util.Set generateImplHeaderDependencyIncludes(LanguageWriterForCxx writer, Extendable ext, boolean removeSelf, Context context) throws CodeGenerationException
writer
- Language writer for C++ext
- Extendible (Class or Interface) to generate dependenciesremoveSelf
- 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.CodeGenerationException
public static java.util.Set generateSourceIncludes(LanguageWriterForCxx writer, Extendable ext, Context context) throws CodeGenerationException
writer
- Language writer for C++ext
- Extendible (Class or Interface) to generate dependenciesCodeGenerationException
public static java.util.Set generateImplSourceIncludes(LanguageWriterForCxx writer, Class cls, Context context) throws CodeGenerationException
writer
- Language writer for C++ext
- Extendible (Class or Interface) to generate dependenciesCodeGenerationException
public static java.util.Set generateIncludes(LanguageWriterForCxx writer, Extendable ext, boolean removeSelf, Context context) throws CodeGenerationException
writer
- Language writer for C++ext
- Extendible (Class or Interface) to generate dependenciesremoveSelf
- 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.CodeGenerationException
public static void generateMethodSignature(LanguageWriterForCxx writer, Context context, Method method, java.lang.String altcomment, int role, boolean rarrays, boolean hasInvariants) throws CodeGenerationException
CodeGenerationException
public static void generateInlineMethodSignature(LanguageWriterForCxx writer, Context context, Method method, java.lang.String altcomment, int role, boolean isSuper, boolean rarrays, boolean hasInvariants) throws CodeGenerationException
CodeGenerationException
public static void generateArgumentList(LanguageWriterForCxx writer, Method method, Context context, boolean rarrays, boolean isStub) throws CodeGenerationException
CodeGenerationException
public static void generateThrowsList(LanguageWriterForCxx writer, Method method, boolean canThrowNullIORException, boolean hasInvariants, Context context)
public static java.lang.String generateThrowsList(Method method, boolean canThrowNullIORException, boolean hasInvariants, Context context)
public static void generateExceptionSetSignature(LanguageWriterForCxx writer, SymbolID id, java.util.Set throw_set, int index, boolean stub, boolean isSuper) throws CodeGenerationException
CodeGenerationException
public static void generateExceptionSetBody(LanguageWriterForCxx writer, java.util.Set throw_set, Context context)
public static boolean inlineStub(Method m)
public static java.lang.String generateFunctionDeclaration(Method m, Extendable d_ext, Context context, java.lang.String d_self, boolean isSuper, boolean rarrays) throws CodeGenerationException
CodeGenerationException
public static java.lang.String getIORCacheVariable(Interface ifc)
ifc
- the Interface
the cache variable
name is based on.public static void initializeLocalIOR(LanguageWriterForCxx writer, Interface ifc, java.lang.String self, boolean inList)
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 cacheinList
- True if this initialization is in a C++
initialization list. False prints a normal expression.public static void writeInterfaceCacheInitialization(LanguageWriterForCxx writer, Extendable ext, java.lang.String self) throws CodeGenerationException
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.CodeGenerationException
public static void writeCallsToParentInterfaceConstructors(LanguageWriterForCxx writer, Class cls, java.lang.String self) throws CodeGenerationException
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.CodeGenerationException
public static java.lang.String generateInitialization(Method m, Extendable d_ext, java.lang.String d_self, Context context) throws CodeGenerationException
CodeGenerationException
public static java.lang.String generatePreIORCall(Method m, Extendable d_ext, java.lang.String d_self, boolean isSuper, boolean rarrays, Context context) throws CodeGenerationException
CodeGenerationException
public static java.lang.String generateIORCall(Method m, Extendable d_ext, Context context, java.lang.String d_self, boolean isSuper, boolean rarrays) throws CodeGenerationException
CodeGenerationException
public static java.lang.String generatePostIORCleanup(Method m, boolean rarrays) throws CodeGenerationException
CodeGenerationException
public static java.lang.String generatePostIORCall(Method m, Extendable d_ext, java.lang.String d_self, boolean isSuper, boolean rarrays) throws CodeGenerationException
CodeGenerationException
public static java.util.Map getExceptionSets(java.util.Collection methods)