Source code for openalea.sconsx.util.hexversion
[docs]
def read_variable(varname, fname):
import re
stream = file(fname, 'r')
text = stream.read()
pattern = '#define\s+?'+varname+'\s+?(.+?)\s*?$'
res = re.findall(pattern, text, re.M)
if not res is None and len(res) > 0:
res = res[0]
try:
res = eval(res)
except:
pass
else : return None
return res
[docs]
def version_from_hex(hex_version):
major = ((hex_version & 0xff0000) >> 16)
minor = ((hex_version & 0x00ff00) >> 8)
rev = (hex_version & 0x0000ff)
return major, minor, rev
[docs]
def hex_from_version(major, minor, revision):
return (major << 16) + (minor << 8) + revision
[docs]
class HexVersion (object):
def __init__(self, value):
self.value = value
def __str__(self):
return hex(self.value)
def __repr__(self):
return hex(self.value)
def __int__(self):
return self.value
def __eq__(self, other):
return self.value == int(other)
def __ne__(self, other):
return self.value != int(other)
def __ge__(self, other):
return self.value >= int(other)
def __gt__(self, other):
return self.value > int(other)
def __le__(self, other):
return self.value <= int(other)
def __lt__(self, other):
return self.value < int(other)
def get_major(self):
return ((self.value & 0xff0000) >> 16)
def set_major(self, value):
self.value = hex_from_version(value, self.get_minor(), self.get_revision())
major = property(get_major, set_major)
def get_minor(self):
return ((self.value & 0x00ff00) >> 8)
def set_minor(self, value):
self.value = hex_from_version(self.get_major(), value, self.get_revision())
minor = property(get_major, set_major)
def get_revision(self):
return (self.value & 0x0000ff)
def set_revision(self, value):
self.value = hex_from_version(self.get_major(), self.get_minor(), value)
revision = property(get_revision, set_revision)
def to_string(self):
return str(self.get_major())+'.'+str(self.get_minor())+'.'+str(self.get_revision())
@staticmethod
def from_cpp_define(define, fname):
return HexVersion(read_variable(define, fname))
@staticmethod
def from_py_variable(variable, fname):
namespace = {}
execfile(fname, namespace, namespace)
return HexVersion(namespace[variable])
@staticmethod
def from_string(strvalue):
numbers = map(int,strvalue.split('.'))
if len(numbers) == 3:
major,minor,revision = numbers
elif len(numbers) == 2:
major,minor = numbers
revision = 0
elif len(numbers) == 1:
major = numbers
minor, revision = 0, 0
else :
raise ValueError(strvalue)
return HexVersion.from_numbers(major, minor, revision)
@staticmethod
def from_numbers(major, minor, revision):
return HexVersion(hex_from_version(major,minor,revision))