Generation fix

This commit is contained in:
Borna Rajković committed 2022-06-27 11:39:13 +02:00
1 parent 6ed60a2c26
commit edfd7fdf37
16 files changed
+108 -121

No files matched your search

+2 -2
View File
@@ -25,8 +25,8 @@ namespace domain {
std::string name;
WireType type;
int width;
bool hidden;
bool hasTerminate;
bool hidden = false;
bool hasTerminate = false;
Value terminateWith;
public:
+20 -6
View File
@@ -128,8 +128,18 @@ namespace domain {
}
void generateConnection(ConnectionInstance *connection, ostream &buffer) {
buffer << "\t\tline {x1:" << connection->start.first << "; y1:" << connection->start.second << "; " <<
"x2:" << connection->end.first << "; y2:" << connection->end.second << ";}" << "\n";
auto x1 = connection->start.first;
auto y1 = connection->start.second;
auto x2 = connection->end.first;
auto y2 = connection->end.second;
buffer << "\t\tpath {\n";
buffer << "\t\t\tx:0; y:0;\n";
buffer << "\t\t\tpoints: (";
buffer << "(" << x1 << ", " << y1 << "),";
buffer << "(" << (x2 - x1) << "," << (y2 - y1) << "));\n";
buffer << "\t\t}" << std::endl;
}
void generateBus(BusInstance *bus, ostream &buffer) {
@@ -149,9 +159,9 @@ namespace domain {
for (auto &bus: schema->busInstances) {
buffer << "\t//" << bus->name << std::endl;
for (auto &wire: bus->bus.getWires()) {
auto name = (wire.isHidden() ? "--" : "") + wire.getName();
auto name = wire.getName();
if (usedNames.count(name) > 0) {
name = (wire.isHidden() ? "--" : "") + bus->name + "__" + wire.getName();
name = bus->name + "__" + wire.getName();
}
usedNames.insert(name);
usedMappings.insert(std::make_pair(bus->name + "." + wire.getName(), name));
@@ -182,7 +192,11 @@ namespace domain {
if (wire.getWidth() != 1) {
buffer << "<" << wire.getWidth() << ">";
}
buffer << " " << name << ";" << std::endl;
buffer << " " << (wire.isHidden() ? "--" : "") << name;
if(wire.hasTerminateWith()) {
buffer << " = " << wire.getTerminateWith().asInt();
}
buffer << ";" << std::endl;
}
std::set<std::string> createImports(Schema *schema) {
@@ -400,4 +414,4 @@ namespace domain {
}
}
} // domain
} // domain
+3 -2
View File
@@ -1,4 +1,5 @@
#include "component.h"
#include <stdexcept>
namespace domain {
@@ -57,7 +58,7 @@ namespace domain {
return p;
}
}
throw std::exception();
throw std::runtime_error("no pin with name '" + pin + "'");
}
bool Component::hasPin(std::string name) {
@@ -79,7 +80,7 @@ namespace domain {
return attr;
}
}
throw std::exception();
throw std::runtime_error("no attribute with name '" + attribute + "'");
}
bool Component::hasAttribute(std::string name, Value::ValueType type) {
+2 -1
View File
@@ -1,4 +1,5 @@
#include "connection.h"
#include <stdexcept>
namespace domain {
@@ -38,7 +39,7 @@ namespace domain {
return attributes[i];
}
}
throw std::exception();
throw std::runtime_error("no attribute with name '" + name + "'");
}
bool Connection::hasAttribute(std::string name) {
+2 -1
View File
@@ -1,4 +1,5 @@
#include "connection_instance.h"
#include <stdexcept>
namespace domain {
@@ -13,7 +14,7 @@ namespace domain {
return attr;
}
}
throw std::exception();
throw std::runtime_error("no attribute with name '" + attribute + "'");
}
+14 -8
View File
@@ -47,7 +47,9 @@ namespace domain {
void ui::Rect::comdel(std::ostream &buffer, int x, int y) {
buffer << "\t\trectangle {\n";
buffer << "\t\t\tx: " << (this->x + x) << "; y: " << (this->y + y) << ";\n";
buffer << "\t\t\tw: " << w << "; h: " << h << ";\n";
buffer << "\t\t\twidth: " << w << "; height: " << h << ";\n";
buffer << "\t\t\tfill_color: " << this->config.fillColor.name().toStdString() << ";\n";
buffer << "\t\t\tline_color: " << this->config.lineColor.name().toStdString() << ";\n";
buffer << "\t\t}\n\n";
}
@@ -61,7 +63,7 @@ namespace domain {
void ui::Ellipse::comdel(std::ostream &buffer, int x, int y) {
buffer << "\t\tellipse {\n";
buffer << "\t\t\tx: " << (this->x + x) << "; y: " << (this->y + y) << ";\n";
buffer << "\t\t\tw: " << w << "; h: " << h << ";\n";
buffer << "\t\t\twidth: " << w << "; height: " << h << ";\n";
buffer << "\t\t}\n\n";
}
@@ -73,10 +75,12 @@ namespace domain {
}
void ui::Line::comdel(std::ostream &buffer, int x, int y) {
buffer << "\t\tline {\n";
buffer << "\t\t\tx1: " << (x1 + x) << "; y1: " << (y1 + y) << ";\n";
buffer << "\t\t\tx2: " << (x2 + x) << "; y2: " << (y2 + y) << ";\n";
buffer << "\t\t}\n\n";
buffer << "\t\tpath {\n";
buffer << "\t\t\tx:0; y:0;\n";
buffer << "\t\t\tpoints: (";
buffer << "(" << (x1 + x) << ", " << (y1 + y) << "),";
buffer << "(" << (x2 - x1) << "," << (y2 - y1) << "));\n";
buffer << "\t\t}" << std::endl;
}
void ui::Bus::render(QGraphicsItemGroup *group, int size) {
@@ -104,10 +108,12 @@ namespace domain {
buffer << "\t\trectangle {\n";
buffer << "\t\t\tx: " << (this->x + x) << "; y: " << (this->y + y) << ";\n";
if (orientation == HORIZONTAL) {
buffer << "\t\t\tw: " << size << "; h: " << h << ";\n";
buffer << "\t\t\twidth: " << size << "; height: " << h << ";\n";
} else {
buffer << "\t\t\tw: " << w << "; h: " << size << ";\n";
buffer << "\t\t\twidth: " << w << "; height: " << size << ";\n";
}
buffer << "\t\t\tfill_color: " << this->config.fillColor.name().toStdString() << ";\n";
buffer << "\t\t\tline_color: " << this->config.lineColor.name().toStdString() << ";\n";
buffer << "\t\t}\n\n";
}
+11 -10
View File
@@ -1,4 +1,5 @@
#include "library.h"
#include <stdexcept>
namespace domain {
@@ -51,7 +52,7 @@ namespace domain {
}
bool Library::hasComponent(std::string name) {
for (uint i = 0; i < components.size(); i++) {
for (unsigned int i = 0; i < components.size(); i++) {
if (components[i].getName() == name) {
return true;
}
@@ -60,7 +61,7 @@ namespace domain {
}
bool Library::hasBus(std::string name) {
for (uint i = 0; i < buses.size(); i++) {
for (unsigned int i = 0; i < buses.size(); i++) {
if (buses[i].getName() == name) {
return true;
}
@@ -70,30 +71,30 @@ namespace domain {
AddressSpace &Library::getAddressSpace(std::string addressSpace) {
for (uint i = 0; i < addressSpaces.size(); i++) {
for (unsigned int i = 0; i < addressSpaces.size(); i++) {
if (addressSpaces[i].getName() == addressSpace) {
return addressSpaces[i];
}
}
throw std::exception();
throw std::runtime_error("no address space with name '" + addressSpace + "'");
}
Component &Library::getComponent(std::string component) {
for (uint i = 0; i < components.size(); i++) {
for (unsigned int i = 0; i < components.size(); i++) {
if (components[i].getName() == component) {
return components[i];
}
}
throw std::exception();
throw std::runtime_error("no component with name '" + component + "'");
}
Bus &Library::getBus(std::string bus) {
for (uint i = 0; i < buses.size(); i++) {
for (unsigned int i = 0; i < buses.size(); i++) {
if (buses[i].getName() == bus) {
return buses[i];
}
}
throw std::exception();
throw std::runtime_error("no bus with name '" + bus + "'");
}
@@ -102,7 +103,7 @@ namespace domain {
}
std::optional<Connection> Library::getConnection(ConnectionComponent component, std::string bus) {
for (uint i = 0; i < connections.size(); i++) {
for (unsigned int i = 0; i < connections.size(); i++) {
if (connections[i].isConnecting(component, bus)) {
return connections[i];
}
@@ -116,7 +117,7 @@ namespace domain {
std::optional<Connection>
Library::getConnection(ConnectionComponent component, std::string bus, ConnectionComponent secondComponent) {
for (uint i = 0; i < connections.size(); i++) {
for (unsigned int i = 0; i < connections.size(); i++) {
if (connections[i].isConnecting(component, bus, secondComponent)) {
return connections[i];
}
+1 -1
View File
@@ -882,7 +882,7 @@ namespace domain {
if (validator->getName() == function) {
if (validator->getSignature().size() == node.params.size()) {
std::vector<Value> params;
for (uint j = 0; j < validator->getSignature().size(); j++) {
for (unsigned int j = 0; j < validator->getSignature().size(); j++) {
bool exists = false;
auto type = toType(node.params[j]);
if (type.getType() == Value::UNDEFINED) {
+37 -10
View File
@@ -1,6 +1,7 @@
#include "value.h"
#include <string>
#include <stdexcept>
namespace domain {
@@ -44,32 +45,58 @@ namespace domain {
return type == _type;
}
std::string Value::getTypename() {
switch (type) {
case Value::BOOL:
return "bool";
case Value::INT:
return "int";
case Value::STRING:
return "string";
case Value::ADDRESS_SPACE:
case Value::ADDRESS_SPACE_REFERENCE:
return "address space";
case Value::WIRE_REFERENCE:
return "wire reference";
case Value::ATTRIBUTE_REFERENCE:
return "attribute";
case Value::NIL:
return "null";
case Value::MEMORY:
case Value::MEMORY_REFERENCE:
return "memory";
case Value::UNDEFINED:
return "undefined";
}
return "unknown";
}
long long Value::asInt() {
if (isType(Value::INT)) {
return intValue;
}
throw std::exception();
throw std::runtime_error("expected 'int' but value contains '" + getTypename() + "'");
}
std::string Value::asString() {
if (isType(Value::STRING)) {
return stringValue;
}
throw std::exception();
throw std::runtime_error("expected 'string' but value contains '" + getTypename() + "'");
}
bool Value::asBool() {
if (isType(Value::BOOL)) {
return boolValue;
}
throw std::exception();
throw std::runtime_error("expected 'bool' but value contains '" + getTypename() + "'");
}
AddressSpace Value::asAddressSpace() {
if (isType(Value::ADDRESS_SPACE)) {
return *addressSpace;
}
throw std::exception();
throw std::runtime_error("expected 'address space' but value contains '" + getTypename() + "'");
}
std::string Value::asReference() {
@@ -77,7 +104,7 @@ namespace domain {
isType(Value::ATTRIBUTE_REFERENCE) || isType(Value::UNDEFINED)) {
return reference;
}
throw std::exception();
throw std::runtime_error("expected 'reference' but value contains '" + getTypename() + "'");
}
std::optional<std::string> Value::asMemoryReference() {
@@ -93,7 +120,7 @@ namespace domain {
if (isType(Value::INT)) {
this->intValue = value;
} else {
throw std::exception();
throw std::runtime_error("expected to set 'int' but value contains '" + getTypename() + "'");
}
}
@@ -101,7 +128,7 @@ namespace domain {
if (isType(Value::STRING)) {
this->stringValue = value;
} else {
throw std::exception();
throw std::runtime_error("expected to set 'string' but value contains '" + getTypename() + "'");
}
}
@@ -109,7 +136,7 @@ namespace domain {
if (isType(Value::BOOL)) {
this->boolValue = value;
} else {
throw std::exception();
throw std::runtime_error("expected to set 'bool' but value contains '" + getTypename() + "'");
}
}
@@ -117,7 +144,7 @@ namespace domain {
if (isType(Value::WIRE_REFERENCE)) {
this->reference = value;
} else {
throw std::exception();
throw std::runtime_error("expected to set 'wire' but value contains '" + getTypename() + "'");
}
}
@@ -191,7 +218,7 @@ namespace domain {
return "null";
}
default:
throw std::exception();
throw std::runtime_error("unknown type couldn't stringify '" + getTypename() + "'");
}
}
+1
View File
@@ -46,6 +46,7 @@ namespace domain {
bool equals(Value value);
std::string string();
std::string getTypename();
ValueType getType();