|
||||||
SUMMARY: CHILDREN | PARAMETER | INSTPROC | INSTFILTER | INSTFORWARD | DETAIL: | INSTPROC |
::xotcl::Object
Variables | |||
Name | Default Value | Class | Comment |
dest |
"" | ::xotcl::Object::CopyHandler | |
objLength |
::xotcl::Object::CopyHandler | ||
targetList |
"" | ::xotcl::Object::CopyHandler |
Methods | |
Name | Comment |
copy {obj dest}
| Perform a deep copy of the object/class (with all information, like class, parameter, filter, etc) to "newName" |
copyNSVarsAndCmds {orig dest}
| |
copyTargets {}
| |
getDest {origin}
| |
makeTargetList {t}
|
Methods from ::xotcl::Object |
#, ., ?, ?code, ?methods, ?object, abstract, copy, coverageFilter, defaultmethod, extractConfigureArg, filterappend, get#, getClean#, hasclass, init, methodTag, mixinappend, move, profileFilter, self, setParameterDefaults, shell, tclcmd, traceFilter,
|
Instproc Detail |
Perform a deep copy of the object/class (with all information, like class, parameter, filter, etc) to "newName".
obj
dest
::xotcl::Object::CopyHandler instproc copy {obj dest} { ::xotcl::my set objLength [string length $obj] ::xotcl::my set dest $dest ::xotcl::my makeTargetList $obj ::xotcl::my copyTargets }
orig
dest
::xotcl::Object::CopyHandler instproc copyNSVarsAndCmds {orig dest} { ::xotcl::namespace_copyvars $orig $dest ::xotcl::namespace_copycmds $orig $dest }
::xotcl::Object::CopyHandler instproc copyTargets {} { foreach origin [::xotcl::my set targetList] { set dest [::xotcl::my getDest $origin] if {[::xotcl::my isobject $origin]} { if {[::xotcl::my isclass $origin]} { set cl [[$origin info class] create $dest -noinit] set obj $cl $cl superclass [$origin info superclass] $cl parameterclass [$origin info parameterclass] $cl parameter [$origin info parameter] $cl instinvar [$origin info instinvar] $cl instfilter [$origin info instfilter -guards] $cl instmixin [$origin info instmixin] my copyNSVarsAndCmds ::xotcl::classes::$origin ::xotcl::classes::$dest} else { set obj [[$origin info class] create $dest -noinit]} $obj invar [$origin info invar] $obj check [$origin info check] $obj mixin [$origin info mixin] $obj filter [$origin info filter -guards] if {[$origin info hasNamespace]} { $obj requireNamespace}} else { namespace eval $dest {}} ::xotcl::my copyNSVarsAndCmds $origin $dest} }
origin
::xotcl::Object::CopyHandler instproc getDest {origin} { set tail [string range $origin [::xotcl::my set objLength] end] return ::[string trimleft [::xotcl::my set dest]$tail :] }
t
::xotcl::Object::CopyHandler instproc makeTargetList {t} { ::xotcl::my lappend targetList $t if {[::xotcl::my isobject $t]} { if {[$t info hasNamespace]} { set children [$t info children]} else { return}} foreach c [namespace children $t] { if {![::xotcl::my isobject $c]} { lappend children [namespace children $t]}} foreach c $children { ::xotcl::my makeTargetList $c} }