blob: 11a2335e6b2de5d70c3693ed58a9097b89073dd8 [file] [log] [blame]
#!/usr/bin/perl
#
# Filename:
# ---------
# DataManipulation.pl
#
# Description:
# ------------
# Functions for data manipulation.
#
# Auther:
# -------
# Shinn Lin
#
# Note:
# -----
# none.
#
# Log:
# -----
# 2007/05/04 Create.
#
#BEGIN { push @INC, 'U:\\00MyPerlLib'} # add additional library path
package DataManipulation; # declare package library
use strict;
#******************************************************************************
# Global Data
#******************************************************************************
#******************************************************************************
# Export Function
#******************************************************************************
return 1; # return true
#******************************************************************************
# FUNCTION
# clone
# DESCRIPTION
# clone data from source to destination
# PARAMETERS
# para 1 - reference to source data
# para 2 - reference to destination data
# RETURNS
# none
#******************************************************************************
sub clone()
{
my $src_ref;
my $dest_ref;
($src_ref, $dest_ref) = @_;
# check if types of src and dest are the same
die "can't clone different type [".ref($src_ref)."][".ref($dest_ref)."]\n" if (ref($src_ref) ne ref($dest_ref));
# clone reference-to-hash
if (ref($src_ref) eq "HASH")
{
%{$dest_ref} = ();
while (my ($key, $value) = (each %{$src_ref}))
{
if(ref($value) eq "HASH")
{
%{${$dest_ref}{$key}} = ();
clone( $value, \%{${$dest_ref}{$key}});
}
elsif (ref($value) eq "ARRAY")
{
@{${$dest_ref}{$key}} = ();
clone( $value, \@{${$dest_ref}{$key}});
}
else
{
${$dest_ref}{$key} = $value;
}
}
}
# clone reference-to-array
elsif (ref($src_ref) eq "ARRAY")
{
@{$dest_ref} = ();
for (my $i=0; $i<scalar(@{$src_ref}); $i++)
{
if(ref(${$src_ref}[$i]) eq "HASH")
{
%{${$dest_ref}[$i]} = ();
clone( ${$src_ref}[$i], \%{${$dest_ref}[$i]});
}
elsif (ref(${$src_ref}[$i]) eq "ARRAY")
{
@{${$dest_ref}[$i]} = ();
clone( ${$src_ref}[$i], \@{${$dest_ref}[$i]});
}
else
{
${$dest_ref}[$i] = ${$src_ref}[$i];
}
}
}
else
{
$$src_ref = $$dest_ref;
}
}
sub printObject()
{
my $src_ref;
($src_ref) = @_;
# clone reference-to-hash
if (ref($src_ref) eq "HASH")
{
while(my ($key, $value) = (each %{$src_ref}))
{
print $src_ref."[".$key."] = ".$value."\n";
if((ref($value) eq "HASH") || (ref($value) eq "ARRAY"))
{
&printObject($value);
}
}
}
# clone reference-to-array
elsif(ref($src_ref) eq "ARRAY")
{
for (my $i=0; $i<scalar(@{$src_ref}); $i++)
{
print $src_ref."[".$i."] = ".${$src_ref}[$i]."\n";
if((ref(${$src_ref}[$i]) eq "HASH") || (ref(${$src_ref}[$i]) eq "ARRAY"))
{
&printObject(${$src_ref}[$i]);
}
}
}
else
{
}
}
#******************************************************************************
# Internal Data
#******************************************************************************
#******************************************************************************
# Program Start
#******************************************************************************
#******************************************************************************
# Internal Function
#******************************************************************************
#******************************************************************************
# FUNCTION
# xxx
# DESCRIPTION
# xxx
# PARAMETERS
# xxx
# RETURNS
# xxx
#******************************************************************************
#******************************************************************************
# FUNCTION
# timeCheck
# DESCRIPTION
# print current time (in sec.) and time-difference to previous check if exists
# PARAMETERS
# none
# RETURNS
# current time and time difference if exists (both in sec.)
#******************************************************************************
my $timePrev = 0;
sub timeCheck()
{
my $prePrintStr;
my $postPrintStr;
my $timeCurr = time();
my $timeDiff = 0;
($prePrintStr, $postPrintStr) = @_;
print "$prePrintStr" if ($prePrintStr ne "");
print "[Time: ".$timeCurr." sec.";
if ($timePrev > 0) # previous-time exists
{
$timeDiff = $timeCurr - $timePrev;
print "(Diff = $timeDiff)";
}
print "]";
print "$postPrintStr" if ($postPrintStr ne "");
print "\n\n";
$timePrev = $timeCurr;
return $timeDiff;
}