Basic Concepts
The basic concepts we are dealing with are the bucket and the brigade.
Let us first introduce them, before moving on to why and how to use them.
Buckets
A bucket is a container for data. Buckets can contain any type of
data. Although the most common case is a block of memory, a bucket
may instead contain a file on disc, or even be fed a data stream
from a dynamic source such as a separate program. Different bucket
types exist to hold different kinds of data and the methods for
handling it. In OOP terms, the apr_bucket is an abstract base
class from which actual bucket types are derived.
There are several different types of data bucket, as well as metadata
buckets. We will describe these at the end of this article.
Brigades
In normal use, there is no such thing as a freestanding bucket:
they are contained in bucket brigades. A brigade is a container
that may hold any number of buckets in a ring structure. The brigade
serves to enable flexible and efficient manipulation of data, and
is the unit that gets passed to and from your filter.