Skip to content

Commit

Permalink
Merge remote-tracking branch 'remotes/origin/peformance_update'
Browse files Browse the repository at this point in the history
  • Loading branch information
Esko committed May 15, 2018
2 parents e4f2644 + 2a3e1f9 commit cfcc765
Show file tree
Hide file tree
Showing 72 changed files with 2,861 additions and 3,172 deletions.
17 changes: 16 additions & 1 deletion Help/general/expressions.html
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,24 @@ <h3>Operations</h3>
<td>Ceiling of logarithm of base 2</td>
<td>$clog(9) (4)</td>
</tr>
<tr>
<td>$exp()</td>
<td>Exponential function</td>
<td>$exp(2) (0.135335)</td>
</tr>
<tr>
<td>$pow()</td>
<td>Power function</td>
<td>$pow(2, 4) (16)</td>
</tr>
<tr>
<td>$sqrt()</td>
<td>Square root</td>
<td>$sqrt(9) (3)</td>
</tr>
</table>

<p></p>

</body>
</html>
</html>
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,9 @@ bool AbstractionDefinitionValidator::isValidPortAbstraction(QSharedPointer<PortA
}

// Presence must be valid expression if defined.
if (!port->isPresent().isEmpty() && !expressionParser_->isValidExpression(port->isPresent()))
bool isValidPresence = false;
expressionParser_->parseExpression(port->isPresent(), &isValidPresence);
if (isValidPresence == false)
{
return false;
}
Expand All @@ -203,7 +205,9 @@ bool AbstractionDefinitionValidator::isValidPortAbstraction(QSharedPointer<PortA
if (wire)
{
// Default value must be valid expression if defined.
if (!wire->getDefaultValue().isEmpty() && !expressionParser_->isValidExpression(wire->getDefaultValue()))
bool isValidDefaultValue = false;
expressionParser_->parseExpression(wire->getDefaultValue(), &isValidDefaultValue);
if (isValidDefaultValue == false)
{
return false;
}
Expand Down Expand Up @@ -275,7 +279,9 @@ void AbstractionDefinitionValidator::findErrorsInPortAbstraction(QVector<QString
}

// Presence must be valid expression if defined.
if (!port->isPresent().isEmpty() && !expressionParser_->isValidExpression(port->isPresent()))
bool isValidPresence = false;
expressionParser_->parseExpression(port->isPresent(), &isValidPresence);
if (isValidPresence == false)
{
errors.append(QObject::tr("The presence '%1' of port %2 is invalid.")
.arg(port->isPresent(), port->getLogicalName()));
Expand All @@ -301,7 +307,9 @@ void AbstractionDefinitionValidator::findErrorsInPortAbstraction(QVector<QString
if (wire)
{
// Default value must be valid expression if defined.
if (!wire->getDefaultValue().isEmpty() && !expressionParser_->isValidExpression(wire->getDefaultValue()))
bool isValidDefaultValue = false;
expressionParser_->parseExpression(wire->getDefaultValue(), &isValidDefaultValue);
if (isValidDefaultValue == false)
{
errors.append(QObject::tr("Default value '%1' for port %2 is invalid.").arg(wire->getDefaultValue(),
port->getLogicalName()));
Expand Down Expand Up @@ -371,7 +379,9 @@ bool AbstractionDefinitionValidator::isValidTransactionalPort(QSharedPointer<Tra
}

// Bus width must be valid expression if defined.
if (!transPort->getBusWidth().isEmpty() && !expressionParser_->isValidExpression(transPort->getBusWidth()))
bool isValidBusWidth = false;
expressionParser_->parseExpression(transPort->getBusWidth(), &isValidBusWidth);
if (isValidBusWidth == false)
{
return false;
}
Expand Down Expand Up @@ -409,7 +419,9 @@ void AbstractionDefinitionValidator::findErrorsInTransactionalPort(QVector<QStri
}

// Bus width must be valid expression if defined.
if (!transPort->getBusWidth().isEmpty() && !expressionParser_->isValidExpression(transPort->getBusWidth()))
bool isValidBusWidth = false;
expressionParser_->parseExpression(transPort->getBusWidth(), &isValidBusWidth);
if (isValidBusWidth == false)
{
errors.append(QObject::tr("The transactional port bus width '%1' is invalid in %2.").arg(
transPort->getBusWidth(), context));
Expand All @@ -430,7 +442,9 @@ bool AbstractionDefinitionValidator::isValidWirePort(QSharedPointer<WirePort> wi
QSharedPointer<QList<QSharedPointer<PortAbstraction> > > ports) const
{
// Width must be valid expression if defined.
if (!wirePort->getWidth().isEmpty() && !expressionParser_->isValidExpression(wirePort->getWidth()))
bool isValidWidth = false;
expressionParser_->parseExpression(wirePort->getWidth(), &isValidWidth);
if (isValidWidth == false)
{
return false;
}
Expand All @@ -453,7 +467,9 @@ void AbstractionDefinitionValidator::findErrorsInWirePort(QVector<QString>& erro
{

// Width must be valid expression if defined.
if (!wirePort->getWidth().isEmpty() && !expressionParser_->isValidExpression(wirePort->getWidth()))
bool isValidWidth = false;
expressionParser_->parseExpression(wirePort->getWidth(), &isValidWidth);
if (isValidWidth == false)
{
errors.append(QObject::tr("Wire port width '%1' is invalid in %2.").arg(wirePort->getWidth(), context));
}
Expand Down
30 changes: 17 additions & 13 deletions IPXACTmodels/BusDefinition/validators/BusDefinitionValidator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,26 +43,28 @@ BusDefinitionValidator::~BusDefinitionValidator()
//-----------------------------------------------------------------------------
bool BusDefinitionValidator::validate(QSharedPointer<const BusDefinition> busDefinition) const
{
if (!busDefinition->getVlnv().isValid())
if (busDefinition->getVlnv().isValid() == false)
{
return false;
}

if (!busDefinition->getMaxMasters().isEmpty() &&
!expressionParser_->isValidExpression(busDefinition->getMaxMasters()))

bool validMasters = false;
expressionParser_->parseExpression(busDefinition->getMaxMasters(), &validMasters);
if (validMasters == false)
{
return false;
}

if (!busDefinition->getMaxSlaves().isEmpty() &&
!expressionParser_->isValidExpression(busDefinition->getMaxSlaves()))

bool validSlaves = false;
expressionParser_->parseExpression(busDefinition->getMaxSlaves(), &validSlaves);
if (validSlaves == false)
{
return false;
}

foreach (QSharedPointer<Parameter> currentParameter, *busDefinition->getParameters())
{
if (!parameterValidator_->validate(currentParameter))
if (parameterValidator_->validate(currentParameter) == false)
{
return false;
}
Expand All @@ -83,15 +85,17 @@ void BusDefinitionValidator::findErrorsIn(QVector<QString>& errors,
context = QObject::tr("bus definition %1").arg(busDefinition->getVlnv().toString());
}

if (!busDefinition->getMaxMasters().isEmpty() &&
!expressionParser_->isValidExpression(busDefinition->getMaxMasters()))
bool mastersValid = false;
expressionParser_->parseExpression(busDefinition->getMaxMasters(), &mastersValid);
if (mastersValid == false)
{
errors.append(QObject::tr("MaxMasters '%1' is not a valid expression within %2.").arg(
busDefinition->getMaxMasters(), context));
}

if (!busDefinition->getMaxSlaves().isEmpty() &&
!expressionParser_->isValidExpression(busDefinition->getMaxSlaves()))

bool slavesValid = false;
expressionParser_->parseExpression(busDefinition->getMaxSlaves(), &slavesValid);
if (slavesValid == false)
{
errors.append(QObject::tr("MaxSlaves '%1' is not a valid expression within %2.").arg(
busDefinition->getMaxSlaves(), context));
Expand Down
5 changes: 2 additions & 3 deletions IPXACTmodels/Component/validators/AddressSpaceValidator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,7 @@ bool AddressSpaceValidator::segmentHasValidAddressOffset(QSharedPointer<Segment>
if (!segment->getAddressOffset().isEmpty())
{
bool offsetOk = true;
quint64 addressOffset =
expressionParser_->parseExpression(segment->getAddressOffset()).toULongLong(&offsetOk);
expressionParser_->parseExpression(segment->getAddressOffset()).toULongLong(&offsetOk);

return offsetOk;
}
Expand Down Expand Up @@ -460,4 +459,4 @@ void AddressSpaceValidator::findErrorsInParameters(QVector<QString>& errors,
parameterValidator_->findErrorsIn(errors, parameter, context);
}
}
}
}
3 changes: 1 addition & 2 deletions IPXACTmodels/Component/validators/BusInterfaceValidator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -467,8 +467,7 @@ bool BusInterfaceValidator::mirroredSlaveRemapAddressIsValid(
if (!remapAddress->remapAddress_.isEmpty())
{
bool changeOk = true;
quint64 addressInt =
expressionParser_->parseExpression(remapAddress->remapAddress_).toULongLong(&changeOk);
expressionParser_->parseExpression(remapAddress->remapAddress_).toULongLong(&changeOk);

return changeOk;
}
Expand Down
21 changes: 15 additions & 6 deletions IPXACTmodels/Component/validators/CPUValidator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,10 @@ bool CPUValidator::validate(QSharedPointer<Cpu> cpu) const
{
return false;
}
else if (!cpu->getIsPresent().isEmpty() && !expressionParser_->isValidExpression(cpu->getIsPresent()))

bool isValidPresence = false;
expressionParser_->parseExpression(cpu->getIsPresent(), &isValidPresence);
if (isValidPresence == false)
{
return false;
}
Expand Down Expand Up @@ -97,8 +100,10 @@ bool CPUValidator::hasValidAddressSpaceReferences(QSharedPointer<Cpu> cpu) const
{
return false;
}
else if (!currentRef->getIsPresent().isEmpty() &&
!expressionParser_->isValidExpression(currentRef->getIsPresent()))

bool isValidPresence = false;
expressionParser_->parseExpression(currentRef->getIsPresent(), &isValidPresence);
if (isValidPresence == false)
{
return false;
}
Expand All @@ -118,7 +123,9 @@ void CPUValidator::findErrorsIn(QVector<QString>& errors, QSharedPointer<Cpu> cp
errors.append(QObject::tr("Invalid name '%1' set for CPU within %2.").arg(cpu->name()).arg(context));
}

if (!cpu->getIsPresent().isEmpty() && !expressionParser_->isValidExpression( cpu->getIsPresent()))
bool isValidPresence = false;
expressionParser_->parseExpression(cpu->getIsPresent(), &isValidPresence);
if (isValidPresence == false)
{
errors.append(QObject::tr("Is present expression '%1' in cpu %2 is invalid.").arg(
cpu->getIsPresent(), cpu->name()));
Expand All @@ -138,8 +145,10 @@ void CPUValidator::findErrorsIn(QVector<QString>& errors, QSharedPointer<Cpu> cp
currentRef->getAddressSpaceRef(), cpu->name()));
}

if (!currentRef->getIsPresent().isEmpty() &&
!expressionParser_->isValidExpression(currentRef->getIsPresent()))

bool isValidPresence = false;
expressionParser_->parseExpression(currentRef->getIsPresent(), &isValidPresence);
if (isValidPresence == false)
{
errors.append(QObject::tr(
"Is present expression '%1' for address space reference %2 in cpu %3 is invalid."
Expand Down
12 changes: 9 additions & 3 deletions IPXACTmodels/Component/validators/ChannelValidator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,15 @@ bool ChannelValidator::validate(QSharedPointer<Channel> channel) const
{
return false;
}
else if (!channel->getIsPresent().isEmpty() && !expressionParser_->isValidExpression(channel->getIsPresent()))

bool isValidPresence = false;
expressionParser_->parseExpression(channel->getIsPresent(), &isValidPresence);
if (isValidPresence == false)
{
return false;
}
else if (!hasValidBusInterfaceReferences(channel))

if (!hasValidBusInterfaceReferences(channel))
{
return false;
}
Expand Down Expand Up @@ -99,7 +103,9 @@ void ChannelValidator::findErrorsIn(QVector<QString>& errors, QSharedPointer<Cha
.arg(channel->name()).arg(context));
}

if (!channel->getIsPresent().isEmpty() && !expressionParser_->isValidExpression(channel->getIsPresent()))
bool isValidPresence = false;
expressionParser_->parseExpression(channel->getIsPresent(), &isValidPresence);
if (isValidPresence == false)
{
errors.append(QObject::tr("Is present expression '%1' in channel %2 is invalid.").arg(
channel->getIsPresent(), channel->name()));
Expand Down
9 changes: 7 additions & 2 deletions IPXACTmodels/Component/validators/ChoiceValidator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,9 @@ bool ChoiceValidator::hasValidEnumerations(QSharedPointer<Choice> choice) const
{
foreach (QSharedPointer<Enumeration> enumeration, *choice->enumerations())
{
if (!expressionParser_->isValidExpression(enumeration->getValue()))
bool isValidValue = false;
expressionParser_->parseExpression(enumeration->getValue(), &isValidValue);
if (isValidValue == false)
{
return false;
}
Expand Down Expand Up @@ -116,7 +118,10 @@ void ChoiceValidator::findErrorsInEnumerations(QVector<QString>& errors, QShared
{
foreach (QSharedPointer<Enumeration> enumeration, *choice->enumerations())
{
if (!expressionParser_->isValidExpression(enumeration->getValue()))
bool isValidValue = false;
expressionParser_->parseExpression(enumeration->getValue(), &isValidValue);

if (isValidValue == false)
{
errors.append(QObject::tr("Invalid value '%1' set for enumeration in choice '%2' within %3").arg(
enumeration->getValue(), choice->name(), context));
Expand Down
3 changes: 2 additions & 1 deletion IPXACTmodels/Component/validators/FieldValidator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -181,10 +181,11 @@ bool FieldValidator::hasValidReserved(QSharedPointer<Field> field) const
{
if (!field->getReserved().isEmpty())
{
bool isValidReserved = false;
QString solvedValue = expressionParser_->parseExpression(field->getReserved());
int intValue = solvedValue.toInt();

if (!expressionParser_->isValidExpression(field->getReserved()) || intValue < 0 || intValue > 1)
if (isValidReserved == false || intValue < 0 || intValue > 1)
{
return false;
}
Expand Down
10 changes: 7 additions & 3 deletions IPXACTmodels/Component/validators/FileValidator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,10 @@ bool FileValidator::validate(QSharedPointer<File> file) const
{
return false;
}

if (!file->getIsPresent().isEmpty() && !expressionParser_->isValidExpression(file->getIsPresent()))

bool isValidPresence = false;
expressionParser_->parseExpression(file->getIsPresent(), &isValidPresence);
if (isValidPresence == false)
{
return false;
}
Expand Down Expand Up @@ -104,7 +106,9 @@ void FileValidator::findErrorsIn(QVector<QString>& errors, QSharedPointer<File>
errors.append(QObject::tr("The file name '%1' is invalid within %2.").arg(file->name(), context));
}

if (!file->getIsPresent().isEmpty() && !expressionParser_->isValidExpression(file->getIsPresent()))
bool isValidPresence = false;
expressionParser_->parseExpression(file->getIsPresent(), &isValidPresence);
if (isValidPresence == false)
{
errors.append(QObject::tr("The presence '%1' is invalid in file %2.").arg(file->getIsPresent(),
file->name()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ bool IndirectInterfaceValidator::hasValidMemoryMapReference(QSharedPointer<Indir
//-----------------------------------------------------------------------------
bool IndirectInterfaceValidator::hasValidTransparentBridges(QSharedPointer<IndirectInterface> indirectInterface) const
{
unsigned int foundInterfaces = 0;
int foundInterfaces = 0;
foreach (QSharedPointer<TransparentBridge> bridge, *indirectInterface->getTransparentBridges())
{
foreach (QSharedPointer<BusInterface> busInterface, *component_->getBusInterfaces())
Expand All @@ -156,7 +156,9 @@ bool IndirectInterfaceValidator::hasValidBitsInLau(QSharedPointer<IndirectInterf
return true;
}

if (!expressionParser_->isValidExpression(indirectInterface->getBitsInLau()))
bool isValidBits = false;
expressionParser_->parseExpression(indirectInterface->getBitsInLau(), &isValidBits);
if (isValidBits == false)
{
return false;
}
Expand Down
10 changes: 6 additions & 4 deletions IPXACTmodels/Component/validators/InstantiationsValidator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -270,8 +270,8 @@ bool InstantiationsValidator::fileBuilderReplaceDefaultFlagsIsValid(QSharedPoint
QString replaceDefaultFlags = fileBuilder->getReplaceDefaultFlags();
if (!replaceDefaultFlags.isEmpty())
{
bool replaceFlagsOk = expressionParser_->isValidExpression(replaceDefaultFlags);
int replaceFlagsInt = expressionParser_->parseExpression(replaceDefaultFlags).toInt();
bool replaceFlagsOk = false;
int replaceFlagsInt = expressionParser_->parseExpression(replaceDefaultFlags, &replaceFlagsOk).toInt();

return replaceFlagsOk && (replaceFlagsInt == 0 || replaceFlagsInt == 1);
}
Expand Down Expand Up @@ -437,8 +437,10 @@ bool InstantiationsValidator::moduleParameterHasValidUsageType(QSharedPointer<Mo
//-----------------------------------------------------------------------------
bool InstantiationsValidator::moduleParameterHasValidPresence(QSharedPointer<ModuleParameter> parameter) const
{
if ( !parameter->getIsPresent().isEmpty() &&
!expressionParser_->isValidExpression( parameter->getIsPresent() ) )
bool isValidPresence = false;
expressionParser_->parseExpression(parameter->getIsPresent(), &isValidPresence);

if (isValidPresence == false)
{
return false;
}
Expand Down
Loading

0 comments on commit cfcc765

Please sign in to comment.