clarification needed in this code snippet

MEENA SELVAM <>
Sat Jul 9 17:22:32 CEST 2005


Hi,

I have not understood how the following code
functions:

To me, it appears that in lines 8-9, pattern matching
occurs based on the output of pc_lookup function, and
the unbound variable Cookie gets bound to either
undefined or any other value. Different actions are
taken depending on Cookie value.

But the output of pc_lookup should be a port_cache
record for this to happen.

But according to definition of pc_lookup, the output
is a record of type sac_port_cache.

This is a working code, and I don't follow the
discrepancy in the record type of the output. Can
anyone clarify for me? 
 
1 %% xsp  = {xid(), sid(), int()}

2 -record(port_cache, {xsp, type, dcookie, pcookie}).
3 -define(PC_TAB, sac_port_cache).

...
...

4 init() ->
5    ets:new(?PC_TAB, [set, protected, named_table,
{keypos, #port_cache.xsp}]),

...

6 existing_dyn_sessionp(Switch, Port, Mac) ->
7    XSP = mk_xsp(Switch, Port),
8    case pc_lookup(XSP) of

9	#port_cache{ dcookie = Cookie } when Cookie /=
undefined ->
	    ....

10	#port_cache{ dcookie = Cookie } when Cookie ==
undefined ->
	    .....
11    end.
...
...
12 pc_lookup(XSP) ->
13    case ets:lookup(?PC_TAB, XSP) of
14	[Val] ->
15	    Val;
16	[] ->
17	    not_found
18    end.



		
____________________________________________________
Sell on Yahoo! Auctions – no fees. Bid on great items.  
http://auctions.yahoo.com/



More information about the erlang-questions mailing list