Goose  Artifact [27354f1c02]

Artifact 27354f1c02a3b6ad83876d09c88841d43a627403fa745b0060b189269fe3e18c:

  • File bs/ir/helpers.h — part of check-in [f2ca82dfce] at 2019-08-16 23:52:52 on branch trunk — Simplified ir::Vector, use plain std::vector to store the terms. immer::vector was pointless for that since we pretty much never actually take advantage of them being CoW in this case. (user: achavasse size: 753)

#ifndef EMPATHY_IR_HELPERS_H
#define EMPATHY_IR_HELPERS_H

namespace empathy::ir
{
    static inline auto VecSize( const Term& vectorTerm )
    {
        return get< pvec >( vectorTerm )->terms().size();
    }

    template< typename... T >
    Term AppendToVectorTerm( const Term& vectorTerm, T&&... t );

    extern Term ConcatenateVectorTerms( const Term& vector1, const Term& vector2 );

    extern Term TakeVectorTerm( const Term& vectorTerm, size_t n );
    extern Term DropVectorTerm( const Term& vectorTerm, size_t n );

    template< typename F >
    void ForEachInVectorTerm( const Term& vectorTerm, F&& func );

    template< typename F >
    bool ForEachInVectorTerms( const Term& vectorTerm1, const Term& vectorTerm2, F&& func );
}

#endif