アロケータへの問い合わせとその応答形式
いくつか(かなり大量)のコンテナを管理し、アロケーションに責任を持つモジュールなりサーバーなり(実体は問わない)をとりあえずアロケータと呼ぶ。アロケータはリソース管理系の中核機能を抽象的に指す言葉になる。
アロケータは、実際のアロケーションを行うだけでなく、リソース状況の問い合わせに答える責務がある。特に、(d, x)(durationとweightの組)が与えられたとき、(d, x)のアロケーションが可能かどうか、可能なら「すべてのアロケーション候補」(理論的には無限集合)を返す必要がある。
(d, x)に対してbegin値aが決まれば、実現[a, a+d;x]が決まるので、「begin値←→アロケーションインスタンス」の対応がある。よって、「begin値の集合←→アロケーションインスタンスの集合」となる。begin値は単なるスカラーなので、実数直線内の集合だが、これは互いに交わらない有限個の区間の合併で表現できる。
有限個の区間は、区間([a, b]の形)のリストで表現可能だが、次の意味で正規化しておく。
「離れている」とは、隣接もオーバラップもしてないこと。つまり、[a, b]と[c, d]が離れているとは、b<c のこと。オーバラップ(c<b)または隣接(b = c)していれば縮約して1個の区間にできる。空集合は空リストで、単一のプロパー区間は要素を1つ持つリストで表現できる。
正規化された(重みはない)リストも非常に重要なデータ構造で、このデータ(意味は実数の部分集合)に関する集合演算(∩、∪)が後で役に立つ。重みが1に固定された区間群を扱うときも、重みを省略して区間や区間のリスト(意味的には実数直線内の集合)の演算が使える。