sub
TIEARRAY {
my
(
$class
,
$list
,
@rest
) =
@_
;
my
$self
=
$class
->new(
@rest
);
$self
->__set_data(
$list
);
return
$self
;
}
sub
FETCH {
my
(
$self
,
$index
) =
@_
;
$self
->lindex(
$self
->__get_data,
$index
);
}
sub
FETCHSIZE {
my
(
$self
) =
@_
;
$self
->llen(
$self
->__get_data);
}
sub
STORE {
my
(
$self
,
$index
,
$value
) =
@_
;
$self
->lset(
$self
->__get_data,
$index
,
$value
);
}
sub
STORESIZE {
my
(
$self
,
$count
) =
@_
;
$self
->ltrim(
$self
->__get_data, 0,
$count
);
}
sub
CLEAR {
my
(
$self
) =
@_
;
$self
->del(
$self
->__get_data);
}
sub
PUSH {
my
$self
=
shift
;
my
$list
=
$self
->__get_data;
$self
->rpush(
$list
,
$_
)
for
@_
;
}
sub
POP {
my
$self
=
shift
;
$self
->rpop(
$self
->__get_data);
}
sub
SHIFT {
my
(
$self
) =
@_
;
$self
->lpop(
$self
->__get_data);
}
sub
UNSHIFT {
my
$self
=
shift
;
my
$list
=
$self
->__get_data;
$self
->lpush(
$list
,
$_
)
for
@_
;
}
sub
SPLICE {
my
(
$self
,
$offset
,
$length
) =
@_
;
$self
->lrange(
$self
->__get_data,
$offset
,
$length
);
}
sub
EXTEND {
my
(
$self
,
$count
) =
@_
;
$self
->rpush(
$self
->__get_data,
''
)
for
(
$self
->FETCHSIZE .. (
$count
- 1));
}
sub
DESTROY {
$_
[0]->quit }
1;