diff options
Diffstat (limited to 'tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPrdNodeInfoList.h')
-rw-r--r-- | tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPrdNodeInfoList.h | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPrdNodeInfoList.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPrdNodeInfoList.h new file mode 100644 index 00000000..6fa22eb0 --- /dev/null +++ b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPrdNodeInfoList.h @@ -0,0 +1,226 @@ +/**************************************************************************** +* * +* OpenNI 1.x Alpha * +* Copyright (C) 2011 PrimeSense Ltd. * +* * +* This file is part of OpenNI. * +* * +* OpenNI is free software: you can redistribute it and/or modify * +* it under the terms of the GNU Lesser General Public License as published * +* by the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* OpenNI is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU Lesser General Public License for more details. * +* * +* You should have received a copy of the GNU Lesser General Public License * +* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. * +* * +****************************************************************************/ +#ifndef __XN_PRD_NODE_INFO_LIST_H__ +#define __XN_PRD_NODE_INFO_LIST_H__ + +/** + * @ingroup cref + * @defgroup infolist Production Node Info List + * This page details functions for handling production nodes lists. The lists are implemented as + * doubly-linked lists, but it's not recommended to access the list members directly. + * instead, use the provided functions for handling the list. + * + * @section append Adding and Removing Node Info Objects + * + * Nodes can be added to the list using @ref xnNodeInfoListAdd(). Note that once an info object + * is part of the list, it will be freed if that list is freed. A node can be removed by calling @ref + * xnNodeInfoListRemove(), which also frees that element. + * + * A short example: + * @code +// Start with an empty list +XnNodeInfoList* pList; +nRetVal = xnNodeInfoListAllocate(&pList); +// TODO: check error code + +// Add first +pList = xnNodeInfoListAdd(pList, pDescription1, NULL, NULL); + +// Add second +pList = xnNodeInfoListAdd(pList, pDescription2, NULL, NULL); + * @endcode + * + * @section enum Enumeration + * + * Forward Iteration: + * @code +for (XnNodeInfoListIterator it = xnNodeInfoListGetFirst(pList); + xnNodeInfoListIteratorIsValid(it); + it = xnNodeInfoListGetNext(it)) +{ + XnNodeInfo* pCurrent = xnNodeInfoListGetCurrent(it); + ... +} + * @endcode + * + * Backwards Iteration: + * @code +for (XnNodeInfoListIterator it = xnNodeInfoListGetLast(pList); + xnNodeInfoListIteratorIsValid(it); + it = xnNodeInfoListGetPrevious(it)) +{ + XnNodeInfo* pCurrent = xnNodeInfoListGetCurrent(it); + ... +} + * @endcode + * @{ + */ + +//--------------------------------------------------------------------------- +// Includes +//--------------------------------------------------------------------------- +#include <XnTypes.h> + +//--------------------------------------------------------------------------- +// Functions +//--------------------------------------------------------------------------- + +/** + * Allocates a @ref XnNodeInfoList object. This object should be freed using @ref xnNodeInfoListFree(). + * + * @param ppList [out] The list. + */ +XN_C_API XnStatus XN_C_DECL xnNodeInfoListAllocate(XnNodeInfoList** ppList); + +/** + * Frees a @ref XnNodeInfoList object previously allocated with @ref xnNodeInfoListAllocate(). + * + * @param pList [out] The list. + */ +XN_C_API void XN_C_DECL xnNodeInfoListFree(XnNodeInfoList* pList); + +/** + * Creates and adds a single @ref XnNodeInfo object to the list. See also @ref xnNodeInfoListAddEx(). + * + * @param pList [in] The list. + * @param pDescription [in] The description of this production node. + * @param strCreationInfo [in] Optional. Additional needed information for instantiation. + * @param pNeededNodes [in] Optional. A list of needed nodes. + */ +XN_C_API XnStatus XN_C_DECL xnNodeInfoListAdd(XnNodeInfoList* pList, const XnProductionNodeDescription* pDescription, const XnChar* strCreationInfo, XnNodeInfoList* pNeededNodes); + +/** + * Creates and adds a single @ref XnNodeInfo object to the list, with additional data. This data can be later + * extracted using the @ref xnNodeInfoGetAdditionalData(). Before the node info object is freed, the pFreeHandler + * callback will be called, so it could free the additional data object. + * + * @param pList [in] The list. + * @param pDescription [in] The description of this production node. + * @param strCreationInfo [in] Optional. Additional needed information for instantiation. + * @param pNeededNodes [in] Optional. A list of needed nodes. + * @param pAdditionalData [in] Additional data, which is specific to this node. + * @param pFreeHandler [in] Optional. A callback function for freeing the additional data. + */ +XN_C_API XnStatus XN_C_DECL xnNodeInfoListAddEx(XnNodeInfoList* pList, const XnProductionNodeDescription* pDescription, const XnChar* strCreationInfo, XnNodeInfoList* pNeededNodes, const void* pAdditionalData, XnFreeHandler pFreeHandler); + +/** + * Adds a single @ref XnNodeInfo object to the list. + * + * @param pList [in] The list. + * @param pNode [in] The node to add. + */ +XN_C_API XnStatus XN_C_DECL xnNodeInfoListAddNode(XnNodeInfoList* pList, XnNodeInfo* pNode); + +/** + * Adds a node from another list to this list (the node is not removed from the other list). + * + * @param pList [in] The list. + * @param otherListIt [in] An iterator obtained from another list. + */ +XN_C_API XnStatus XN_C_DECL xnNodeInfoListAddNodeFromList(XnNodeInfoList* pList, XnNodeInfoListIterator otherListIt); + +/** + * Removes an element from the list, and frees it. + * + * @param pList [in] The list. + * @param it [in] Iterator to the element that should be removed. + */ +XN_C_API XnStatus XN_C_DECL xnNodeInfoListRemove(XnNodeInfoList* pList, XnNodeInfoListIterator it); + +/** + * Clears a node info list, freeing all the elements in it. + * + * @param pList [in] The list to be freed. + */ +XN_C_API XnStatus XN_C_DECL xnNodeInfoListClear(XnNodeInfoList* pList); + +/** + * Appends another list at the end of this list. Note that the other list becomes empty, + * but still needs to be freed. + * + * @param pList [in] A list. + * @param pOther [in] The list to be appended. + */ +XN_C_API XnStatus XN_C_DECL xnNodeInfoListAppend(XnNodeInfoList* pList, XnNodeInfoList* pOther); + +/** +* Checks if the given list is empty +* +* @param pList [in] A list. +*/ +XN_C_API XnBool XN_C_DECL xnNodeInfoListIsEmpty(XnNodeInfoList* pList); + +/** + * Gets the first element of the list. + * + * @param pList [in] [Optional] A list. + * + * @returns an iterator to the first element of the list, or NULL if the list is empty. + */ +XN_C_API XnNodeInfoListIterator XN_C_DECL xnNodeInfoListGetFirst(XnNodeInfoList* pList); + +/** + * Gets the last element of the list. + * + * @param pList [in] [Optional] A list. + * + * @returns an iterator to the last element of the list, or NULL if the list is empty. + */ +XN_C_API XnNodeInfoListIterator XN_C_DECL xnNodeInfoListGetLast(XnNodeInfoList* pList); + +/** + * Checks if the current iterator points to a valid location. + * + * @param it [in] An iterator. + */ +XN_C_API XnBool XN_C_DECL xnNodeInfoListIteratorIsValid(XnNodeInfoListIterator it); + +/** + * Gets current element from an iterator. + * + * @param it [in] An iterator. + * + * @returns an @ref XnNodeInfo pointer. + */ +XN_C_API XnNodeInfo* XN_C_DECL xnNodeInfoListGetCurrent(XnNodeInfoListIterator it); + +/** + * Gets an iterator to the next element from a current iterator. + * + * @param it [in] An iterator. + * + * @returns an iterator to the next element. + */ +XN_C_API XnNodeInfoListIterator XN_C_DECL xnNodeInfoListGetNext(XnNodeInfoListIterator it); + +/** + * Gets an iterator to the previous element from a current iterator. + * + * @param it [in] An iterator. + * + * @returns an iterator to the previous element. + */ +XN_C_API XnNodeInfoListIterator XN_C_DECL xnNodeInfoListGetPrevious(XnNodeInfoListIterator it); + +/** @} */ + +#endif // __XN_PRD_NODE_INFO_LIST_H__ |