Index: trunk/src/io/string_table.cc
===================================================================
--- trunk/src/io/string_table.cc	(revision 406)
+++ trunk/src/io/string_table.cc	(revision 421)
@@ -12,12 +12,13 @@
 }
 
-nv::string_table_creator::index nv::string_table_creator::insert( const std::string& s )
+nv::string_table_creator::index nv::string_table_creator::insert( const string_view& s )
 {
-	auto i = m_map.find( s );
+	uint64 hash_value = hash_string< uint64 >( s.data() );
+	auto i = m_map.find( hash_value );
 	if ( i != m_map.end() )
 	{
 		return i->second;
 	}
-	const char* cs = s.c_str();
+	const char* cs = s.data();
 	uint32 cs_size = s.size() + 1;
 	NV_ASSERT( m_offsets.size() < index(-1), "Too many strings!" );
@@ -27,5 +28,5 @@
 	m_data.resize( dsize + cs_size );
 	raw_copy( cs, cs + cs_size, m_data.data() + dsize );
-	m_map[ s ] = result;
+	m_map[ hash_value ] = result;
 	return result;
 }
@@ -55,7 +56,8 @@
 }
 
-nv::string_table_creator::index nv::string_table_creator::get( const std::string& s ) const
+nv::string_table_creator::index nv::string_table_creator::get( const string_view& s ) const
 {
-	auto i = m_map.find( s );
+	uint64 hash_value = hash_string< uint64 >( s.data() );
+	auto i = m_map.find( hash_value );
 	if ( i != m_map.end() )
 	{
