#include "eir.h"
namespace goose::eir
{
Term ConcatenateVectorTerms( const Term& vector1, const Term& vector2 )
{
const auto& vec1 = *get< pvec >( vector1 );
const auto& vec2 = *get< pvec >( vector2 );
auto newVec = Vector::MakeConcat( vec1, vec2 );
return TERM( make_shared< Vector >( move( newVec ) ) );
}
Term TakeVectorTerm( const Term& vectorTerm, size_t n )
{
const auto& vec = *get< pvec >( vectorTerm );
auto newVec = vec.take( n );
return TERM( make_shared< Vector >( move( newVec ) ) );
}
Term DropVectorTerm( const Term& vectorTerm, size_t n )
{
const auto& vec = *get< pvec >( vectorTerm );
auto newVec = vec.drop( n );
return TERM( make_shared< Vector >( move( newVec ) ) );
}
Term DuplicateVectorTerm( const Term& vectorTerm )
{
const auto& vec = *get< pvec >( vectorTerm );
return TERM( make_shared< Vector >( vec ) );
}
bool AreVecLengthsCompatible( const VecLength& vl1, const VecLength& vl2 )
{
if( vl1.minLength() < vl2.minLength() )
return vl1.isVariable();
if( vl2.minLength() < vl1.minLength() )
return vl2.isVariable();
return true;
}
TermGen ForEachInVectorTerm( const Term& vectorTerm )
{
const auto& vec = *get< pvec >( vectorTerm );
for( auto&& t : vec.terms() )
co_yield &t;
}
} // namespace goose::eir