Comparison

util/rfc3484.lua @ 4423:ded726418b16

util.rfc3484: Use a stable sorting algorithm
author Florian Zeitz <florob@babelmonkeys.de>
date Sun, 06 Nov 2011 18:23:16 +0100
parent 4420:4314eeeed394
child 4830:ea907059a90e
comparison
equal deleted inserted replaced
4422:c25dee24623f 4423:ded726418b16
3 -- 3 --
4 -- This project is MIT/X11 licensed. Please see the 4 -- This project is MIT/X11 licensed. Please see the
5 -- COPYING file in the source package for more information. 5 -- COPYING file in the source package for more information.
6 -- 6 --
7 7
8 local t_sort = table.sort;
9 local commonPrefixLength = require"util.ip".commonPrefixLength 8 local commonPrefixLength = require"util.ip".commonPrefixLength
10 local new_ip = require"util.ip".new_ip; 9 local new_ip = require"util.ip".new_ip;
10
11 local function t_sort(t, comp)
12 for i = 1, (#t - 1) do
13 for j = (i + 1), #t do
14 local a, b = t[i], t[j];
15 if not comp(a,b) then
16 t[i], t[j] = b, a;
17 end
18 end
19 end
20 end
11 21
12 function source(dest, candidates) 22 function source(dest, candidates)
13 local function comp(ipA, ipB) 23 local function comp(ipA, ipB)
14 -- Rule 1: Prefer same address 24 -- Rule 1: Prefer same address
15 if dest == ipA then 25 if dest == ipA then
59 t_sort(candidates, comp); 69 t_sort(candidates, comp);
60 return candidates[1]; 70 return candidates[1];
61 end 71 end
62 72
63 function destination(candidates, sources) 73 function destination(candidates, sources)
64 local t_sort = table.sort;
65 local sourceAddrs = {}; 74 local sourceAddrs = {};
66 local function comp(ipA, ipB) 75 local function comp(ipA, ipB)
67 local ipAsource = sourceAddrs[ipA]; 76 local ipAsource = sourceAddrs[ipA];
68 local ipBsource = sourceAddrs[ipB]; 77 local ipBsource = sourceAddrs[ipB];
69 -- Rule 1: Avoid unusable destinations 78 -- Rule 1: Avoid unusable destinations