 
   // check that the columns data are not null, have matching types,
   // and the same number of rows
-  for (int i = 0; i < num_input_cols; i++) {
+  for (size_type i = 0; i < num_input_cols; i++) {
     if( (nullptr == input[i]->data) 
         || (nullptr == partitioned_output[i]->data))
       return GDF_DATASET_EMPTY;

      return GDF_COLUMN_SIZE_MISMATCH;
  }

  using size_type = size_t;
  std::unique_ptr< const gdf_table<size_type> > input_table{new gdf_table<size_type>(num_input_cols, input)};
  std::unique_ptr< gdf_table<size_type> > output_table{new gdf_table<size_type>(num_input_cols, partitioned_output)};
  size_type number_of_partitions{static_cast<size_type>(num_partitions)};

  switch(hash)
  {
    case GDF_HASH_MURMUR3:
      {
        partition_gdf_table(*input_table, *output_table, number_of_partitions);
        break;
      }
    default:

}


template < template <typename> class hash_function,
           typename size_type>
void hash_partition_gdf_table(gdf_table<size_type> const & input_table,
                              gdf_table<size_type> const & table_to_hash,
                              const size_type num_partitions,
                              size_type partition_offsets[],
                              gdf_table<size_type> & partitioned_output)
{

}
