Example #1
0
void ADC::initPins()
{

    int numBits = propertyByName("numBits")->value().toInt();
        // dataInt("numBits");

	if ( numBits < 2 )
		numBits = 2;
	else if ( numBits > max_ADDAC_bits )
		numBits = max_ADDAC_bits;

	if ( numBits == m_numBits )
		return;

	QStringList pins;

	int inPos = (numBits - 1 + (numBits % 2)) / 2;
	for(int i=0; i < inPos; ++i)
		pins += "";

	pins += "In";

	for(int i = inPos + 1; i < numBits; ++i)
		pins += "";

	for(int i = numBits - 1; i >= 0; --i)
		pins += QString::number(i);

//	if(!m_realNode)
//		m_realNode =  ecNodeWithID("In");

	if(numBits > m_numBits) {
		for(int i = m_numBits; i < numBits; ++i) {

			m_logic[i] = new LogicOut(LogicConfig(), false);
		}
	} else {
		for(int i = numBits; i < m_numBits; ++i) {
			QString id = QString::number(i);
            // FIXME cleanup of elements: logic outs and pins
            /*
			removeDisplayText(id);
			removeElement(m_logic[i], false);
			removeNode(id);
            */
			m_logic[i] = 0;
		}
	}
	m_numBits = numBits;
}
Example #2
0
void DAC::initPins()
{
    int numBits = propertyByName("numBits")->value().toInt();
            // FIXME dataInt("numBits");

	if(numBits < 2) numBits = 2;
	else if(numBits > max_ADDAC_bits)
		numBits = max_ADDAC_bits;

	if(numBits == m_numBits) return;

	QStringList pins;

	for(int i = 0; i < numBits; ++i)
		pins += QString::number(i);

	int inPos = (numBits + 1 + (numBits % 2)) / 2;
	for(int i = numBits - 1; i >= inPos; --i)
		pins += "";

	pins += "Out";

	for(int i = inPos - 2; i >= 0; --i)
		pins += "";

	if(numBits > m_numBits) {
		for(int i = m_numBits; i < numBits; ++i)
		{
			m_logic[i] = new LogicIn(LogicConfig());
		}
	} else {
		for(int i = numBits; i < m_numBits; ++i)
		{
			QString id = QString::number(i);
            // FIXME element removal
            /*
			removeDisplayText(id);
			removeElement(m_logic[i], false);
			removeNode(id);
            */
			m_logic[i] = 0;
		}
	}

	m_numBits = numBits;
}
void ClassTemplate::resolveStringProperty(ClassProperty *aProperty, QSet<ClassProperty *> &aCleanSet,
										  QSet<ClassProperty *> &aCallstack, QSet<ClassProperty *>aAll)
{
	//qDebug() << "resolveStringProperty " << aProperty->name();
	if(aCallstack.contains(aProperty))
	{
		qDebug() << "Property tokens circular dependency! " + aProperty->name();
		return;
	}

	if(aCleanSet.contains(aProperty))
	{
		//resolved already
		return;
	}

	QString value = aProperty->defaultValue();
	if((!value.contains("{") && !value.contains("}")) || aProperty->isConst())
	{
		aCleanSet.insert(aProperty);
		if(!aProperty->isConst())
			initializationSection_ +=
				"\t" + aProperty->name() + " = " + wrap(value) + ";\n";
		//nothing to resolve
		return;
	}

	QRegularExpression token("\\{([^\\}]+)\\}");
	QString temp = value;
	QRegularExpressionMatchIterator i = token.globalMatch(value);
	while (i.hasNext())
	{
		QRegularExpressionMatch match = i.next();
		QString toReplace = match.captured(0);
		if(toReplace == "{a}")
			continue;//skipping article
		QString token = toReplace;
		token = token.replace("{", "");
		token = token.replace("}", "");
		ClassProperty *property = propertyByName(token, aAll);
		if(!property)
		{
			temp = temp.replace(toReplace, "\" + " + toCamelCase(token, false) + "() + \"");
		}
		else if(aCleanSet.contains(property))
		{
			temp = temp.replace(toReplace, "\" + " + toCamelCase(token, false) + "() + \"");
		}
		else
		{
			/*aCallstack.insert(aProperty);
			resolveStringProperty(property, aCleanSet, aCallstack, aAll);//recursion
			temp = temp.replace(toReplace, "\" + " + toCamelCase(token, false) + "_ + \"");
			aCallstack.remove(aProperty);*/
			qDebug() << "Pattern contains non-const tokens: " + value;
		}
	}

	aCleanSet.insert(aProperty);	
	initializationSection_ +=
			"\t" + aProperty->name() + " = " + wrap(temp) + ";\n";
}