In an recent work, I have to compare two splitted regions, and found the intersection (or substraction, etc) of it. To achieve this, I used string masking system like below:
my $region1=[[1,2],[5,7]];
my $region2=[[2,6]];
my $mask1=&toMask($region1); # 1100111
my $mask2=&toMask($region2); # 0111110
my $mask3=&maskAND($region1,$region2); # 0100110
sub toMask {
my @regions=@_;
my @result;
foreach my $curr (@regions) {
for (my $i=$curr->[0];$i<=$curr->[1];$i++) {
$result[$i-1]=1;
}
}
for (my $i=0;$i<@result;$i++) {
$result[$i]=0 if ($result[$i]!=1);
}
return join "",@result;
}
However, when the region is big, the masking string becomes critically large and caused memory problem. So how can I pack the region AoA to some binary thing directly?
Thanks!