MapApi::Join( MapApi *, MapApi * ) [static]

Joins two MapApis together to produce a combined mapping.








MapApi *left

the first mapping


MapApi *right

the second mapping


MapApi *

a new MapApi representing the joined maps


This overload of Join() links the right side of the first mapping to the left side of the second mapping, as if the two mappings were laid out left to right and glued together in the middle. The resulting MapApi's left side corresponds to the first mapping’s left side, and its right side corresponds to the second mapping’s right side.

If the right side of the first mapping does not have anything in common with the left side of the second mapping, the resulting map is empty.

The other Join() overload allows more control over which side of each mapping is joined to the other, and the direction of the resulting mapping.

This function allocates a new MapApi object on the heap; the caller is responsible for deleting it.


The following example demonstrates a join between a branch view and a client view.

MapApi branchmap;
branchmap.Insert( StrRef( "//depot/main/..." ), StrRef( "//depot/rel1/...") );

MapApi clientmap;
clientmap.Insert( StrRef( "//depot/..." ), StrRef( "//client/depot/..." ) );

MapApi *branch_to_client = MapApi::Join( &branchmap, &clientmap );

StrBuf source( "//depot/main/file.c" );
StrBuf target;

branch_to_client->Translate( source, target );
printf( "%s -> %s\n", source.Text(), target.Text() );
delete branch_to_client;

This produces the following output:

//depot/main/file.c -> //client/depot/rel1/file.c