tables::table::update

1)

template <typename... Ts,is_primitive_type... Ps>
template<typename... TUs,is_primitive_type... PUs>
requires (
  (in<TUs,std::tuple<Ts...>> && ... ) &&
  is_tuple_unique<std::tuple<TUs...>> &&
  ( sizeof...(TUs) == sizeof...(PUs) )
)
inline
auto
table<std::pair<Ts,Ps>...>::update(const PUs... ctes) const

2)

template <typename... Ts,is_primitive_type... Ps>
template<typename... TUs,is_primitive_type... PUs>
requires (
  (in<TUs,std::tuple<Ts...>> && ... ) &&
  is_tuple_unique<std::tuple<TUs...>> &&
  ( sizeof...(TUs) == sizeof...(PUs) )
)
inline
auto
table<std::pair<Ts,Ps>...>::update(const column<PUs>&... cs) const

3)

template <typename... Ts,is_primitive_type... Ps>
template<typename... TUs,is_primitive_type... PUs>
requires (
  (in<TUs,std::tuple<Ts...>> && ... ) &&
  is_tuple_unique<std::tuple<TUs...>> &&
  ( sizeof...(TUs) == sizeof...(PUs) )
)
inline
auto
table<std::pair<Ts,Ps>...>::update(
  const table<std::pair<TUs,PUs>...>& t
) const

  1. Returns a new table obtained by updating columns TUs using scalar ctes.

  2. Returns a new table obtained by updating columns TUs using columns cs.

  3. Returns a new table obtained by updating columns TUs using columns from table t.

Example

Code

#include <cpptables/table.hh>
#include <iostream>

using namespace tables;
using namespace std;

struct c0{ constexpr static string_view name =  "Col0"; };
struct c1{ constexpr static string_view name =  "Col1"; };
struct c2{ constexpr static string_view name =  "Col2"; };

using table_t = table<
  pair<c0,string_view>,
  pair<c1,unsigned>,
  pair<c2,double>
>;


void table_update()
{
  const table_t t(
      {"abc", "def", "ghi"},
      {100,200,300},
      {1.0, 2.0, 3.0} 
    );

  const auto t1 = t.update<c2>( column<unsigned>({10, 20, 30}));
  cout << t1 << "\n";
}

Output

Col0 Col1 Col2
--------------
 abc  100   10
 def  200   20
 ghi  300   30