What about a castNode() macro?

Поиск
Список
Период
Сортировка
От Andres Freund
Тема What about a castNode() macro?
Дата
Msg-id 20140429155537.GA3806@awork2.anarazel.de
обсуждение исходный текст
Ответы Re: What about a castNode() macro?  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Hi,

There's a repeated pattern of

Assert(IsA(ptr, nodetype));
foo = (nodetype *) ptr;

how about adding a castNode() that combines those? Something like:

#if !defined(USE_ASSERT_CHECKING)

#define castNode(nodeptr,_type_) \((_type_ *) (nodeptr))

#elif defined(__GNUC__)

#define castNode(nodeptr,_type_) \((_type_ *) ({ \    Node   *_result; \    _result = nodeptr; \    Assert(IsA(_result,
_type_));\    _result; \}))
 

#else

extern PGDLLIMPORT Node *newNodeMacroHolder;
#define castNode(nodePtr,_type_) \( \    newNodeMacroHolder = nodePtr, \    AssertMacro(IsA(newNodeMacroHolder,
_type_)),\    (_type_ *) newNodeMacroHolder \)
 

#endif

Greetings,

Andres Freund

-- Andres Freund                       http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training &
Services



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: pg_dump --pretty-print-views
Следующее
От: Stephen Frost
Дата:
Сообщение: Planned downtime @ Rackspace - 2014-04-29 2100-2200 UTC