Ticket #15: computable_parameter.patch

File computable_parameter.patch, 1.9 KB (added by ludovic.lhours@…, 15 years ago)
  • utils/lib/python/soclib_desc/parameter.py

     
    167169                r = Base.instValue(self, env, param)
    168170                return r.ref()
    169171
    170 class Reference:
     172class Unresolved:
     173        def __mul__(self, other):
     174                return Operation((lambda a,b: int(a) * int(b)),
     175                                [self, makeValue(other)])
     176
     177class Value(Unresolved):
     178        def __init__(self, value):
     179                self.value = value
     180        def getValue(self, args):
     181                return self.value
     182
     183def makeValue(a):
     184        if isinstance(a, Unresolved):
     185                return a
     186        return Value(a)
     187
     188class Reference(Unresolved):
    171189        def __init__(self, name, mode = 'val'):
    172190                self.__name = name
    173191                self.__mode = mode
     
    183201                else:
    184202                        raise ValueError("Unsupported mode %s for parameter.Reference"%self.__mode)
    185203
     204class Template(Unresolved):
     205        def __init__(self, name, args):
     206                self.name = makeValue(name)
     207                self.args = map(lambda x: makeValue(x), args)
     208        def getValue(self, args):
     209                params = ', '.join(map(lambda x:str(x.getValue(args)), self.args))
     210                return self.name.getValue(args) + '<' + params + ' > '
     211
     212class Operation(Unresolved):
     213        def __init__(self, func, args):
     214                self.func = func
     215                self.args = args
     216                pass
     217        def getValue(self, args):
     218                return apply(self.func, map(lambda x:str(x.getValue(args)), self.args))
     219
    186220class Constant:
    187221        def __init__(self, name):
    188222                self.__name = name
  • utils/lib/python/soclib_desc/module.py

     
    185190                import parameter
    186191                for k in args.iterkeys():
    187192                        v = args[k]
    188                         if isinstance(v, parameter.Reference):
     193                        if isinstance(v, parameter.Unresolved):
    189194                                args[k] = v.getValue(args)