001 /** 002 * Implements the CFML Function structcopy 003 */ 004 package railo.runtime.functions.struct; 005 006 import railo.runtime.PageContext; 007 import railo.runtime.exp.PageException; 008 import railo.runtime.ext.function.Function; 009 import railo.runtime.op.Duplicator; 010 import railo.runtime.type.Array; 011 import railo.runtime.type.Collection; 012 import railo.runtime.type.Struct; 013 import railo.runtime.type.util.CollectionUtil; 014 015 public final class StructCopy implements Function { 016 public static Object call(PageContext pc , Struct src) throws PageException { 017 018 Collection trg = (Collection) Duplicator.duplicate(src,false); 019 Collection.Key[] keys=CollectionUtil.keys(trg); 020 Collection.Key key; 021 Object o; 022 for(int i=0;i<keys.length;i++) { 023 key=keys[i]; 024 o=src.get(key,null); 025 if(o instanceof Array) 026 trg.set(key,Duplicator.duplicate(o,false)); 027 } 028 return trg; 029 } 030 }