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 ] ); } }
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 ] ); } }
_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; }