CPlaneText* InsertPlaneText( SelectNode &sn, 
	QChar ch, long style, RealFde kegl, CNodeInfo &ni, CNodeExInfo &ex_ni )
{
	Q_ASSERT( !ni.isUnicode() );
	QString sV( 1, ch );
	return InsertPlaneText_Internal( sn, sV, style, kegl, ni, ex_ni );
}
TEST( Vector, Resize )
{
    bolt::BCKND::device_vector< float > dV;
    EXPECT_EQ( 0, dV.size( ) );

    std::vector< float > sV( 10 );
    for(int i=0; i<10; i++)
    {
        sV[i] = (float)i;
    }

    dV.insert( dV.cbegin( ), sV.begin( ), sV.end( ) );
    EXPECT_EQ( 10, dV.size( ) );
    dV.resize(7);
    EXPECT_EQ( 7, dV.size( ) );
    for(int i=0; i<7; i++)
    {
        EXPECT_FLOAT_EQ( (float)i, dV[ i ] );
    }
    dV.resize(15, 7);
    EXPECT_EQ( 15, dV.size( ) );
    for(int i=0; i<15; i++)
    {
        if(i<7)
            EXPECT_FLOAT_EQ( (float)i, dV[ i ] );
        else
            EXPECT_FLOAT_EQ( 7.0f, dV[ i ] );
    }
}
Exemple #3
0
TEST( Vector, ResizeView )
{
    std::vector< float > x( 100 );
    bolt::BCKND::device_vector< float , concurrency::array_view> dV( x.begin(), 0 );
    EXPECT_EQ( 0, dV.size( ) );

    std::vector< float > sV( 10 );
    for(int i=0; i<10; i++)
    {
        sV[i] = (float)i;
    }

    dV.insert( dV.cbegin( ), sV.begin( ), sV.end( ) );
    EXPECT_EQ( 10, dV.size( ) );
    dV.resize(7);
    EXPECT_EQ( 7, dV.size( ) );
    for(int i=0; i<7; i++)
    {
        EXPECT_FLOAT_EQ( (float)i, dV[ i ] );
    }
    dV.resize(15, 7);
    EXPECT_EQ( 15, dV.size( ) );
    for(int i=0; i<15; i++)
    {
        if(i<7)
            EXPECT_FLOAT_EQ( (float)i, dV[ i ] );
        else
            EXPECT_FLOAT_EQ( 7.0f, dV[ i ] );
    }
}
Exemple #4
0
_THyPhyReturnObject* _THyPhy::CastResult (const void* theObject, const int requestedType)
{
    _THyPhyReturnObject * convertedObject = nil;
    if (CanCast(theObject,requestedType)) {
        int hyphyObjClass = ((_PMathObj)theObject)->ObjectClass();
        switch (hyphyObjClass) {
        case NUMBER: {
            if (hyphyObjClass == NUMBER) {
                return new _THyPhyNumber (((_PMathObj)theObject)->Compute()->Value());
            }
            if (hyphyObjClass == STRING) {
                _String sV ((_String*)((_FString*)theObject)->toStr());
                return new _THyPhyNumber (sV.toNum());
            }
        }
        case STRING: {
            _String sV ((_String*)((_PMathObj)theObject)->toStr());
            return new _THyPhyString (sV.sData,sV.sLength);
        }
        case MATRIX: {
            if (hyphyObjClass == NUMBER) {
                double evaluate = ((_PMathObj)theObject)->Compute()->Value();
                return new _THyPhyMatrix (1,1,&evaluate);
            }

            if (hyphyObjClass == MATRIX) {
                _Matrix * evalutedNumeric =  (_Matrix*)((_Matrix*)(((_PMathObj)theObject)->Compute()))
                                             ->ComputeNumeric();

                return new _THyPhyMatrix (evalutedNumeric->GetHDim(),evalutedNumeric->GetVDim(),evalutedNumeric->theData);
            }
        }
        }
    }

    return convertedObject;
}
TEST( Vector, InsertFloatRangeIterator )
{
    bolt::BCKND::device_vector< float > dV;
    EXPECT_EQ( 0, dV.size( ) );

    std::vector< float > sV( 5 );
    sV[ 0 ] = 1.0f;
    sV[ 1 ] = 2.0f;
    sV[ 2 ] = 3.0f;
    sV[ 3 ] = 4.0f;
    sV[ 4 ] = 5.0f;

    dV.insert( dV.cbegin( ), sV.begin( ), sV.end( ) );
    EXPECT_EQ( 5, dV.size( ) );
    EXPECT_FLOAT_EQ( 1.0f, dV[ 0 ] );
    EXPECT_FLOAT_EQ( 2.0f, dV[ 1 ] );
    EXPECT_FLOAT_EQ( 3.0f, dV[ 2 ] );
    EXPECT_FLOAT_EQ( 4.0f, dV[ 3 ] );
    EXPECT_FLOAT_EQ( 5.0f, dV[ 4 ] );
}
CPlaneText* InsertPlaneText( 
	SelectNode &sn, QString &strText, 
	long style, RealFde kegl, CNodeInfo& ni, CNodeExInfo& ex_ni )
{
	if( ni.isUnicode() )
	{
		if( sn.GetNode()->GetType() == NODE_PLANETEXT ) 
			BreakPlaneText( sn, 0 );

		Q_ASSERT( sn.GetNode()->GetType() == NODE_LINE );
		CParentNode *pParentNode = sn.GetNode()->GetParent();

		CNode *pPrev, *pNext;
		GetPrevNextInLine( sn, pPrev, pNext );

		long nLen;
		QString str;
		CPlaneText *pPlaneText = NULL;
		while( (nLen = strText.length()) )
		{
			long nPos = strText.indexOf("\r\n");
			if( nPos == -1 )
			{
				str = strText.mid(0, nLen);
				strText.clear();
			}
			else
			{
				str = strText.mid(0, nPos + 2);
				strText.remove(0, nPos);
			}

			pPlaneText = InsertPlaneText_Internal( sn, str, style, kegl, ni, ex_ni );

			if( nPos != -1 ) 
				BreakLine( sn, 0 );
		}

		pPlaneText->GetParent()->RecalculateSize( 0 );

		if( pPrev ) GlueText( sn, pPrev, 0 );
		if( pNext ) GlueText( sn, pNext->GetPrev(), 0 );

		pParentNode->RecalculateSize( 1 );

		return pPlaneText;
	}
	else
	{
		if( sn.GetNode()->GetType() == NODE_PLANETEXT ) 
			BreakPlaneText( sn, 0 );

		Q_ASSERT( sn.GetNode()->GetType() == NODE_LINE );
		CParentNode *pParentNode = sn.GetNode()->GetParent();

		CNode *pPrev, *pNext;
		GetPrevNextInLine( sn, pPrev, pNext );

		//
		long i, cb;
		long nLen;
		QString str;
		QVector<CNode*> texts, lines;

		while( (nLen = strText.length()) )
		{
			long nPos = strText.indexOf( "\r\n" );
			if( nPos == -1 )
			{
				str = strText.mid(0, nLen);
				strText.clear();
			}
			else
			{
				str = strText.mid(0, nPos);
				strText.remove( 0, nPos + 2 );
			}
			lines.push_back( sn.GetNode()->GetLineNode() );

			char ch = 0;
			LFInsertStyle style2analyse;
			long nNewStyle = -1;
			for( cb = 0; ; )
			{
				ch = style2analyse.Analisys( str.midRef(cb) );
				if( ch == 0 ) break;
				if( style == -1 )
					nNewStyle = ::getCurrentFormulatorStyle().getStyleByCharOnly( ch );
				else
					nNewStyle = style;

				QString sV( style2analyse.getText() );
				texts.push_back( InsertPlaneText_Internal( sn, sV, nNewStyle, kegl, ni, ex_ni, 0 ) );

				cb += style2analyse.GetRead();
				style2analyse.reset();
			}

			if( nPos != -1 ) 
				BreakLine( sn, 0 );
		}

		for( i = 0; i < (long) texts.size(); i++ )
		{
			Q_ASSERT( texts[ i ] != NULL );
			texts[ i ]->RecalculateSize( 0 );
		}

		for( i = 0; i < (long) lines.size(); i++ )
		{
			Q_ASSERT( lines[ i ] != NULL );
			lines[ i ]->RecalculateSize( 0 );
		}

		if( pPrev ) GlueText( sn, pPrev, 0 );
		if( pNext ) GlueText( sn, pNext->GetPrev(), 0 );

		pParentNode->RecalculateSize( 1 );

		return (CPlaneText*) (texts.size() ? texts[ texts.size() - 1 ] : NULL);
	}
}
CFormulaNode* CLineNode::InsertMMLFormulaNode_MFENCED( AST_TXML_Tag *node )
{
	AST_TXML_Attribute *_attr;
	QString attr_open, attr_close, b_attr_separator, attr_separator = _T("");
	long i;

	//=== 'open', 'close' and 'separator' attributes (or their defaults)
	_attr = node->getAttribute( FBL_ATTR_open );
	attr_open = ::formatBlankAsXML( _attr  ? _attr->getStringValue() : FBL_VAL_DEFAULT_mfenced_open  );
	_attr = node->getAttribute( FBL_ATTR_close );
	attr_close = ::formatBlankAsXML( _attr ? _attr->getStringValue() : FBL_VAL_DEFAULT_mfenced_close );
	_attr = node->getAttribute( FBL_ATTR_separators );

	if( node->getTags() && 
		node->getTags()->getChildNumber() == 1 &&
		node->getTags()->getChild( 0 ) &&
		node->getTags()->getChild( 0 )->getNodeType() == ASTT_TXML_Tag )
	{
		QString fid = _T("");
		if( ::isXMLSymbol__BracketL( attr_open ) && 
			::isXMLSymbol__BracketR( attr_close ) )
			fid = HF_BTNID_DEFAULT_BRACKET_LR;
		else if( ::isXMLSymbol__BracketLB( attr_open ) && 
				 ::isXMLSymbol__BracketRB( attr_close ) )
			fid = HF_BTNID_DEFAULT_BRACKET_LRB;
		else if( ::isXMLSymbol__BracketLF( attr_open ) && 
				 ::isXMLSymbol__BracketRF( attr_close ) )
			fid = HF_BTNID_DEFAULT_BRACKET_LRF;
		else if( ::isXMLSymbol__BracketLA( attr_open ) && 
				 ::isXMLSymbol__BracketRA( attr_close ) )
			fid = HF_BTNID_DEFAULT_BRACKET_LRA;
		else if( ::isXMLSymbol__BracketVerBar( attr_open ) && 
				 ::isXMLSymbol__BracketVerBar( attr_close ) )
			fid = HF_BTNID_DEFAULT_BRACKET_ABS;
		else if( ::isXMLSymbol__BracketDblVerBar( attr_open ) && 
				 ::isXMLSymbol__BracketDblVerBar( attr_close ) )
			fid = HF_BTNID_DEFAULT_BRACKET_NORM;
		else if( ::isXMLSymbol__BracketLFloor( attr_open ) && 
				 ::isXMLSymbol__BracketRFloor( attr_close ) )
			fid = HF_BTNID_DEFAULT_BRACKET_FLOOR;
		else if( ::isXMLSymbol__BracketLCeil( attr_open ) && 
				 ::isXMLSymbol__BracketRCeil( attr_close ) )
			fid = HF_BTNID_DEFAULT_BRACKET_CEIL;
		else if( attr_close.length() == 0 )
		{
			if( ::isXMLSymbol__BracketL( attr_open ) )
				fid = HF_BTNID_DEFAULT_BRACKET_L;
			else if( ::isXMLSymbol__BracketLB( attr_open ) )
				fid = HF_BTNID_DEFAULT_BRACKET_LB;
			else if( ::isXMLSymbol__BracketLF( attr_open ) )
				fid = HF_BTNID_DEFAULT_BRACKET_LF;
			else if( ::isXMLSymbol__BracketLA( attr_open ) )
				fid = HF_BTNID_DEFAULT_BRACKET_LA;
			else if( ::isXMLSymbol__BracketVerBar( attr_open ) )
				fid = HF_BTNID_DEFAULT_BRACKET_ABS_L;
			else if( ::isXMLSymbol__BracketDblVerBar( attr_open ) )
				fid = HF_BTNID_DEFAULT_BRACKET_NORM_L;
		}
		else  if( attr_open.length() == 0 )
		{
			if( ::isXMLSymbol__BracketR( attr_close ) )
				fid = HF_BTNID_DEFAULT_BRACKET_R;
			else if( ::isXMLSymbol__BracketRB( attr_close ) )
				fid = HF_BTNID_DEFAULT_BRACKET_RB;
			else if( ::isXMLSymbol__BracketRF( attr_close ) )
				fid = HF_BTNID_DEFAULT_BRACKET_RF;
			else if( ::isXMLSymbol__BracketRA( attr_close ) )
				fid = HF_BTNID_DEFAULT_BRACKET_RA;
			else if( ::isXMLSymbol__BracketVerBar( attr_close ) )
				fid = HF_BTNID_DEFAULT_BRACKET_ABS_R;
			else if( ::isXMLSymbol__BracketDblVerBar( attr_close ) )
				fid = HF_BTNID_DEFAULT_BRACKET_NORM_R;
		}

		CFormulaNode *r;
		if( fid.length() &&
			(r = InsertMMLFormulaNode_OTHERS_byID( fid, node )) != 0 )
			return r;
	}

	b_attr_separator = _attr ? _attr->getStringValue() : FBL_VAL_DEFAULT_mfenced_separator;
	for( i = 0; i < (long) b_attr_separator.length(); i++ )
		if( !_isspace( b_attr_separator.at(i) ) )
			attr_separator += b_attr_separator.at(i);

	AST_TXML_Compound *_tags = new AST_TXML_Compound();

	AST_TXML_Compound *_a;
	AST_TXML_Value *_v;
	AST_TXML_Compound *_innner_tags = new AST_TXML_Compound();
	AST_TXML_Tag *node_inner_mrow;

	_a = new AST_TXML_Compound();
	_a->Add( new AST_TXML_Attribute( &fenceV, &trueV ) );
	QString sV( attr_open ), s2V( attr_close );
	_v = new AST_TXML_Value( &sV );
	_tags->Add( new AST_TXML_Tag( &moV, _a, _v ) );
	_tags->Add( node_inner_mrow = new AST_TXML_Tag( &mrowV, 0, _innner_tags ) );
	_a = new AST_TXML_Compound();
	_a->Add( new AST_TXML_Attribute( &fenceV, &trueV ) );
	_v = new AST_TXML_Value( &s2V );
	_tags->Add( new AST_TXML_Tag( &moV, _a, _v ) );
	
	std::vector<long> loan;
	if( node->getTags() && node->getTags()->getChildNumber() )
	{
		if( attr_separator.length() && 
			((long) attr_separator.length()) < node->getTags()->getChildNumber() - 1 )
			attr_separator.append( QString( node->getTags()->getChildNumber() - 1 - attr_separator.length(), attr_separator.at(attr_separator.length() - 1) ) );
		for( i = 0; i < node->getTags()->getChildNumber() - 1; i++ )
		{
			loan.push_back( _innner_tags->Add( node->getTags()->getChild( i ) ) );
			if( i < (long) attr_separator.length() )
			{
				_a = new AST_TXML_Compound();
				_a->Add( new AST_TXML_Attribute( &separatorV, &trueV ) );
				QString s3V(1, attr_separator.at(i));
				_v = new AST_TXML_Value( &s3V );
				_innner_tags->Add( new AST_TXML_Tag( &moV, _a, _v ) );
			}
		}
		loan.push_back( _innner_tags->Add( node->getTags()->getChild( i ) ) );
	}

	AST_TXML_Tag *node_mrow = new AST_TXML_Tag( &mrowV, 0, _tags );
	node_mrow->mode.setFlag(OLIMP_MATHML_FLAG__MROW_KEEP1CHILD);
	CFormulaNode *_node = InsertMMLFormulaNode( node_mrow );

	for( i = 0; i < (long) loan.size(); i++ )
		_innner_tags->ReplaceChild( loan[ i ], 0 );
	delete node_mrow;

	return _node;
}