 #include "hashmap/managed.cuh"
 
 // TODO Inherit from managed class to allocate with managed memory?
-template <typename T>
+template <typename T, typename byte_t = unsigned char>
 class gdf_table : public managed
 {
 public:
 
   using size_type = T;
+  using byte_type = byte_t;
 
   gdf_table(size_type num_cols, gdf_column ** gdf_columns) 
     : num_columns(num_cols), host_columns(gdf_columns)

      if(GDF_SUCCESS == get_column_byte_width(current_column, &column_width_bytes))
      {
        row_size_bytes += column_width_bytes;
      }
      else
      {
        std::cerr << "Attempted to get column byte width of unsupported GDF datatype.\n";
      }

    }

    d_columns_data = device_columns.data().get();
    d_columns_types = device_types.data().get();
  }

  ~gdf_table(){}

    // as contiguous arrays
    device_columns.reserve(num_cols);
    device_types.reserve(num_cols);
    column_byte_widths.reserve(num_cols);
    for(size_type i = 0; i < num_cols; ++i)
    {
      gdf_column * const current_column = host_columns[i];
