const char* HK_CALL hkDemoFileSystem::removeDemoBasePath( const char* pathIn, hkArray<char>& buffer ) { hkString path( pathIn ); path.makeLowerCase(); // strip everything up to the demo root folder hkString root("/demos/"); root.makeLowerCase(); const char* str = path.cString(); const char* start = hkString::strStr(str, root.cString()); if ( start != HK_NULL ) { int pos = static_cast<int>(start - str) + root.getLength(); buffer.setSize( path.getLength() - pos + 1 ); // copy the part of the string that follows the demo prefix hkString::memCpy( buffer.begin(), pathIn+pos, buffer.getSize()-1 ); buffer[ buffer.getSize()-1 ] = 0; // null terminate return buffer.begin(); } else { // nothing to do return pathIn; } }
void loadEntireFileIntoBuffer(const char* filepath, hkArray<char>& outBuf) { // Load the entire file // Open a stream to read the file hkIstream infile( filepath ); HK_ASSERT( 0x215d080c, infile.isOk() ); if( infile.getStreamReader()->seekTellSupported() ) { infile.getStreamReader()->seek(0, hkStreamReader::STREAM_END); outBuf.reserve( infile.getStreamReader()->tell() ); infile.getStreamReader()->seek(0, hkStreamReader::STREAM_SET); } // read entire file into local buffer int nread = 1; while( nread ) { const int CSIZE = 8192; char* b = outBuf.expandBy( CSIZE ); // outBuf.reserve( outBuf.getSize() + CSIZE ); b = outBuf.begin() + outBuf.getSize(); nread = infile.read( b, CSIZE ); outBuf.setSize( outBuf.getSize() + nread - CSIZE ); } }