+# ----------------------------------------------------------------------------
+
+package ZOOM::ScanSet;
+
+sub new {
+ my $class = shift();
+ die "You can't create $class objects directly";
+}
+
+# PRIVATE to ZOOM::Connection::scan(),
+sub _new {
+ my $class = shift();
+ my($conn, $startterm, $_ss) = @_;
+
+ return bless {
+ conn => $conn,
+ startterm => $startterm,
+ _ss => $_ss,
+ }, $class;
+}
+
+# PRIVATE to this class
+sub _ss {
+ my $this = shift();
+
+ my $_ss = $this->{_ss};
+ die "{_ss} undefined: has this ScanSet been destroy()ed?"
+ if !defined $_ss;
+
+ return $_ss;
+}
+
+sub size {
+ my $this = shift();
+
+ return Net::Z3950::ZOOM::scanset_size($this->_ss());
+}
+
+sub term {
+ my $this = shift();
+ my($which) = @_;
+
+ my($occ, $len) = (0, 0);
+ my $term = Net::Z3950::ZOOM::scanset_term($this->_ss(), $which,
+ $occ, $len);
+ return undef if !defined $term;
+ die "length of term '$term' differs from returned len=$len"
+ if length($term) != $len;
+
+ return ($term, $occ);
+}
+
+sub display_term {
+ my $this = shift();
+ my($which) = @_;
+
+ my($occ, $len) = (0, 0);
+ my $term = Net::Z3950::ZOOM::scanset_display_term($this->_ss(), $which,
+ $occ, $len);
+ return undef if !defined $term;
+ die "length of display term '$term' differs from returned len=$len"
+ if length($term) != $len;
+
+ return ($term, $occ);
+}
+
+sub destroy {
+ my $this = shift();
+
+ Net::Z3950::ZOOM::scanset_destroy($this->_ss());
+ $this->{_ss} = undef;
+}
+
+