Здравствуйте, Зверёк Харьковский, Вы писали:
Класс, зверски клево
Небольшой коментарий по поводу:
ЗХ>Примечание 2
ЗХ>Элементы DOM HTMLayout — это объекты со счетчиками ссылок, они удаляются, когда счетчик ссылок равен 0. Пользователь может контролировать счетчик ссылок функциями HTMLayout_UseElement, HTMLayout_UnuseElement. Пока элемент находится в DOM, счетчик ссылок у него > 0. Если пользователь удалил элемент из DOM (HTMLayoutDetachElement), то его можно продолжать использовать дальше, пока счетчик ссылок > 0.
Прямой аналог HTMLayout_UseElement, HTMLayout_UnuseElement это AddRef и Release в COM.
Поэтому голый HTMLayoutDetachElement звать не надо. А надо так:
1) HTMLayout_UseElement(el) <- ++refcount = 2
2) HTMLayoutDetachElement(el) <- удален из контейнера соответсвенно --refcount = 1
3) HTMLayoutInsertElement(some_other_parent, el); <- добавлен в другой контейнер, соответсвенно ++refcount = 2
4) HTMLayout_UnuseElement(el) <- --refcount = 1. ( refcount == 1 — parent держит данный элемент)
Для C++ есть класс в htmlayout_dom.hpp:
htmlayout::dom::element
.
Это smart pointer элемента DOM который делает Use/UnuseElement когда надо +
все API методы обернуты в нечто более привычное для C++ по нотации и способу пользования.
Зверь, еще раз большое спасибо.