| 2128 | } |
| 2129 | |
| 2130 | XN_C_API XnStatus xnCreateMockNodeBasedOn(XnContext* pContext, |
| 2131 | XnNodeHandle hOriginalNode, |
| 2132 | const XnChar* strName, |
| 2133 | XnNodeHandle* phMockNode) |
| 2134 | { |
| 2135 | XN_VALIDATE_INPUT_PTR(pContext); |
| 2136 | XN_VALIDATE_INPUT_PTR(hOriginalNode); |
| 2137 | //strName may be NULL |
| 2138 | XN_VALIDATE_OUTPUT_PTR(phMockNode); |
| 2139 | XnChar strMockNodeName[XN_MAX_NAME_LENGTH]; |
| 2140 | XnStatus nRetVal = XN_STATUS_OK; |
| 2141 | |
| 2142 | if (strName == NULL) |
| 2143 | { |
| 2144 | XnUInt32 nCharsWritten = 0; |
| 2145 | nRetVal = xnOSStrFormat(strMockNodeName, sizeof(strMockNodeName), &nCharsWritten, "%s_%s", xnGetNodeName(hOriginalNode), XN_MOCK_NODE_NAME); |
| 2146 | XN_IS_STATUS_OK_ASSERT(nRetVal); |
| 2147 | strName = strMockNodeName; |
| 2148 | } |
| 2149 | |
| 2150 | XnNodeHandle hMockNode = NULL; |
| 2151 | XnProductionNodeType type = hOriginalNode->pNodeInfo->Description.Type; |
| 2152 | nRetVal = xnCreateMockNodeImpl(pContext, type, strName, &hMockNode); |
| 2153 | XN_IS_STATUS_OK(nRetVal); |
| 2154 | |
| 2155 | //Copy state from original node to mock node |
| 2156 | xn::NodeWatcher* pNodeWatcher = NULL; |
| 2157 | xn::ProductionNode originalNode(hOriginalNode); |
| 2158 | nRetVal = xn::CreateNodeWatcher(originalNode, type, hMockNode, xn::MockNotifier::GetInstance(), pNodeWatcher); |
| 2159 | if (nRetVal != XN_STATUS_OK) |
| 2160 | { |
| 2161 | xnProductionNodeRelease(hMockNode); |
| 2162 | return nRetVal; |
| 2163 | } |
| 2164 | |
| 2165 | nRetVal = pNodeWatcher->NotifyState(); |
| 2166 | XN_DELETE(pNodeWatcher); |
| 2167 | if (nRetVal != XN_STATUS_OK) |
| 2168 | { |
| 2169 | xnProductionNodeRelease(hMockNode); |
| 2170 | return nRetVal; |
| 2171 | } |
| 2172 | |
| 2173 | *phMockNode = hMockNode; |
| 2174 | |
| 2175 | return XN_STATUS_OK; |
| 2176 | } |
| 2177 | |
| 2178 | XN_C_API XnNodeInfo* xnGetNodeInfo(XnNodeHandle hNode) |
| 2179 | { |
no test coverage detected