MCPcopy Create free account
hub / github.com/PDAL/PDAL / write

Method write

plugins/e57/libE57Format/src/CheckedFile.cpp:375–434  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

373}
374
375void CheckedFile::write( const char *buf, size_t nWrite )
376{
377#ifdef E57_VERBOSE
378 // cout << "write nWrite=" << nWrite << " position()="<< position() << std::endl;
379 // //???
380#endif
381 if ( readOnly_ )
382 {
383 throw E57_EXCEPTION2( ErrorFileReadOnly, "fileName=" + fileName_ );
384 }
385
386 uint64_t end = position( Logical ) + nWrite;
387
388 uint64_t page = 0;
389 size_t pageOffset = 0;
390
391 getCurrentPageAndOffset( page, pageOffset );
392
393 size_t n = std::min( nWrite, logicalPageSize - pageOffset );
394
395 // Allocate temp page buffer
396 std::vector<char> page_buffer_v( physicalPageSize );
397 char *page_buffer = page_buffer_v.data();
398
399 while ( nWrite > 0 )
400 {
401 const uint64_t physicalLength = length( Physical );
402
403 if ( page * physicalPageSize < physicalLength )
404 {
405 readPhysicalPage( page_buffer, page );
406 }
407
408#ifdef E57_VERBOSE
409 // cout << " page_buffer[0] read: '" << page_buffer[0] << "'" << std::endl;
410 // cout << "copy " << n << "bytes to page=" << page << " pageOffset=" <<
411 // pageOffset << " buf='"; //??? for (size_t i=0; i < n; i++) cout <<
412 // buf[i]; cout << "'" << std::endl;
413#endif
414 memcpy( page_buffer + pageOffset, buf, n );
415 writePhysicalPage( page_buffer, page );
416#ifdef E57_VERBOSE
417 // cout << " page_buffer[0] after write: '" << page_buffer[0] << "'" <<
418 // std::endl; //???
419#endif
420 buf += n;
421 nWrite -= n;
422 pageOffset = 0;
423 page++;
424 n = std::min( nWrite, logicalPageSize );
425 }
426
427 if ( end > logicalLength_ )
428 {
429 logicalLength_ = end;
430 }
431
432 // When done, leave cursor just past end of buf

Callers

nothing calls this directly

Calls 3

positionFunction · 0.50
seekFunction · 0.50
dataMethod · 0.45

Tested by

no test coverage detected