 
     return hash_value;
   }
+
+
 
 /* --------------------------------------------------------------------------*/
 /** 

  // Each column can be scattered in parallel, therefore create a 
  // separate stream for every column
  std::vector<cudaStream_t> column_streams(num_columns);
  for(auto & s : column_streams)
  {
    cudaStreamCreate(&s);
  }



    if(GDF_SUCCESS != gdf_status)
      return gdf_status;

    // If this column has a validity mask, scatter the mask
    if((nullptr != current_input_column->valid)
        && (nullptr != current_output_column->valid))
    {
      // Ensure the output bitmask is initialized to zero
      const size_type num_masks = gdf_get_num_chars_bitmask(column_length);
      cudaMemsetAsync(current_output_column->valid, 0,  num_masks * sizeof(gdf_valid_type), valid_streams[i]);

      // Scatter the validity bits from the input column to output column
      constexpr int BLOCK_SIZE = 256;
      const int grid_size = (column_length + BLOCK_SIZE - 1)/BLOCK_SIZE;
      scatter_valid_mask<<<grid_size, BLOCK_SIZE, 0, valid_streams[i]>>>(current_input_column->valid, 
                                                                         current_output_column->valid,
                                                                         row_scatter_map,
                                                                         column_length);
    }

    // Scatter each column based on it's byte width
    switch(column_width_bytes)
