src/types.cc

changeset 609
a8dc74a809c6
parent 606
3dd6f343ec06
child 610
f8244301110d
equal deleted inserted replaced
608:487db37f0bb3 609:a8dc74a809c6
365 m_val.sprintf ("%p", v); 365 m_val.sprintf ("%p", v);
366 } 366 }
367 367
368 // ============================================================================= 368 // =============================================================================
369 // ----------------------------------------------------------------------------- 369 // -----------------------------------------------------------------------------
370 File::File()
371 {
372 // Make a null file
373 m_file = null;
374 m_textstream = null;
375 }
376
377 File::File (QString path, OpenType rtype)
378 {
379 m_file = null;
380 m_path = path;
381 open (path, rtype);
382 }
383
384 File::File (FILE* fp, OpenType rtype)
385 {
386 m_file = null;
387 open (fp, rtype);
388 }
389
390 // =============================================================================
391 // -----------------------------------------------------------------------------
392 File::~File()
393 {
394 if (m_file)
395 {
396 m_file->close();
397 delete m_file;
398
399 if (m_textstream)
400 delete m_textstream;
401 }
402 }
403
404 // =============================================================================
405 // -----------------------------------------------------------------------------
406 bool File::open (FILE* fp, OpenType rtype)
407 {
408 return open ("", rtype, fp);
409 }
410
411 bool File::open (QString path, OpenType rtype, FILE* fp)
412 {
413 close();
414
415 if (!m_file)
416 m_file = new QFile;
417
418 m_file->setFileName (path);
419
420 bool result;
421
422 QIODevice::OpenMode mode =
423 (rtype == Read) ? QIODevice::ReadOnly :
424 (rtype == Write) ? QIODevice::WriteOnly : QIODevice::Append;
425
426 if (fp)
427 result = m_file->open (fp, mode);
428 else
429 result = m_file->open (mode);
430
431 if (result)
432 {
433 m_textstream = new QTextStream (m_file);
434 m_path = path;
435 return true;
436 }
437
438 delete m_file;
439 m_file = null;
440 return false;
441 }
442
443 // =============================================================================
444 // -----------------------------------------------------------------------------
445 File::iterator File::begin()
446 {
447 return iterator (this);
448 }
449
450 File::iterator& File::end()
451 {
452 return m_endIterator;
453 }
454
455 // =============================================================================
456 // -----------------------------------------------------------------------------
457 void File::write (QString msg)
458 {
459 m_file->write (msg.toUtf8(), msg.length());
460 }
461
462 // =============================================================================
463 // -----------------------------------------------------------------------------
464 bool File::readLine (QString& line)
465 {
466 if (!m_textstream || m_textstream->atEnd())
467 return false;
468
469 line = m_textstream->readLine();
470 return true;
471 }
472
473 // =============================================================================
474 // -----------------------------------------------------------------------------
475 bool File::atEnd() const
476 {
477 assert (m_textstream != null);
478 return m_textstream->atEnd();
479 }
480
481 // =============================================================================
482 // -----------------------------------------------------------------------------
483 bool File::isNull() const
484 {
485 return m_file == null;
486 }
487
488 bool File::operator!() const
489 {
490 return isNull();
491 }
492
493 // =============================================================================
494 // -----------------------------------------------------------------------------
495 void File::close()
496 {
497 if (!m_file)
498 return;
499
500 delete m_file;
501 m_file = null;
502
503 if (m_textstream)
504 {
505 delete m_textstream;
506 m_textstream = null;
507 }
508 }
509
510 // =============================================================================
511 // -----------------------------------------------------------------------------
512 bool File::flush()
513 {
514 return m_file->flush();
515 }
516
517 // =============================================================================
518 // -----------------------------------------------------------------------------
519 File::operator bool() const
520 {
521 return !isNull();
522 }
523
524 // =============================================================================
525 // -----------------------------------------------------------------------------
526 void File::rewind()
527 {
528 m_file->seek (0);
529 }
530
531 // =============================================================================
532 // -----------------------------------------------------------------------------
533 File::iterator::iterator (File* f) : m_file (f)
534 {
535 operator++();
536 }
537
538 // =============================================================================
539 // -----------------------------------------------------------------------------
540 void File::iterator::operator++()
541 {
542 m_gotdata = m_file->readLine (m_text);
543 }
544
545 // =============================================================================
546 // -----------------------------------------------------------------------------
547 QString File::iterator::operator*()
548 {
549 return m_text;
550 }
551
552 // =============================================================================
553 // The prime contestant for the weirdest operator== 2013 award?
554 // -----------------------------------------------------------------------------
555 bool File::iterator::operator== (File::iterator& other)
556 {
557 return (other.m_file == null && !m_gotdata);
558 }
559
560 // =============================================================================
561 // -----------------------------------------------------------------------------
562 bool File::iterator::operator!= (File::iterator& other)
563 {
564 return !operator== (other);
565 }
566
567 // =============================================================================
568 // -----------------------------------------------------------------------------
569 LDBoundingBox::LDBoundingBox() 370 LDBoundingBox::LDBoundingBox()
570 { 371 {
571 reset(); 372 reset();
572 } 373 }
573 374

mercurial