Click here to Skip to main content
15,880,651 members
Articles / Desktop Programming / MFC

Another Enum Viewer

Rate me:
Please Sign up or sign in to vote.
4.50/5 (2 votes)
22 Oct 20015 min read 82.8K   1.3K   19  
An article on the usage and design of another Enum Viewer
// CPPTypeFunctionEllipses.cpp: Implementation for fuction-with-argument modifier.

#include "CPPType.h"
#include "CPPTypeFunction.h"

///////////////////////////////////////////////////////////////////
// Constructor/destructor
///////////////////////////////////////////////////////////////////
CPPTypeFunctionEllipses::CPPTypeFunctionEllipses(
   CPPTypeRefI baseType_,
   bool addToBase
) :
   CPPTypeModifier(FunctionEllipses, baseType_)
{
   // Must modify a function type -- cannot have multiple ellipses
   assert(
      GetBaseType()->GetFlavor() == FunctionReturning ||
      GetBaseType()->GetFlavor() == FunctionArg
   );
   assert(baseType_.get() != 0);
   if (addToBase)
   {
      AddToBase();
   }
}


//virtual
CPPTypeFunctionEllipses::~CPPTypeFunctionEllipses()
{ 
   assertValid(); 
   RemoveFromBase(); 
}


/////////////////////////////////////////////////////////////////
// FormatName: Format the name of the type, using the names of the
// modified types where needed to construct the full type name.
//
// Inputs:
//    const JLStr&  declName   If non-empty, then this is used
//                              to format the declarator name
//                              in the proper position.
//    const JLStr&  suffixStr  Any accumulated suffix string
//    bool          forSpecialization
//                             If true, then the name is formatted
//                             to be suitable in constructing a
//                             specialization scope.
// Return:
//    JLStr    The formatted type name
/////////////////////////////////////////////////////////////////
// virtual 
JLStr 
CPPTypeFunctionEllipses::FormatName(
   const JLStr& declName,
   const JLStr& suffixStr,
   StrListRefI argList,
   bool forSpecialization
) const
{
   assertValid();

   // Since no other function modifiers apply to this one, then
   // prepend a "(...)" to the suffixes.  Any modified function 
   // types will strip the () from the ... if necessary.
   return GetBaseType()->FormatName(
      declName, 
      "(...)" + suffixStr, 
      argList,
      forSpecialization
   );
}

/////////////////////////////////////////////////////////////////
// GetFunctionReturnType: Get the return type of the function type
//
// Inputs: none
// Outputs: none
// Return:
//    CPPTypeRefI   The return type of the function type
/////////////////////////////////////////////////////////////////
CPPTypeRefI 
CPPTypeFunctionEllipses::GetFunctionReturnType() const
{
   return GetBaseType()->GetFunctionReturnType();
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions