const std::string &Type::name() const { auto i = names.find(type_id); if(i!=names.end()) return i->second; else if(is_vector()) { std::stringstream s; s << vector_of().name() << vector_size(); names.insert(std::pair<int, std::string>(type_id, s.str())); return names[type_id]; } else if(is_pointer()) { std::stringstream s; s << "__global " << pointer_to().name() << " *"; names.insert(std::pair<int, std::string>(type_id, s.str())); return names[type_id]; } else { assert(!"Invalid type."); } }
builtin_types replace_scalar( builtin_types const& btc, builtin_types const& scalar_btc ) { assert( is_scalar(scalar_btc) ); if( !is_scalar(scalar_btc) ) { return scalar_btc; } if( is_vector(btc) ) { return vector_of( scalar_btc, vector_size(btc) ); } else if ( is_matrix(btc) ) { return matrix_of( scalar_btc, vector_size(btc), vector_count(btc) ); } else { return scalar_btc; } }