drg.h
#ifndef _DRG_H #deflne _DRG_H #include "..\inc\tips.h"
// Wskazówka 39.
// Wskazówka 40.
#ifdef NULL
#pragma message("NULL już jest zdefiniowany ")
#else
#define NULL 0 #endif
// Do swobodnego używania klasy drgBase potrzeba trochę więcej. Na przykład // nie sprawdza się zawsze, czy m_rgb nie jest pusty.
// Ponadto nie są sprawdzane parametry przekazywane do Pvlnsert i PvAppend. // To są uzupełnienia, które są niezbędne, aby definiowana klasa mogła być // bezpieczna.
// Nie zostało też dodanych wiele asercji, żeby nie odciągać uwagi od kodu // demonstrującego techniki. Ale w praktyce lepiej dodać asercje niż komentarze. // Wskazówka 107. class Drgbase {
private:
long m JcbSize:16; long m_lcbChunk:16;
BYTE* m_rgb;
BYTE * m_pbMac;
BYTE * m_pbMax; long LcbMac(void)
return m_pbMac - m_rgb;
long LlndexMac(void);
BOOL FGrow(void); void Copy(const Drgbase &drgbase);
public:
Drgbase(const Drgbase &drgbase);
const Drgbase &operator=(const Drgbase &drgbase);
// Wskazówka 92.
Drgbase(long lcbSize=4, long lcChunk=12); ~Drgbase(void);
void * Pvlnsert(void * pv, long lindex);