X-Git-Url: https://git.decadent.org.uk/gitweb/?p=videolink.git;a=blobdiff_plain;f=child_iterator.cpp;fp=child_iterator.cpp;h=d6e708e857aaff41084de771fafd350d257719ea;hp=0000000000000000000000000000000000000000;hb=0acb5f1329d294faf42e247f8c2daf68d82150f6;hpb=1b6026c7baa122b99011f760857b80b7f253dfbb diff --git a/child_iterator.cpp b/child_iterator.cpp new file mode 100644 index 0000000..d6e708e --- /dev/null +++ b/child_iterator.cpp @@ -0,0 +1,46 @@ +// Copyright 2005 Ben Hutchings . +// See the file "COPYING" for licence details. + +#include "child_iterator.hpp" + +#include + +#include "xpcom_support.hpp" + +using xpcom_support::check; + +child_iterator::child_iterator() + : node_(0) +{} + +child_iterator::child_iterator(nsIDOMNode * node) +{ + check(node->GetFirstChild(&node_)); +} + +child_iterator::~child_iterator() +{ + if (node_) + node_->Release(); +} + +already_AddRefed child_iterator::operator*() const +{ + assert(node_); + node_->AddRef(); + return node_; +} + +child_iterator & child_iterator::operator++() +{ + nsIDOMNode * next; + check(node_->GetNextSibling(&next)); + node_->Release(); + node_ = next; + return *this; +} + +bool child_iterator::operator==(const child_iterator & other) const +{ + return node_ == other.node_; +}