Changeset 359 for trunk/src/lua/lua_path.cc
- Timestamp:
- 04/29/15 18:46:16 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/lua/lua_path.cc
r319 r359 11 11 using namespace nv; 12 12 13 lua::path::path( nv::string p ) 14 : m_count(0), m_path( std::move( p ) ) 13 void lua::path::parse() 15 14 { 16 parse(); 15 if ( m_elements[0].length == 0 || m_elements[0].str == nullptr ) return; 16 string_ref spath( m_elements[0].str, m_elements[0].length ); 17 m_count = 0; 18 size_t point = spath.find( '.' ); 19 20 while ( point != std::string::npos ) 21 { 22 m_elements[m_count].str = spath.data(); 23 m_elements[m_count].length = point; 24 m_count++; 25 spath.remove_prefix( point + 1 ); 26 point = spath.find( '.' ); 27 } 28 29 m_elements[m_count].str = spath.data(); 30 m_elements[m_count].length = spath.length(); 31 m_count++; 17 32 } 18 33 19 lua::path::path( const char* p ) 20 : m_count(0), m_path( p ) 34 void lua::path::push( size_t value ) 21 35 { 22 parse(); 23 } 24 25 lua::path::path( unsigned i ) 26 : m_count(0) 27 { 28 push( i ); 29 } 30 31 void lua::path::parse() 32 { 33 size_t start = 0; 34 size_t point = m_path.find('.'); 35 36 while( point != std::string::npos ) 37 { 38 push( start, point-start ); 39 start = point+1; 40 point = m_path.find( '.', start ); 41 } 42 43 push( start, m_path.length() - start ); 44 } 45 46 void lua::path::push( size_t e ) 47 { 48 m_elements[ m_count ].value = e; 36 m_elements[ m_count ].value = value; 49 37 m_elements[ m_count ].length = 0; 50 38 m_count++; 51 39 } 52 40 53 void lua::path::push( size_t start, size_t length)41 void nv::lua::path::push( string_ref p ) 54 42 { 55 m_elements[ m_count ].value = start; 56 m_elements[ m_count ].length = length; 57 m_count++; 58 } 59 60 void lua::path::push( const char* p, size_t length ) 61 { 62 m_elements[ m_count ].value = m_path.length(); 63 m_elements[ m_count ].length = length; 64 m_path.append( p, length ); 65 m_count++; 66 } 67 68 void lua::path::push( const std::string& s, size_t length ) 69 { 70 m_elements[ m_count ].value = m_path.length(); 71 m_elements[ m_count ].length = length; 72 m_path.append( s, 0, length ); 43 m_elements[ m_count ].str = p.data(); 44 m_elements[ m_count ].length = p.length(); 73 45 m_count++; 74 46 } … … 84 56 if ( m_elements[i].length > 0 ) 85 57 { 86 lua_pushlstring( L, m_ path.c_str() + m_elements[i].value, m_elements[i].length );58 lua_pushlstring( L, m_elements[i].str, m_elements[i].length ); 87 59 } 88 60 else … … 105 77 { 106 78 std::string result; 107 result.reserve( 2 * m_path.length());79 result.reserve( 64 ); 108 80 bool dot = false; 109 81 for ( const element& e : m_elements ) … … 117 89 else 118 90 { 119 result.append( m_path, e.value, e.length );91 result.append( e.str, e.length ); 120 92 dot = true; 121 93 }
Note: See TracChangeset
for help on using the changeset viewer.