Report Functions with their Parameters and Types

Description

This example reports all Functions, with their parameters and types, if any. The return type of the function (if any) is also reported.

Sample Code

1	static void reportFunctionParameters()  { 
2	    UdbEntity    *ents;         
3	    int          entsSize;     
4	    UdbReference *refs;   
5	    int          refsSize;         
6	    int         i,j; 
7	 
8	   udbListEntity(&ents, &entsSize); 
9	   udbListEntityFilter (ents, udbKindParse("function"), &ents, &entsSize);   
10	   printf ("\nFunction (return type) and its Parameters:\n"); 
11	   for (i=0; i<entsSize; i++) { 
12	      printf ("\n %s ", udbEntityNameLong(ents[i]) ); 
13	      if (udbEntityTypetext(ents[i])) 
14	         printf ("(%s)", udbEntityTypetext(ents[i]) ); 
15	      printf ("\n");  
16	      udbListReference(ents[i], &refs, &refsSize);	 
17	      udbListReferenceFilter(refs,  
18	                             udbKindParse("define"), udbKindParse("parameter"), 0, 
19	                             &refs, &refsSize); 
20	      for (j=0; j<refsSize; j++) { 
21	         printf ("   %s %s \n", 
22	                 udbEntityTypetext(udbReferenceEntity(refs[j])), 
23	                 udbEntityNameShort(udbReferenceEntity(refs[j])) ); 
24	      } 
25	     udbListReferenceFree(refs);  
26	  } 
27	   udbListEntityFree(ents); 
28	} 

Explanation of Sample Code

lines 2-3: Declare variables for the list of entities and the list size. In this case, the list will be filtered to include only functions.

lines 4-5: Declare variables for references of a particular entity, in this case a function entity.

line 7: Retrieve the list of all entities.

line 8: Filter the list of all entities to contain only functions, replacing the original entity list with the new filtered list.

line 9: Print the header.

line 10: Loop through all the function entities.

line 11: Print the function name. The longname is printed here which will include the class name (C+) or compilation unit (Ada) where applicable. Alternatively, the short name of the function could be specified instead.

lines 12-13: Print the return type of the function, if any. The return type is the text returned from udbEntityTypetext().

line 15: Retrieve the list of all References for the current function entity.

lines 16-18: Filter the list of References to include only those that define parameters (i.e. contain “define” reference types and “parameter” entity types). The same reference list is used.

line 19: Loop through references, which have been filtered to include only those where parameters are defined.

lines 20-22: Print the parameter type and name.

line 24: Free the list of References.

line 26: Free the list of entities.

Sample Output

Function (return type) and its Parameters: 
 Trace (void) 
 CBmp::DECLARE_DYNAMIC 
 CBmp::CBmp 
 CBmp::~CBmp 
 CBmp::CreateCopy (void) 
   CBmp & rSrcBmp 
   int BPPWanted 
 CBmp::Create (void) 
   LONG Width 
   LONG Height 
   WORD BitsPerPixel 
   BOOL bAlphaChannel 
 CBmp::SetPaletteEntry (void) 
   BYTE Entry 
   BYTE r 
   BYTE g 
   BYTE b 
   BYTE a 
CBmp::GetWidth (int) 
CBmp::GetHeight (int) 
CBmp::GetMemUsed (virtual long) 

Scientific Toolworks, Inc.
http://www.scitools.com