[Dev] An STL challenge
M. Mueller (bhu5nji)
dev@trilug.org
Tue, 12 Mar 2002 01:03:46 -0500
Can you find out why the following code executes the "fatal" line below?
Even though the program segments are incomplete, there is enough information
supplied to locate the the reason.
Enjoy.
Here are the declarations.......
// Route Availability Table declarations
typedef struct {
uint8_t pf PACKED;
uint8_t cls PACKED;
uint8_t b1 PACKED;
uint8_t b2 PACKED;
} t_rtAvail_key_components;
typedef struct {
union {
t_rtAvail_key_components key_components;
uint32_t key;
} u_rtAvail_key;
} t_rtAvail_key;
typedef struct {
e_yes_no ls_available[MAX_LINKS_IN_MTP3_LINKSET];
} t_rtAvailable_entry;
typedef map<uint32_t, t_rtAvailable_entry> t_routeAvailableTable;
-------------------------------------------------------------------------------------------------
here's where the map is loaded......
// make a Route Availability Table entry for this
// combination of PF + CLS if one has not been made already
t_rtAvail_key rtAvail_key;
// make key
rtAvail_key.u_rtAvail_key.key_components.pf = pf;
rtAvail_key.u_rtAvail_key.key_components.cls = cls;
// try to find this key in the table
if (routeAvailTable.find(rtAvail_key.u_rtAvail_key.key) ==
routeAvailTable.end())
{
t_rtAvailable_entry rtAvail_entry;
rtAvail_entry.ls_available[0] = NO;
rtAvail_entry.ls_available[1] = NO;
routeAvailTable[rtAvail_key.u_rtAvail_key.key] = rtAvail_entry;
}
-------------------------------------------------------------------------------------------------
here's where the map is used.....
t_rtAvail_key rtAvail_key;
// make key
rtAvail_key.u_rtAvail_key.key_components.pf = PF_MTP3;
rtAvail_key.u_rtAvail_key.key_components.cls =
p_pdimb->mhdr.src.cls;
// try to find this key in the table
t_routeAvailableTable::iterator ra_i;
ra_i = routeAvailTable.find(rtAvail_key.u_rtAvail_key.key);
if (ra_i == routeAvailTable.end())
{
fatal (
"processMsgFromMtp3:PATH_AVAILBLE/UNAVAILABLE", "Route not in table", 0);
}
else (* ra_i).second.ls_available[p_pdimb->mhdr.src.ls] =
p_pdimb->mhdr.f_id == PATH_AVAILABLE ? YES : NO;
}
--
Mike M.
Support TriLUG. Reply directly for details on how to send a check.
No amount is too small.
Subscribe to all the TriLUG lists at http://trilug.org/mailman/listinfo