'''
Created on Mar 5, 2016

@author: claudio gomes
'''

class Utils(object):
    
    @staticmethod
    def copyMapToStateTrace(target, step, iteration, source):
        for var in source:
            Utils.copyValueToStateTrace(target, var, step, iteration, source[var])
    
    @staticmethod
    def getValuesUpToDate(source, vars_to_select, step, iteration):
        result = {}
        for var in vars_to_select:
            # Only up-to-date values go in the calculations.
            # If a calcfunction crash, it's because this FMU is not being used correctly
            if step < len(source[var]):
                if iteration < source[var][step]:
                    result[var] = source[var][step][iteration]
        return result
    
    @staticmethod
    def copyValueToStateTrace(target, var, step, iteration, value):
        assert target.has_key(var)
        if step == len(target[var]):
            target[var].append([value])
        elif iteration == len(target[var][step]):
            target[var][step].append(value)
        else:
            target[var][step][iteration] = value
    
    @staticmethod
    def trimList(listToTrim, target_size):
        assert target_size <= len(listToTrim)
        assert target_size >= 0
        while target_size < len(listToTrim):
            del listToTrim[-1]
        assert target_size == len(listToTrim)