# $Id$

import socket
import re

class ip_address(object):

  def __init__(self, text):
    self.addr = socket.inet_pton(self.af, text)

  def __str__(self):
    return socket.inet_ntop(self.af, self.addr)

  def __eq__(self, other):
    return self.addr == other.addr

  def __hash__(self):
    return self.addr.__hash__()

class ipv4_address(ip_address):
  af = socket.AF_INET

class ipv6_address(ip_address):
  af = socket.AF_INET6

class resource(object):
  pass

class asn(resource, long):
  pass

class ip_prefix(resource):

  def __init__(self, addr, prefixlen):
    self.addr = self.ac(addr)
    self.prefixlen = prefixlen

  def __str__(self):
    return str(self.addr) + "/" + str(self.prefixlen)

  def __eq__(self, other):
    return self.addr == other.addr and self.prefixlen == other.prefixlen

  def __hash__(self):
    return self.addr.__hash__() + self.prefixlen.__hash__()

class ipv4_prefix(ip_prefix):
  ac = ipv4_address

class ipv6_prefix(ip_prefix):
  ac = ipv6_address

class resource_range(resource):

  def __init__(self, min, max):
    assert isinstance(min, resource) and isinstance(max, resource)
    self.min = min
    self.max = max

  def __str__(self):
    return str(self.min) + "-" + str(self.max)

  def __eq__(self, other):
    return self.min == other.min and self.max == other.max

  def __hash__(self):
    return self.min.__hash__() + self.max.__hash__()

class resource_set(set):

  def __init__(self, *elts):
    for e in elts:
      assert isinstance(e, resource)
    set.__init__(self, elts)

  def __str__(self):
    s = [i for i in self]
    s.sort()
    return "{" + ", ".join(map(str, s)) + "}"

s = resource_set(ipv6_prefix("fe80::", 16), ipv4_prefix("10.0.0.44", 32), ipv4_prefix("10.3.0.44", 32))

print s
9bd056505f669'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/sra/rpki.net/blame/?id=55494ccab6dbdbd2fa538f762359bd056505f669'>root</a>/<a href='/sra/rpki.net/blame/rcynic?id=55494ccab6dbdbd2fa538f762359bd056505f669'>rcynic</a>/<a href='/sra/rpki.net/blame/rcynic/README?id=55494ccab6dbdbd2fa538f762359bd056505f669'>README</a></div><div class='content'>blob: ecc92ac504888db60c5b29fd2b2419fd583648b9 (<a href='/sra/rpki.net/plain/rcynic/README?id=55494ccab6dbdbd2fa538f762359bd056505f669'>plain</a>) (<a href='/sra/rpki.net/tree/rcynic/README?id=55494ccab6dbdbd2fa538f762359bd056505f669'>tree</a>)
<table class='blame blob'>
<tr>
<td class='hashes'><div class='alt'><pre><span class='sha1'><a title='author  Rob Austein &lt;sra@hactrn.net&gt;  2012-04-16 20:32:12 +0000
committer  Rob Austein &lt;sra@hactrn.net&gt;  2012-04-16 20:32:12 +0000

Clean up README files.  Mostly this means changing them to pointers to' href='/sra/rpki.net/commit/rcynic/README?id=2d26c4f5e632286cf6a75e20229f95fa799f5147'>2d26c4f5</a></span>
</pre></div><div class='alt'><pre><span class='sha1'><a title='author  Rob Austein &lt;sra@hactrn.net&gt;  2006-09-27 18:18:53 +0000
committer  Rob Austein &lt;sra@hactrn.net&gt;  2006-09-27 18:18:53 +0000

Document for somebody other than myself' href='/sra/rpki.net/commit/rcynic/README?id=224ff3949f29dfbafed60aac6c833f2d2d1a8072'>224ff394</a></span>


</pre></div><div class='alt'><pre><span class='sha1'><a title='author  Rob Austein &lt;sra@hactrn.net&gt;  2012-04-16 20:32:12 +0000
committer  Rob Austein &lt;sra@hactrn.net&gt;  2012-04-16 20:32:12 +0000

Clean up README files.  Mostly this means changing them to pointers to' href='/sra/rpki.net/commit/rcynic/README?id=2d26c4f5e632286cf6a75e20229f95fa799f5147'>2d26c4f5</a></span>
</pre></div><div class='alt'><pre><span class='sha1'><a title='author  Rob Austein &lt;sra@hactrn.net&gt;  2006-09-27 18:18:53 +0000
committer  Rob Austein &lt;sra@hactrn.net&gt;  2006-09-27 18:18:53 +0000

Document for somebody other than myself' href='/sra/rpki.net/commit/rcynic/README?id=224ff3949f29dfbafed60aac6c833f2d2d1a8072'>224ff394</a></span>
</pre></div><div class='alt'><pre><span class='sha1'><a title='author  Rob Austein &lt;sra@hactrn.net&gt;  2012-04-16 20:32:12 +0000
committer  Rob Austein &lt;sra@hactrn.net&gt;  2012-04-16 20:32:12 +0000

Clean up README files.  Mostly this means changing them to pointers to' href='/sra/rpki.net/commit/rcynic/README?id=2d26c4f5e632286cf6a75e20229f95fa799f5147'>2d26c4f5</a></span>
</pre></div><div class='alt'><pre><span class='sha1'><a title='author  Rob Austein &lt;sra@hactrn.net&gt;  2006-09-27 18:18:53 +0000
committer  Rob Austein &lt;sra@hactrn.net&gt;  2006-09-27 18:18:53 +0000

Document for somebody other than myself' href='/sra/rpki.net/commit/rcynic/README?id=224ff3949f29dfbafed60aac6c833f2d2d1a8072'>224ff394</a></span>
</pre></div><div class='alt'><pre><span class='sha1'><a title='author  Rob Austein &lt;sra@hactrn.net&gt;  2012-04-16 20:32:12 +0000
committer  Rob Austein &lt;sra@hactrn.net&gt;  2012-04-16 20:32:12 +0000

Clean up README files.  Mostly this means changing them to pointers to' href='/sra/rpki.net/commit/rcynic/README?id=2d26c4f5e632286cf6a75e20229f95fa799f5147'>2d26c4f5</a></span>
</pre></div><div class='alt'><pre><span class='sha1'><a title='author  Rob Austein &lt;sra@hactrn.net&gt;  2006-09-27 18:18:53 +0000
committer  Rob Austein &lt;sra@hactrn.net&gt;  2006-09-27 18:18:53 +0000

Document for somebody other than myself' href='/sra/rpki.net/commit/rcynic/README?id=224ff3949f29dfbafed60aac6c833f2d2d1a8072'>224ff394</a></span>
</pre></div><div class='alt'><pre><span class='sha1'><a title='author  Rob Austein &lt;sra@hactrn.net&gt;  2012-04-16 20:32:12 +0000
committer  Rob Austein &lt;sra@hactrn.net&gt;  2012-04-16 20:32:12 +0000

Clean up README files.  Mostly this means changing them to pointers to' href='/sra/rpki.net/commit/rcynic/README?id=2d26c4f5e632286cf6a75e20229f95fa799f5147'>2d26c4f5</a></span>
</pre></div><div class='alt'><pre><span class='sha1'><a title='author  Rob Austein &lt;sra@hactrn.net&gt;  2006-09-27 18:18:53 +0000
committer  Rob Austein &lt;sra@hactrn.net&gt;  2006-09-27 18:18:53 +0000

Document for somebody other than myself' href='/sra/rpki.net/commit/rcynic/README?id=224ff3949f29dfbafed60aac6c833f2d2d1a8072'>224ff394</a></span>
</pre></div><div class='alt'><pre><span class='sha1'><a title='author  Rob Austein &lt;sra@hactrn.net&gt;  2012-04-16 20:32:12 +0000
committer  Rob Austein &lt;sra@hactrn.net&gt;  2012-04-16 20:32:12 +0000

Clean up README files.  Mostly this means changing them to pointers to' href='/sra/rpki.net/commit/rcynic/README?id=2d26c4f5e632286cf6a75e20229f95fa799f5147'>2d26c4f5</a></span>
</pre></div></td>
<td class='linenumbers'><div class='alt'><pre><a id='n1' href='#n1'>1</a>
</pre></div><div class='alt'><pre><a id='n2' href='#n2'>2</a>
<a id='n3' href='#n3'>3</a>
<a id='n4' href='#n4'>4</a>
</pre></div><div class='alt'><pre><a id='n5' href='#n5'>5</a>
</pre></div><div class='alt'><pre><a id='n6' href='#n6'>6</a>
</pre></div><div class='alt'><pre><a id='n7' href='#n7'>7</a>
</pre></div><div class='alt'><pre><a id='n8' href='#n8'>8</a>
</pre></div><div class='alt'><pre><a id='n9' href='#n9'>9</a>
</pre></div><div class='alt'><pre><a id='n10' href='#n10'>10</a>
</pre></div><div class='alt'><pre><a id='n11' href='#n11'>11</a>
</pre></div><div class='alt'><pre><a id='n12' href='#n12'>12</a>
</pre></div><div class='alt'><pre><a id='n13' href='#n13'>13</a>
</pre></div></td>
<td class='lines'><div><div><div class='alt'><pre>
    </pre></div><div class='alt'><pre>


                                                        </pre></div><div class='alt'><pre>
                                                       </pre></div><div class='alt'><pre>
 </pre></div><div class='alt'><pre>
    </pre></div><div class='alt'><pre>
 </pre></div><div class='alt'><pre>
                                                     </pre></div><div class='alt'><pre>
 </pre></div><div class='alt'><pre>
                                         </pre></div><div class='alt'><pre>
 </pre></div><div class='alt'><pre>
                                              </pre></div></div><pre><code>