lm_message_node.c
changeset 8 951f92c66821
parent 7 5db1448eb857
child 11 a8c6460d612b
equal deleted inserted replaced
7:5db1448eb857 8:951f92c66821
   189 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
   189 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
   190 	lua_pushstring (L, lm_message_node_to_string (node));
   190 	lua_pushstring (L, lm_message_node_to_string (node));
   191 	return 1;
   191 	return 1;
   192 }
   192 }
   193 
   193 
       
   194 /// message_node:path
       
   195 /// Returns node with specified path to it.
       
   196 /// If any element in a path cannot be found, it returns nil.
       
   197 /// A: string (node name), ...
       
   198 /// R: lm message node object or nil
       
   199 int llm_message_node_path (lua_State *L)
       
   200 {
       
   201 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
       
   202 	int i = 1;
       
   203 	while (i++ < lua_gettop (L)) {
       
   204 		node = lm_message_node_get_child (node, luaL_checkstring (L, i));
       
   205 		if (node == NULL) {
       
   206 			lua_pushnil (L);
       
   207 			return 1;
       
   208 		}
       
   209 	}
       
   210 	llm_message_node_bless (L, node);
       
   211 	// XXX lm_message_node_unref (child);
       
   212 	return 1;
       
   213 }
       
   214 
   194 /// message_node:pointer
   215 /// message_node:pointer
   195 /// Returns pointer to underlying C structure.
   216 /// Returns pointer to underlying C structure.
   196 /// R: lightuserdata
   217 /// R: lightuserdata
   197 static int llm_message_node_pointer (lua_State *L)
   218 static int llm_message_node_pointer (lua_State *L)
   198 {
   219 {
   224 	{ "child",      llm_message_node_child      },
   245 	{ "child",      llm_message_node_child      },
   225 	{ "find_child", llm_message_node_find_child },
   246 	{ "find_child", llm_message_node_find_child },
   226 	{ "attribute",  llm_message_node_attribute  },
   247 	{ "attribute",  llm_message_node_attribute  },
   227 	{ "raw",        llm_message_node_raw        },
   248 	{ "raw",        llm_message_node_raw        },
   228 	{ "xml",        llm_message_node_xml        },
   249 	{ "xml",        llm_message_node_xml        },
       
   250 	{ "path",       llm_message_node_path       },
   229 	{ "pointer",    llm_message_node_pointer    },
   251 	{ "pointer",    llm_message_node_pointer    },
   230 	{ "__gc",       llm_message_node_gc         },
   252 	{ "__gc",       llm_message_node_gc         },
   231 	{ NULL,         NULL                        },
   253 	{ NULL,         NULL                        },
   232 };
   254 };
   233 
   255