lm_message_node.c
changeset 14 4cb715fed99b
parent 12 63f06a23c235
child 16 09b375e9ce32
equal deleted inserted replaced
13:8f502c1477ac 14:4cb715fed99b
    59 	return 1;
    59 	return 1;
    60 }
    60 }
    61 
    61 
    62 /// message_node:children
    62 /// message_node:children
    63 /// Gets first child node (raw access used).
    63 /// Gets first child node (raw access used).
       
    64 /// Note: this method is deprecated and soon will be removed.
       
    65 /// Use child without arguments instead.
    64 /// R: lm message node object or nil
    66 /// R: lm message node object or nil
    65 int children_lm_node (lua_State *L)
    67 int children_lm_node (lua_State *L)
    66 {
    68 {
    67 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
    69 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
    68 	LmMessageNode *child = node->children;
    70 	LmMessageNode *child = node->children;
   103 	return 1;
   105 	return 1;
   104 }
   106 }
   105 
   107 
   106 /// message_node:child
   108 /// message_node:child
   107 /// Gets or creates child node object with given name.
   109 /// Gets or creates child node object with given name.
   108 /// A: string (name), string (optional value)
   110 /// If name is omitted, first child node is returned.
       
   111 /// A: string (name, optional), string (optional value)
   109 /// R: lm message node object or nil
   112 /// R: lm message node object or nil
   110 int child_lm_node (lua_State *L)
   113 int child_lm_node (lua_State *L)
   111 {
   114 {
   112 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
   115 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
   113 	const char *name = luaL_checkstring (L, 2);
       
   114 	LmMessageNode *child;
   116 	LmMessageNode *child;
   115 
   117 	int            top  = lua_gettop (L);
   116 	if (lua_gettop (L) > 2) // Add
   118 	if (top > 1) {
   117 		child = lm_message_node_add_child (node, name,
   119 		const char *name = luaL_checkstring (L, 2);
   118 						   luaL_checkstring (L, 3));
   120 
   119 	else { // Get
   121 		if (top > 2) // Add
   120 		child = lm_message_node_get_child (node, name);
   122 			child = lm_message_node_add_child (node, name,
   121 		if (!child) {
   123 							   luaL_checkstring (L, 3));
   122 			lua_pushnil (L);
   124 		else // Get
   123 			return 1;
   125 			child = lm_message_node_get_child (node, name);
   124 		}
   126 	} else
   125 	}
   127 		child = node->children;
   126 	bless_lm_node (L, child);
   128 
   127 	// XXX lm_message_node_unref (child);
   129 	if (child)
       
   130 		bless_lm_node (L, child);
       
   131 		// XXX lm_message_node_unref (child); // may be necessary on _get/_add'ed nodes
       
   132 	else
       
   133 		lua_pushnil (L);
   128 	return 1;
   134 	return 1;
   129 }
   135 }
   130 
   136 
   131 /// message_node:find_child
   137 /// message_node:find_child
   132 /// Searches for node with a given name over all node subtree.
   138 /// Searches for node with a given name over all node subtree.