Lines Matching +full:child +full:- +full:node
17 RETURN_IF_IERROR(output->recvOutput(&nnintLengthByte, sizeof(uint8_t), in bejEncodeNnint()
18 output->handlerContext)); in bejEncodeNnint()
20 return output->recvOutput(&value, nnintLengthByte, output->handlerContext); in bejEncodeNnint()
29 return output->recvOutput(format, sizeof(struct BejTupleF), in bejEncodeFormat()
30 output->handlerContext); in bejEncodeFormat()
36 static int bejEncodeBejSetOrArray(struct RedfishPropertyParent* node, in bejEncodeBejSetOrArray() argument
40 RETURN_IF_IERROR(bejEncodeNnint(node->metaData.sequenceNumber, output)); in bejEncodeBejSetOrArray()
42 RETURN_IF_IERROR(bejEncodeFormat(&node->nodeAttr.format, output)); in bejEncodeBejSetOrArray()
44 RETURN_IF_IERROR(bejEncodeNnint(node->metaData.vSize, output)); in bejEncodeBejSetOrArray()
45 // Encode the child count in bejEncodeBejSetOrArray()
46 return bejEncodeNnint(node->nChildren, output); in bejEncodeBejSetOrArray()
56 return output->recvOutput(&val, copyLength, output->handlerContext); in bejEncodeInteger()
62 int bejEncodeBejInteger(struct RedfishPropertyLeafInt* node, in bejEncodeBejInteger() argument
67 bejEncodeNnint(node->leaf.metaData.sequenceNumber, output)); in bejEncodeBejInteger()
69 RETURN_IF_IERROR(bejEncodeFormat(&node->leaf.nodeAttr.format, output)); in bejEncodeBejInteger()
71 RETURN_IF_IERROR(bejEncodeNnint(node->leaf.metaData.vSize, output)); in bejEncodeBejInteger()
73 return bejEncodeInteger(node->value, output); in bejEncodeBejInteger()
79 int bejEncodeBejEnum(struct RedfishPropertyLeafEnum* node, in bejEncodeBejEnum() argument
84 bejEncodeNnint(node->leaf.metaData.sequenceNumber, output)); in bejEncodeBejEnum()
86 RETURN_IF_IERROR(bejEncodeFormat(&node->leaf.nodeAttr.format, output)); in bejEncodeBejEnum()
88 RETURN_IF_IERROR(bejEncodeNnint(node->leaf.metaData.vSize, output)); in bejEncodeBejEnum()
90 return bejEncodeNnint(node->enumValueSeq, output); in bejEncodeBejEnum()
93 int bejEncodeBejString(struct RedfishPropertyLeafString* node, in bejEncodeBejString() argument
98 bejEncodeNnint(node->leaf.metaData.sequenceNumber, output)); in bejEncodeBejString()
100 RETURN_IF_IERROR(bejEncodeFormat(&node->leaf.nodeAttr.format, output)); in bejEncodeBejString()
102 RETURN_IF_IERROR(bejEncodeNnint(node->leaf.metaData.vSize, output)); in bejEncodeBejString()
104 return output->recvOutput((void*)node->value, node->leaf.metaData.vSize, in bejEncodeBejString()
105 output->handlerContext); in bejEncodeBejString()
108 int bejEncodeBejReal(struct RedfishPropertyLeafReal* node, in bejEncodeBejReal() argument
113 bejEncodeNnint(node->leaf.metaData.sequenceNumber, output)); in bejEncodeBejReal()
115 RETURN_IF_IERROR(bejEncodeFormat(&node->leaf.nodeAttr.format, output)); in bejEncodeBejReal()
117 RETURN_IF_IERROR(bejEncodeNnint(node->leaf.metaData.vSize, output)); in bejEncodeBejReal()
121 bejEncodeNnint(bejIntLengthOfValue(node->bejReal.whole), output)); in bejEncodeBejReal()
123 RETURN_IF_IERROR(bejEncodeInteger(node->bejReal.whole, output)); in bejEncodeBejReal()
125 RETURN_IF_IERROR(bejEncodeNnint(node->bejReal.zeroCount, output)); in bejEncodeBejReal()
127 RETURN_IF_IERROR(bejEncodeNnint(node->bejReal.fract, output)); in bejEncodeBejReal()
129 RETURN_IF_IERROR(bejEncodeNnint(node->bejReal.expLen, output)); in bejEncodeBejReal()
130 if (node->bejReal.expLen > 0) in bejEncodeBejReal()
133 RETURN_IF_IERROR(bejEncodeNnint(node->bejReal.expLen, output)); in bejEncodeBejReal()
134 RETURN_IF_IERROR(bejEncodeInteger(node->bejReal.exp, output)); in bejEncodeBejReal()
139 int bejEncodeBejBool(struct RedfishPropertyLeafBool* node, in bejEncodeBejBool() argument
144 bejEncodeNnint(node->leaf.metaData.sequenceNumber, output)); in bejEncodeBejBool()
146 RETURN_IF_IERROR(bejEncodeFormat(&node->leaf.nodeAttr.format, output)); in bejEncodeBejBool()
148 RETURN_IF_IERROR(bejEncodeNnint(node->leaf.metaData.vSize, output)); in bejEncodeBejBool()
150 uint8_t value = node->value ? 0xFF : 0x00; in bejEncodeBejBool()
151 return output->recvOutput(&value, /*data_size=*/sizeof(uint8_t), in bejEncodeBejBool()
152 output->handlerContext); in bejEncodeBejBool()
155 int bejEncodeBejProAnno(struct RedfishPropertyParent* node, in bejEncodeBejProAnno() argument
159 RETURN_IF_IERROR(bejEncodeNnint(node->metaData.sequenceNumber, output)); in bejEncodeBejProAnno()
161 RETURN_IF_IERROR(bejEncodeFormat(&node->nodeAttr.format, output)); in bejEncodeBejProAnno()
163 return bejEncodeNnint(node->metaData.vSize, output); in bejEncodeBejProAnno()
169 int bejEncodeBejNull(struct RedfishPropertyLeafNull* node, in bejEncodeBejNull() argument
174 bejEncodeNnint(node->leaf.metaData.sequenceNumber, output)); in bejEncodeBejNull()
176 RETURN_IF_IERROR(bejEncodeFormat(&node->leaf.nodeAttr.format, output)); in bejEncodeBejNull()
178 return bejEncodeNnint(node->leaf.metaData.vSize, output); in bejEncodeBejNull()
182 * @brief Encode the provided node.
184 static int bejEncodeNode(void* node, struct BejEncoderOutputHandler* output) in bejEncodeNode() argument
186 struct RedfishPropertyNode* nodeInfo = node; in bejEncodeNode()
187 switch (nodeInfo->format.principalDataType) in bejEncodeNode()
190 RETURN_IF_IERROR(bejEncodeBejSetOrArray(node, output)); in bejEncodeNode()
193 RETURN_IF_IERROR(bejEncodeBejSetOrArray(node, output)); in bejEncodeNode()
196 RETURN_IF_IERROR(bejEncodeBejNull(node, output)); in bejEncodeNode()
199 RETURN_IF_IERROR(bejEncodeBejInteger(node, output)); in bejEncodeNode()
202 RETURN_IF_IERROR(bejEncodeBejEnum(node, output)); in bejEncodeNode()
205 RETURN_IF_IERROR(bejEncodeBejString(node, output)); in bejEncodeNode()
208 RETURN_IF_IERROR(bejEncodeBejReal(node, output)); in bejEncodeNode()
211 RETURN_IF_IERROR(bejEncodeBejBool(node, output)); in bejEncodeNode()
214 RETURN_IF_IERROR(bejEncodeBejProAnno(node, output)); in bejEncodeNode()
217 fprintf(stderr, "Unsupported node type: %d\n", in bejEncodeNode()
218 nodeInfo->format.principalDataType); in bejEncodeNode()
219 return -1; in bejEncodeNode()
230 // Before pushing the parent node, initialize its nextChild as the first in bejPushParentToStack()
231 // child. in bejPushParentToStack()
232 parent->metaData.nextChild = parent->firstChild; in bejPushParentToStack()
233 return stack->stackPush(parent, stack->stackContext); in bejPushParentToStack()
237 * @brief Process all the child nodes of a parent.
243 // Get the next child of the parent. in bejProcessChildNodes()
244 void* childPtr = parent->metaData.nextChild; in bejProcessChildNodes()
248 // First encode the current child node. in bejProcessChildNodes()
250 // If this child node has its own children, add it to the stack and in bejProcessChildNodes()
252 // node before continuing to encode the child nodes of the current in bejProcessChildNodes()
257 // Update the next child of the current parent we need to in bejProcessChildNodes()
270 * The node metadata should be initialized before using this function.
276 // We need to encode a parent node before its child nodes. So encoding the in bejEncodeTree()
279 // Once the root is encoded, push it to the stack used to traverse the child in bejEncodeTree()
280 // nodes. We need to keep a parent in this stack until all the child nodes in bejEncodeTree()
281 // of this parent has been encoded. Only then we remove the parent node from in bejEncodeTree()
285 while (!stack->stackEmpty(stack->stackContext)) in bejEncodeTree()
288 stack->stackPeek(stack->stackContext); in bejEncodeTree()
290 // Encode all the child nodes of the current parent node. If one of in bejEncodeTree()
291 // these child nodes has its own child nodes, that child node will be in bejEncodeTree()
294 // (after processing all the nodes under the child node added to the in bejEncodeTree()
298 // If a new node hasn't been added to the stack by in bejEncodeTree()
299 // bejProcessChildNodes(), we know that this parent's child nodes have in bejEncodeTree()
300 // been processed. If a new node has been added, then next we need to in bejEncodeTree()
301 // process the children of the newly added node. in bejEncodeTree()
302 if (parent != stack->stackPeek(stack->stackContext)) in bejEncodeTree()
306 stack->stackPop(stack->stackContext); in bejEncodeTree()
319 NULL_CHECK(dictionaries->schemaDictionary, "schemaDictionary"); in bejEncode()
320 NULL_CHECK(dictionaries->annotationDictionary, "annotationDictionary"); in bejEncode()
327 // Assert root node. in bejEncode()
328 if (root->nodeAttr.format.principalDataType != bejSet) in bejEncode()
330 fprintf(stderr, "Invalid root node\n"); in bejEncode()
331 return -1; in bejEncode()
334 // First we need to encode a parent node before its child nodes. But before in bejEncode()
335 // encoding the parent node, the encoder has to figure out the total size in bejEncode()
336 // need to encode the parent's child nodes. Therefore first the encoder need in bejEncode()
337 // to visit the child nodes and calculate the size need to encode them in bejEncode()
338 // before producing the encoded bytes for the parent node. in bejEncode()
340 // So first the encoder will visit child nodes and calculate the size need in bejEncode()
341 // to encode each child node. Then store this information in metadata in bejEncode()
342 // properties in each node struct. in bejEncode()
343 // Next the encoder will again visit each node starting from the parent in bejEncode()
344 // node, and produce the encoded bytes. in bejEncode()
346 // First calculate metadata for encoding each node. in bejEncode()
354 output->recvOutput(&version, sizeof(uint32_t), output->handlerContext)); in bejEncode()
356 RETURN_IF_IERROR(output->recvOutput(&reserved, sizeof(uint16_t), in bejEncode()
357 output->handlerContext)); in bejEncode()
358 RETURN_IF_IERROR(output->recvOutput(&schemaClass, sizeof(uint8_t), in bejEncode()
359 output->handlerContext)); in bejEncode()