@@ -288,6 +288,67 @@ zend_long php_dom_get_nodelist_length(dom_object *obj)
288288 return count ;
289289}
290290
291+ void php_dom_create_obj_map (dom_object * basenode , dom_object * intern , xmlHashTablePtr ht , zend_string * local , zend_string * ns , const php_dom_obj_map_handler * handler )
292+ {
293+ dom_nnodemap_object * mapptr = intern -> ptr ;
294+
295+ ZEND_ASSERT (basenode != NULL );
296+
297+ ZVAL_OBJ_COPY (& mapptr -> baseobj_zv , & basenode -> std );
298+
299+ xmlDocPtr doc = basenode -> document ? basenode -> document -> ptr : NULL ;
300+
301+ mapptr -> handler = handler ;
302+ mapptr -> baseobj = basenode ;
303+ mapptr -> ht = ht ;
304+ if (EXPECTED (doc != NULL )) {
305+ mapptr -> dict = doc -> dict ;
306+ xmlDictReference (doc -> dict );
307+ }
308+
309+ const xmlChar * tmp ;
310+
311+ if (local ) {
312+ int len = (int ) ZSTR_LEN (local );
313+ if (doc != NULL && (tmp = xmlDictExists (doc -> dict , (const xmlChar * )ZSTR_VAL (local ), len )) != NULL ) {
314+ mapptr -> local = BAD_CAST tmp ;
315+ } else {
316+ mapptr -> local = BAD_CAST ZSTR_VAL (zend_string_copy (local ));
317+ mapptr -> release_local = true;
318+ }
319+ mapptr -> local_lower = zend_string_tolower (local );
320+ }
321+
322+ if (ns ) {
323+ int len = (int ) ZSTR_LEN (ns );
324+ if (doc != NULL && (tmp = xmlDictExists (doc -> dict , (const xmlChar * )ZSTR_VAL (ns ), len )) != NULL ) {
325+ mapptr -> ns = BAD_CAST tmp ;
326+ } else {
327+ mapptr -> ns = BAD_CAST ZSTR_VAL (zend_string_copy (ns ));
328+ mapptr -> release_ns = true;
329+ }
330+ }
331+ }
332+
333+ void php_dom_obj_map_get_item_into_zval (dom_nnodemap_object * objmap , zend_long index , zval * return_value )
334+ {
335+ if (EXPECTED (objmap )) {
336+ objmap -> handler -> get_item (objmap , index , return_value );
337+ } else {
338+ RETURN_NULL ();
339+ }
340+ }
341+
342+ void php_dom_obj_map_get_named_item_into_zval (dom_nnodemap_object * objmap , const zend_string * named , const char * ns , zval * return_value )
343+ {
344+ xmlNodePtr itemnode = objmap -> handler -> get_named_item (objmap , named , ns );
345+ if (itemnode ) {
346+ DOM_RET_OBJ (itemnode , objmap -> baseobj );
347+ } else {
348+ RETURN_NULL ();
349+ }
350+ }
351+
291352/**********************
292353 * === Named item === *
293354 **********************/
0 commit comments