Moduł Stream

Nagłówek: Stream.hpp
Elementy modułu: Stream Module

Strumienie

Moduł Stream ustanawia hierarchię klas strumieni.

Założenia strumieni:

Organizacja strumieni

Ważną decyzją projektową był wybór, czy osobnymi klasami powinny być strumienie zapisu i odczytu, strumienie obsługujące i nie obsługujące kursora, czy może jedne i drugie albo żadne. Ostatecznie dostępne są dwie bazowe klasy strumieni:

Decyzja ta była dla mnie oczywista. To czy strumień wspiera kursor, to ewidentnie zależy od jego typu (np. strumień plikowy tak, strumień kompresji danych nie), podczas gdy to czy strumień jest do odczytu czy do zapisu albo do jednego i drugiego, to już sprawa danego strumienia zależna od parametrów, z jakimi został utworzony (np. czy plik ma być otwarty do zapisu czy do odczytu).

Składniki

Moduł definiuje następujące klasy:

Moduł Stream definiuje też strukturę common::MD5_SUM reprezentującą sumę kontrolną MD5, a także jej konwersję do i z łańcucha.

Inne moduły - Files i ZlibUtils - rozszerzają hierarchię strumieni o nowe klasy.

Własne klasy strumieni

Poniżej jest szablon klasy strumienia.

Metody oznaczone jako [x] mają wersje oryginalne i nie trzeba ich implementować, żeby działały, chyba że w strumieniu danego rodzaju da się zaimplementować daną metodę bezpośrednio, żeby działała szybciej i lepiej.

class XXX : public common::SeekableStream
{
private:
  ...

public:
  XXX(...);
  virtual ~XXX();
  
  // ======== Implementacja Stream ========
  
  virtual void Write(const void *Data, size_t Size);
  virtual void Flush(); [x, domyślnie nie robi nic]
  
  virtual size_t Read(void *Out, size_t MaxLength);
  virtual void MustRead(void *Out, size_t Length); [x]
  virtual bool End(); [dopiero w Seekable ma domyślną implementację]
  virtual size_t Skip(size_t MaxLength); [x]
  
  // ======== Implementacja Seekable ========
  
  virtual size_t GetSize();
  virtual int GetPos();
  virtual void SetPos(int pos);
  virtual void SetPosFromCurrent(int pos); [x]
  virtual void SetPosFromEnd(int pos); [x]
  virtual void Rewind(); [x]
  virtual void SetSize(size_t Size);
  virtual void Truncate(); [x]
  virtual void Clear(); [x]
};

Generated on Wed Dec 16 20:44:52 2009 for CommonLib by  doxygen 1.6.1