Пример #1
0
    def ires_get_index(self, cr, index):
        from mcdp_dp.dp_flatten import TakeRes
        from mocdp.comp.wrap import SimpleWrap

        if not cr in self.indexed_res:
            R = self.get_rtype(cr)
            n = len(R.subs)

            # todo: use labels
            if isinstance(R, PosetProductWithLabels):
                rnames = list(R.labels)
            else:
                rnames = ['_r%d' % i for i in range(n)]
            coords = list(range(n))
            dp = TakeRes(R, coords)
            ndp_out = '_muxed'
            ndp = SimpleWrap(dp, fnames=ndp_out, rnames=rnames)
            ndp_name = self.new_name('_indexing')

            self.add_ndp(ndp_name, ndp)
            c = Connection(dp2=ndp_name, s2=ndp_out, dp1=cr.dp, s1=cr.s)
            self.add_connection(c)

            self.indexed_res[cr] = ndp_name

        ndp_name = self.indexed_res[cr]

        ndp = self.names[ndp_name]
        rnames = ndp.get_rnames()
        n = len(rnames)
        s = rnames[index]
        if not (0 <= index < n):
            msg = 'Out of bounds.'
            raise_desc(DPSemanticError, msg, index=index, R=R)

        res = self.make_resource(ndp_name, s)
        return res
Пример #2
0
    def ires_get_index(self, cr, index):
        from mcdp_dp.dp_flatten import TakeRes
        from mocdp.comp.wrap import SimpleWrap

        if not cr in self.indexed_res:
            R = self.get_rtype(cr)
            n = len(R.subs)

            # todo: use labels
            if isinstance(R, PosetProductWithLabels):
                rnames = list(R.labels)
            else:
                rnames = ['_r%d' % i for i in range(n)]
            coords = list(range(n))
            dp = TakeRes(R, coords)
            ndp_out = '_muxed'
            ndp = SimpleWrap(dp, fnames=ndp_out, rnames=rnames)
            ndp_name = self.new_name('_indexing')

            self.add_ndp(ndp_name, ndp)
            c = Connection(dp2=ndp_name, s2=ndp_out, dp1=cr.dp, s1=cr.s)
            self.add_connection(c)

            self.indexed_res[cr] = ndp_name

        ndp_name = self.indexed_res[cr]

        ndp = self.names[ndp_name]
        rnames = ndp.get_rnames()
        n = len(rnames)
        s = rnames[index]
        if not (0 <= index < n):
            msg = 'Out of bounds.'
            raise_desc(DPSemanticError, msg, index=index, R=R)

        res = self.make_resource(ndp_name, s)
        return res