system-header-simulator-cxx.h revision 81fb50e8b120fc95dc0245b4112972d4d7cca3b5
181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose#pragma clang system_header
281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rosenamespace std {
481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  template <class T1, class T2>
581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  struct pair {
681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    T1 first;
781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    T2 second;
881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    pair() : first(), second() {}
1081fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    pair(const T1 &a, const T2 &b) : first(a), second(b) {}
1181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
1281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    template<class U1, class U2>
1381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    pair(const pair<U1, U2> &other) : first(other.first), second(other.second) {}
1481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  };
1581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
1681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  typedef __typeof__(sizeof(int)) size_t;
1781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
1881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  template<typename T>
1981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  class vector {
2081fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    T *_start;
2181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    T *_finish;
2281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    T *_end_of_storage;
2381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  public:
2481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    vector() : _start(0), _finish(0), _end_of_storage(0) {}
2581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    ~vector();
2681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
2781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    size_t size() const {
2881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose      return size_t(_finish - _start);
2981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    }
3081fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
3181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    void push_back();
3281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    T pop_back();
3381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
3481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    T &operator[](size_t n) {
3581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose      return _start[n];
3681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    }
3781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
3881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    const T &operator[](size_t n) const {
3981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose      return _start[n];
4081fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    }
4181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
4281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    T *begin() { return _start; }
4381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    const T *begin() const { return _start; }
4481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
4581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    T *end() { return _finish; }
4681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    const T *end() const { return _finish; }
4781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  };
4881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
4981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  class exception {
5081fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  public:
5181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    exception() throw();
5281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    virtual ~exception() throw();
5381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    virtual const char *what() const throw() {
5481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose      return 0;
5581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    }
5681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  };
5781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose}
58