⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ref.pm

📁 platform file from motorola kernel code
💻 PM
字号:
# The source files are wholly original Motorola proprietary work now being # licensed as BSD, the following Copyright Notice will be added to each source # code file, documentation and other materials with the distribution:# #       Copyright  2006, Motorola, All Rights Reserved.# # This program is licensed under a BSD license with the following terms:# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met:## - Redistributions of source code must retain the above copyright notice, #   this list of conditions and the following disclaimer. ## - Redistributions in binary form must reproduce the above copyright notice, #   this list of conditions and the following disclaimer in the documentation #   and/or other materials provided with the distribution. ## - Neither the name of the MOTOROLA nor the names of its contributors may be #   used to endorse or promote products derived from this software without #   specific prior written permission.### THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE.#package Ref;#==============================================================================##    General Description:#    Provides deep copy functionality##==============================================================================use strict;use Symbol ();use overload ();sub copy {	my ($ref,$_depth,$_cache) = @_;	my $class = ref($ref);	return($ref) if ($class eq '');	# for class function usage, force object method to be invoked if present	return _copy($ref,$_depth,$_cache) unless $_depth++;	my $copy;	my $addr = overload::StrVal($ref);	if (exists($_cache->{$addr})) {		$copy = ${$_cache->{$addr}};	} else {		$_cache->{$addr} = \$copy;		my ($class,$type) = ($addr =~ /^(?:(.*)=)?(.*)\(/o);		if ($type eq 'HASH') {			$copy = {};			while (my ($k,$v) = each(%$ref)) {				$copy->{$k} = _copy($v,$_depth,$_cache);			}		} elsif ($type eq 'ARRAY') {			$copy = [];			for my $i (0..$#$ref) {				$copy->[$i] = _copy($ref->[$i],$_depth,$_cache) if (					exists($ref->[$i])				);			}		} elsif ($type eq 'GLOB') {			$copy = Symbol::gensym;			*$copy = *$ref;		} elsif ($type eq 'SCALAR') {			$$copy = $$ref;		} elsif ($type eq 'REF') {			$copy = \_copy($$ref,++$_depth,$_cache);		} elsif ($type eq 'CODE') {			$copy = $ref;		} else {			die("unable to copy: $ref");		}		bless($copy,$class) if defined($class);	}	$copy;}sub _copy { UNIVERSAL::isa($_[0],__PACKAGE__)  ? shift->copy(@_) : &copy }1;__END__ =head1 NAMERef - provides deep copy for objects and references=head1 SYNOPSIS  use Ref;  my $copy = Ref::copy($ref);  package Object;  use base 'Ref';  ...  my $obj = Object->new;  my $copy = $obj->copy;=head1 DESCRIPTIONThis module provides a means to deep copy objects or references.  TheC<copy> routine may be invoked as either a class function or an objectmethod which subclasses may wish to override.=head1 AUTHORDaryn SharpWorldwide Software Development(c) Copyright Motorola 2002, All Rights Reserved

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -