<HTML>
  <HEAD>
    <TITLE>num_anal</TITLE>
  </HEAD>
  <BODY BGCOLOR="#FFFFCC">
    <CENTER>
      
      
      <IMG BORDER=0 SRC="min_head.gif">
      <H1>num_anal</H1>
    </CENTER>
    <H3>MODULE</H3>
    <UL>
        num_anal</UL>
    <H3>MODULE SUMMARY</H3>
    <UL>
        Provides a generic number analyser for dialled numbers</UL>
    <H3>DESCRIPTION</H3>
    <UL>
        <P><CODE>num_anal</CODE> provides functions to create lists of phone numbers which may be analysed on
          on either a longest match or shortest match basis until either a 
          match is made, a match is definitely not made, or no more digits are left. Each new list which is created is
          implemented using a single Mnesia table which may be replicated on a number of Erlang Nodes.
        <P> Within each new table multiple lists of numbers may be built indexed by a grouping called Ref.
          Functions are provided to create new tables, add entries to lists within the table,
          retrieve all lists contained in a table, retrieve all the phone numbers associated with a Ref within a table,
          as well as looking up and deleting entries.
        <P>There are three ways of looking up in the tables best illustrated by an example. e.g. if a table has the following two entries
          <pre>[0,1,8,1] -> outer_london
[0,1,8,1,2,1,4] -> one2one</pre>
        The functions give the following results:
<pre>check(Type, Ref, [0,1,8,1,2,1,4,2,4,1,3]) -> outer_london
longest_match(Type, Ref, [0,1,8,1,2,1,4,2,4,1,3]) -> one2one
exact_match(Type, Ref, [0,1,8,1,2,1,4,2,4,1,3]) -> no_match</pre>
    </UL>
    <H3>EXPORTS</H3>
    <P><STRONG><CODE>new(Type [, node()]) -> {atomic, ok} | {aborted, Reason}</CODE></STRONG><BR>
    <UL>
        <P>This function creates a new table called Type where type must be an atom. e.g. Type could be b_num, for the 
          b-number analysis lists for an application.
          If a list of node names are specified, the table is replicated on all those nodes, otherwise the table is created
          on the local node only.
    </UL>
    <P><STRONG><CODE>check(Type, Ref, Numberlist) -> Result | no_match </CODE></STRONG><BR>
    <UL>
        <P>This function looks up a telephone number in the form <code>[0,1,8,1,2,1,4,2,4,1,3]</code> digit by digit on a shortest match basis. If no match is found returns <code>no_match</code>.
    </UL>
    <P><STRONG><CODE>longest_match(Type, Ref, Numberlist) -> Result | no_match </CODE></STRONG><BR>
    <UL>
        <P>This function looks up a telephone number in the form <code>[0,1,8,1,2,1,4,2,4,1,3]</code> digit by digit on a longest match basis. If no match is found returns <code>no_match</code>.
    </UL>
    <P><STRONG><CODE>exact_match(Type, Ref, Numberlist) -> Result | no_match </CODE></STRONG><BR>
    <UL>
        <P>This function looks up a telephone number in the form <code>[0,1,8,1,2,1,4,2,4,1,3]</code> on an exact match basis. If no match is found returns <code>no_match</code>.
    </UL>

    <P><STRONG><CODE>delete(Type, Ref, Numberlist) -> ok | {error, Reason} </CODE></STRONG><BR>
    <UL>
        <P>This function attempts to delete the entry referenced. If Numberlist is a prefix of a number already
          in the table this command is rejected with Reason trying_to_delete_sublist.
    </UL>
    <P><STRONG><CODE>delete_list(Type, Ref) -> ok | {error, Reason} </CODE></STRONG><BR>
    <UL>
        <P>This function attempts to delete all entries in table Type referenced 
          by Ref.
    </UL>
    <P><STRONG><CODE>insert(Type, Ref, Numberlist, Value) -> ok | {error, Reason} </CODE></STRONG><BR>
    <UL>
        <P>This function attempts to insert the number Numberlist (given as list e.g [0,1,8,1]) into table Type, List Ref, Name.
          Future matches against this number by the check function will return the result Value. If there is not already an entry against Ref it is created automatically.
    </UL>
    <P><STRONG><CODE>print_all(Type, Ref) -> Result | exit() </CODE></STRONG><BR>
    <UL>
        <P>This function returns an erlang list of all {Numberlist, Value} in List Ref
          e.g. 
          <pre>[{[0,1,8,1], outer_london},
 {[0,1,7,1], inner_london}]</pre>
    </UL>

    <H3>KNOWN BUGS</H3>
    <UL>
    Inserting an entry into the table which is a substring of an existing entry will leave a dangling tail in the analysis which may cause unexpected results
    </UL>

    <H3>AUTHORS</H3>
    <UL>
        Sean Hinde, Klacke<BR>
    </UL>
    <CENTER>
      <HR>
      <FONT SIZE=-1>shlib  0.0.1
        <BR>
      </FONT>
    </CENTER>
  </BODY>
</HTML>