Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | Related Pages

gBits.py

00001 #!/usr/local/bin/python
00002 #
00003 #                               Copyright 2004
00004 #                                     by
00005 #                        The Board of Trustees of the
00006 #                     Leland Stanford Junior University.
00007 #                            All rights reserved.
00008 #
00009 
00010 
00011 __facility__ = "Online"
00012 __abstract__ = "Bit field utility methods"
00013 __author__   = "Selim Tuvi <stuvi@slac.stanford.edu> SLAC - GLAST I&T/Online"
00014 __date__     = ("$Date: 2004/12/09 02:08:39 $").split(' ')[1]
00015 __version__  = "$Revision: 2.5 $"
00016 __release__  = "$Name: R04-12-00 $"
00017 __credits__  = "SLAC"
00018 
00019 import LATTE.copyright_SLAC
00020 
00021 import sys
00022 import string
00023 import inspect
00024 import struct
00025 
00026 class bf(object):
00027   def __init__(self,value=0L):
00028     self._d = long(value)
00029 
00030   def set(self, value):
00031     self._d = long(value)
00032 
00033   def __getitem__(self, index):
00034     return (self._d >> index) & 1
00035 
00036   def __setitem__(self,index,value):
00037     value    = (value&1L)<<index
00038     mask     = 1L<<index
00039     self._d  = (self._d & ~mask) | value
00040 
00041   def __getslice__(self, start, end):
00042     mask = 2**(end - start) -1
00043     return (self._d >> start) & mask
00044 
00045   def __setslice__(self, start, end, value):
00046     mask = 2**(end - start) -1
00047     value = (long(value) & mask) << start
00048     mask = mask << start
00049     self._d = (self._d & ~mask) | value
00050     return (self._d >> start) & mask
00051 
00052   def getOnBits(self):
00053     value = self._d
00054     i = 0
00055     bits = []
00056     while value != 0:
00057       bit = value & 1L
00058       if bit: bits.append(i)
00059       value = value >> 1
00060       i+=1
00061     return bits
00062 
00063   def __int__(self):
00064     return self._d
00065 
00066   def __str__(self):
00067     return str(self._d)
00068 
00069 class BitField(object):
00070   def __init__(self, ui, bf_def):
00071     self.bf_ui = bf(ui)
00072     self.bf_def = bf_def
00073 
00074   def set(self, ui):
00075     self.bf_ui.set(ui)
00076 
00077   def __setattr__(self, attribute, val):
00078     if attribute == 'ui':
00079       self.__dict__['bf_ui'] = bf(val)
00080       return
00081     elif attribute in ('bf_ui', 'bf_def'):
00082       self.__dict__[attribute] = val
00083       return
00084     else:
00085       for (bitField, fromBit, toBit) in self.bf_def:
00086         if attribute.lower() == bitField:
00087           self.bf_ui[fromBit:toBit] = val
00088           return
00089     self.__dict__[attribute] = val
00090 
00091   def __getattr__(self, attribute):
00092     if attribute == 'ui':
00093       return int(self.__dict__['bf_ui'])
00094     elif attribute in ('bf_ui', 'bf_def'):
00095       return self.__dict__[attribute]
00096     else:
00097       for (bitField, fromBit, toBit) in self.bf_def:
00098         if attribute == bitField:
00099           return self.bf_ui[fromBit:toBit]
00100     return self.__dict__[attribute]
00101 
00102   def __int__(self):
00103     return int(self.__dict__['bf_ui'])
00104 
00105   def __str__(self):
00106     return str(self.__dict__['bf_ui'])
00107 
00108 
00109 def hexConvert(s, size=1, outPutStyle="0x%s "):
00110   """
00111   Convert binary string s
00112   to a hex format
00113 
00114   Keyword arguments:
00115 
00116   'size'        -- How large should each hex value be
00117 
00118   'outPutStyle' -- How should each value be formatted
00119   """
00120   res=[]
00121   while s:
00122       temp=s[:size]
00123       s=s[size:]
00124       l=[]
00125       for i in temp:
00126           l.append("%02x"%ord(i))
00127       val=string.join(l,'')
00128       res.append(outPutStyle%val)
00129   return string.join(res,'')
00130 
00131 def lhex(x, size=8):
00132   xs = string.lower(hex(x))
00133   l = len(xs)
00134   if xs[l-1] == "l":
00135     xs = xs[2:l-1]
00136   else:
00137     xs = xs[2:l]
00138   l = len(xs)
00139   xs = '0'*(size-l) + xs
00140   return xs
00141 
00142 def q(cond,on_true,on_false):
00143   if cond:
00144     if not inspect.isfunction(on_true):
00145       return on_true
00146     else:
00147       return apply(on_true)
00148   else:
00149     if not inspect.isfunction(on_false):
00150       return on_false
00151     else:
00152       return apply(on_false)
00153 
00154 def dump_cells(data):
00155   fmt = '!%dI' %(len(data) >> 2)
00156   words = struct.unpack(fmt, data)
00157   counter = 0
00158   for word in words:
00159     if ((counter%4) == 0): print '\n  ',
00160     print '0x%08x' %(word),
00161     counter += 1
00162   print
00163 
00164 def population(mask):
00165   n = 0
00166   while (mask != 0):
00167     n = n+1
00168     mask = mask & (mask-1)
00169   return n

Generated on Fri Jul 21 13:26:28 2006 for LATTE R04-12-00 by doxygen 1.4.3