198760c18f85bafd98dde7a309e1b0e677abd47d8Marshall Clow//===----------------------------------------------------------------------===//
298760c18f85bafd98dde7a309e1b0e677abd47d8Marshall Clow//
398760c18f85bafd98dde7a309e1b0e677abd47d8Marshall Clow//                     The LLVM Compiler Infrastructure
498760c18f85bafd98dde7a309e1b0e677abd47d8Marshall Clow//
598760c18f85bafd98dde7a309e1b0e677abd47d8Marshall Clow// This file is dual licensed under the MIT and the University of Illinois Open
698760c18f85bafd98dde7a309e1b0e677abd47d8Marshall Clow// Source Licenses. See LICENSE.TXT for details.
798760c18f85bafd98dde7a309e1b0e677abd47d8Marshall Clow//
898760c18f85bafd98dde7a309e1b0e677abd47d8Marshall Clow//===----------------------------------------------------------------------===//
998760c18f85bafd98dde7a309e1b0e677abd47d8Marshall Clow
10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef ALLOC_FIRST_H
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#define ALLOC_FIRST_H
12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert>
14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "allocators.h"
16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct alloc_first
18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    static bool allocator_constructed;
20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    typedef A1<int> allocator_type;
22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    int data_;
24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    alloc_first() : data_(0) {}
26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    alloc_first(int d) : data_(d) {}
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    alloc_first(std::allocator_arg_t, const A1<int>& a)
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        : data_(0)
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(a.id() == 5);
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        allocator_constructed = true;
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    alloc_first(std::allocator_arg_t, const A1<int>& a, int d)
35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        : data_(d)
36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(a.id() == 5);
38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        allocator_constructed = true;
39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    alloc_first(std::allocator_arg_t, const A1<int>& a, const alloc_first& d)
42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        : data_(d.data_)
43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(a.id() == 5);
45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        allocator_constructed = true;
46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    ~alloc_first() {data_ = -1;}
49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    friend bool operator==(const alloc_first& x, const alloc_first& y)
51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {return x.data_ == y.data_;}
52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    friend bool operator< (const alloc_first& x, const alloc_first& y)
53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {return x.data_ < y.data_;}
54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant};
55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool alloc_first::allocator_constructed = false;
57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
58c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant#endif  // ALLOC_FIRST_H
59