lf = LogicFunction::fromArray($a["function"]); } else if (isset($a["expression"], $a["input_variables"])) { // building from the scratch $this->lf = new LogicFunction($a["expression"], $a["input_variables"]); } else { $this->lf = new LogicFunction(); } $this->output_variable = $a["output_variable"] ?? "f"; } public function setOutputVariable(string $ovar): void { $this->output_variable = $ovar; } public function getOutputVariable(): string { return $this->output_variable; } public function setLogicFunction(LogicFunction $lf): void { $this->lf = $lf; } public function getLogicFunction(): LogicFunction { return $this->lf; } protected function getTTDiffCntToCA(string $ott): int { $cans_tt = $this->getTruthTable(); $errs = 0; for ($i = 0; $i < $this->getLogicFunction()->getNStates(); $i++) { if (($ott[$i] ?? " ") != $cans_tt[$i]) { $errs++; } } return $errs; } public function toArray(string $mode = "all"): array { $a = parent::toArray($mode); if ($mode === "all") { $a["function"] = $this->lf->toArray(); } $a["output_variable"] = $this->output_variable; $a["input_variables"] = $this->lf->getInputVars(); return $a; } public function randomize(): void { parent::randomize(); if ($this->hasFlag("drawnetwork")) { $this->setImageData($this->lf->drawNetwork($this->output_variable)); $this->setImageType("html"); } } // ---- Lua specific ---- public function generateRandomFunction(array $input_vars, int $min_depth, int $max_depth): void { $this->lf = LogicFunction::genRandom(LuaUtils::l2pA($input_vars), $min_depth, $max_depth); } public function generateRandomDF(array $input_vars): void { $this->lf = LogicFunction::genRandomDNF(LuaUtils::l2pA($input_vars)); } public function setLogicFunctionExpr(string $expr, array $input_vars = []): void { $this->lf = new LogicFunction($expr, LuaUtils::l2pA($input_vars)); } public function getLogicFunctionExpr(string $fmt = "verilog_bitwise"): string { return $this->lf->getExpression($fmt); } public function getLogicFunctionDNF(): string { return $this->lf->toDNF(); } public function getTruthTable(): string { return $this->lf->getTruthTable(); } }