private SystemDDs EncodeSingleModule(SingleModuleSystem system, List <int> currentAvailStartBits)
        {
            int    moduleIndex = modules.GetModuleIndex(system.moduleName);
            Module module      = modules.GetModule(moduleIndex);

            SystemDDs result = new SystemDDs();

            //encode not sync command
            result.ind = EncodeModule(moduleIndex, module, string.Empty, 0);

            // build mtbdd for each synchronising action
            for (int i = 0; i < synchs.Count; i++)
            {
                result.synchs.Add(EncodeModule(moduleIndex, module, synchs.ElementAt(i), currentAvailStartBits[i]));
            }

            // store identity matrix
            CUDD.Ref(moduleIdentities[moduleIndex]);
            result.id = moduleIdentities[moduleIndex];

            // store synchs used
            result.allSynchs.UnionWith(module.GetAllSynchs());

            return(result);
        }
        public ModuleState(
            SingleModuleSystem module,
            bool isWorking,
            int?recoveriesLeft)
        {
            RecoveriesLeft = recoveriesLeft;

            IsWorking = isWorking;
            Module    = module;
        }