|
NAMEGenezzo::Block::RDBlkA.pm - Row Directory Block Adjunct tied hash class. This class adds array-like splice capabilities to Genezzo::Block::RDBlock. Genezzo::Block::RDBArray uses this class as the basis of a tied array. Note: Like its parent RDBlock, this class is almost, but not quite, a pushhash. SYNOPSIS use Genezzo::Block::RDBlkA;
use Genezzo::Block::Std;
local $Genezzo::Block::Std::DEFBLOCKSIZE = 500;
my $buff = "\0" x 500; # construct an empty byte buffer
my %tied_hash = ();
my $tie_val =
tie %tied_hash, 'Genezzo::Block::RDBlkA', (refbufstr => \$buff);
# pushhash style
# (note that the "PUSH" pseudo key is not supported)...
my $newkey = $tie_val->HPush("this is a test");
# or array style, your choice
my $pushcount = $tie_val->PUSH(qw(push lots of data));
$tied_hash{$newkey} = "update this entry";
# a hash that supports array style FETCHSIZE
my $getcount = $tie_val->FETCHSIZE(); # Note: not HCount
# splice it
my $err_str;
my @a1 = $tie_val->HeSplice(\$err_str, 5, 3, qw(more stuff to splice));
DESCRIPTIONRDBlkA adds array-like splice capabilities to RDBlock, violating the standard hash abstraction. Splicing values resets hash keys, treating them more like array offsets. If you want to use a hash, use RDBlock or "Genezzo::Row::RSBlock". If you want to use an array, use "Genezzo::Block::RDBArray". FUNCTIONSRDBlkA support all standard hash operations, with the exception that you cannot create or insert a user key -- you must push new entries and use the generated key or basic iteration to retrieve your data. In addition to the RDBlock standard public methods, RDBlkA adds HSplice and HeSplice.
LIMITATIONSThe effort to convert a set of potentially sparse hash keys to array indexes is O(n), which ain't cheap. See Genezzo::Block::RDBlk_NN as an alternative -- imposing certain restrictions on the array contents and usage makes it possible to perform this conversion at O(1). EXPORTnone TODOAUTHORJeffrey I. Cohen, jcohen@genezzo.com SEE ALSOperl(1). Copyright (c) 2003, 2004 Jeffrey I Cohen. All rights reserved. This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Address bug reports and comments to: jcohen@genezzo.com For more information, please visit the Genezzo homepage at <http://www.genezzo.com>
|