Compress support function definitions a bit

This commit is contained in:
Nick Gasson 2008-07-19 21:04:52 +01:00
parent af3ee49f57
commit 38de6ebf3a
3 changed files with 22 additions and 28 deletions

View File

@ -64,41 +64,27 @@ void support_function::emit(std::ostream &of, int level) const
switch (type_) {
case SF_UNSIGNED_TO_BOOLEAN:
of << "(X : unsigned) return Boolean is";
newline(of, level);
of << "begin";
newline(of, indent(level));
of << "return X /= To_Unsigned(0, X'Length);";
newline(of, level);
of << "(X : unsigned) return Boolean is" << nl_string(level)
<< "begin" << nl_string(indent(level))
<< "return X /= To_Unsigned(0, X'Length);" << nl_string(level);
break;
case SF_SIGNED_TO_BOOLEAN:
of << "(X : signed) return Boolean is";
newline(of, level);
of << "begin";
newline(of, indent(level));
of << "return X /= To_Signed(0, X'Length);";
newline(of, level);
of << "(X : signed) return Boolean is" << nl_string(level)
<< "begin" << nl_string(indent(level))
<< "return X /= To_Signed(0, X'Length);" << nl_string (level);
break;
case SF_BOOLEAN_TO_LOGIC:
of << "(B : Boolean) return std_logic is";
newline(of, level);
of << "begin";
newline(of, indent(level));
of << "if B then";
newline(of, indent(indent(level)));
of << "return '1'";
newline(of, indent(level));
of << "else";
newline(of, indent(indent(level)));
of << "return '0'";
newline(of, indent(level));
of << "end if;";
newline(of, level);
of << "(B : Boolean) return std_logic is" << nl_string(level)
<< "begin" << nl_string(indent(level))
<< "if B then" << nl_string(indent(indent(level)))
<< "return '1'" << nl_string(indent(level))
<< "else" << nl_string(indent(indent(level)))
<< "return '0'" << nl_string(indent(level))
<< "end if;" << nl_string(level);
break;
default:
assert(false);
}
of << "end function;";
newline(of, level);
of << "end function;" << nl_string(level);
}

View File

@ -35,6 +35,13 @@ int indent(int level)
return level + VHDL_INDENT;
}
std::string nl_string(int level)
{
std::ostringstream ss;
newline(ss, level);
return ss.str();
}
/*
* Emit a newline and indent to the correct level.
*/

View File

@ -49,6 +49,7 @@ typedef std::list<vhdl_element*> element_list_t;
int indent(int level);
void newline(std::ostream &of, int level);
std::string nl_string(int level);
void blank_line(std::ostream &of, int level);
#endif