Сущность технологии СОМ. Библиотека программиста   ::   Бокс Дональд

Страница: 33 из 528

Вооружившись этой верой, разработчик библиотекипереходит к реализации FastString версии 2.0.

Очевидным улучшением является следующее решение: в тексте конструктора ( constructor ) занести длину строки в кэш и возвращать кэшированную длину в новой версии метода Length . Так как строка не может быть изменена после создания, нет необходимости беспокоиться, что ее длина будет вычисляться многократно. В действительности длина уже однажды вычислена в конструкторе при назначении буфера, так что понадобится только горстка дополнительных машинных инструкций. Вот каким будет модифицированное определение класса:

// faststring.h version 2.0

class declspec(dllexport) FastString {

const int mcch;

// count of characters

// число символов

char mpsz;

public:

FastString(const char *psz);

~FastString(void);

int Length(void) const;

// returns # of characters

// возвращает число символов

int Find(const char *psz) const;

// returns offset – возвращает смещение

};

Отметим, что единственной модификацией является добавление закрытого элемента данных. Чтобы правильно инициализировать такой элемент, конструктор должен быть изменен следующим образом:

FastString::FastString(const char *psz) : mcch(strlen(psz)), mpsz(new char[mcch + 1])

{

strcpy(mpsz, psz);

}

С введением кэшированной длины метод Length становится тривиальным:

int FastString::Length(void) const

{

return mcch;

// return cached length

// возвращает скрытую длину

}

Сделав эти три модификации, разработчик библиотеки может теперь перестроить DLL FastString и сопутствующий ей набор тестов, которые полностью провер

|< Пред. 31 32 33 34 35 След. >|

Java книги

Контакты: [email protected]