# -*- Mode: Perl -*-
#
# Stream.pm - Redland Perl RDF Stream module
#
# Copyright (C) 2000-2003 David Beckett - http://www.dajobe.org/
# Copyright (C) 2000-2003 University of Bristol - http://www.bristol.ac.uk/
#
# This package is Free Software and part of Redland http://librdf.org/
#
# It is licensed under the following three licenses as alternatives:
# 1. GNU Lesser General Public License (LGPL) V2.1 or any newer version
# 2. GNU General Public License (GPL) V2 or any newer version
# 3. Apache License, V2.0 or any newer version
#
# You may not use this file except in compliance with at least one of
# the above three licenses.
#
# See LICENSE.html or LICENSE.txt at the top of this package for the
# full license terms.
#
#
#
package RDF::Redland::Stream;
use strict;
use RDF::Redland::Statement;
=pod
=head1 NAME
RDF::Redland::Stream - Redland RDF Stream of RDF::Redland::Statement objects Class
=head1 SYNOPSIS
use RDF::Redland;
...
my $stream=$model->serialise;
while($stream && !$stream->end) {
my $statement=$stream->current;
...
$stream->next;
}
=head1 DESCRIPTION
Represents a sequence of RDF::Redland::Statement objects passed between
various Redland objects.
=cut
######################################################################
=pod
=head1 CONSTRUCTORS
No public constructors - are created and returned from various methods
of classes including RDF::Redland::Model and RDF::Redland::Parser
=cut
sub new ($$$) {
my($proto,$object,$creator)=@_;
my $class = ref($proto) || $proto;
my $self = {};
$self->{STREAM}=$object;
# Keep around a reference to the object that created the stream so
# that perl destroys us before it.
$self->{CREATOR}=$creator;
bless ($self, $class);
return $self;
}
# DESTRUCTOR
sub DESTROY ($) {
my $self=shift;
warn "RDF::Redland::Stream DESTROY $self" if $RDF::Redland::Debug;
&RDF::Redland::CORE::librdf_free_stream($self->{STREAM})
if($self->{STREAM});
$self->{CREATOR}=undef;
warn "RDF::Redland::Stream DESTROY done\n" if $RDF::Redland::Debug;
}
=head1 METHODS
=over
=item end
Returns non 0 if the stream is finished.
=cut
sub end ($) {
my $self=shift;
return 1 if !$self->{STREAM};
&RDF::Redland::CORE::librdf_stream_end($self->{STREAM});
}
=item current
Returns the current RDF::Redland::Statement object in the stream or undef if
the stream is finished.
=cut
sub current ($) {
my $self=shift;
return undef if !$self->{STREAM};
my $statement=&RDF::Redland::CORE::librdf_stream_get_object($self->{STREAM});
RDF::Redland::Statement->_new_from_object($statement);
}
=pod
=item next
Moves to the next RDF::Redland::Statement object in the stream.
Returns non-zero if the stream is finished.
=cut
sub next ($) {
my $self=shift;
return 1 if !$self->{STREAM};
return &RDF::Redland::CORE::librdf_stream_next($self->{STREAM});
}
=item context
Returns the context RDF::Redland::Node object in the stream or undef if
the stream is finished.
=cut
sub context ($) {
my $self=shift;
return undef if !$self->{STREAM};
my $object=&RDF::Redland::CORE::librdf_stream_get_context($self->{STREAM});
RDF::Redland::Node->_new_from_object($object);
}
=pod
=back
=head1 SEE ALSO
L<RDF::Redland::Model> and L<RDF::Redland::Parser>
=head1 AUTHOR
Dave Beckett - http://www.dajobe.org/
=cut
1;