166d00febSPaula Toth //===-- StreamWrapper.h -----------------------------------------*- C++ -*-===//
21962bc1dSAlex Brachet //
31962bc1dSAlex Brachet // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
41962bc1dSAlex Brachet // See https://llvm.org/LICENSE.txt for license information.
51962bc1dSAlex Brachet // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
61962bc1dSAlex Brachet //
71962bc1dSAlex Brachet //===----------------------------------------------------------------------===//
81962bc1dSAlex Brachet 
91962bc1dSAlex Brachet #ifndef LLVM_LIBC_UTILS_TESTUTILS_STREAMWRAPPER_H
101962bc1dSAlex Brachet #define LLVM_LIBC_UTILS_TESTUTILS_STREAMWRAPPER_H
111962bc1dSAlex Brachet 
121962bc1dSAlex Brachet namespace __llvm_libc {
131962bc1dSAlex Brachet namespace testutils {
141962bc1dSAlex Brachet 
151962bc1dSAlex Brachet // StreamWrapper is necessary because llvm/Support/raw_ostream.h includes
161962bc1dSAlex Brachet // standard headers so we must provide streams through indirection to not
171962bc1dSAlex Brachet // expose the system libc headers.
181962bc1dSAlex Brachet class StreamWrapper {
19c6aa206bSSiva Chandra Reddy protected:
20*25226f3eSMichael Jones   void *os;
211962bc1dSAlex Brachet 
221962bc1dSAlex Brachet public:
StreamWrapper(void * OS)23*25226f3eSMichael Jones   StreamWrapper(void *OS) : os(OS) {}
241962bc1dSAlex Brachet 
251962bc1dSAlex Brachet   template <typename T> StreamWrapper &operator<<(T t);
261962bc1dSAlex Brachet };
271962bc1dSAlex Brachet 
281962bc1dSAlex Brachet StreamWrapper outs();
291962bc1dSAlex Brachet 
30c6aa206bSSiva Chandra Reddy class OutputFileStream : public StreamWrapper {
31c6aa206bSSiva Chandra Reddy public:
32c6aa206bSSiva Chandra Reddy   explicit OutputFileStream(const char *FN);
33c6aa206bSSiva Chandra Reddy   ~OutputFileStream();
34c6aa206bSSiva Chandra Reddy };
35c6aa206bSSiva Chandra Reddy 
361962bc1dSAlex Brachet } // namespace testutils
371962bc1dSAlex Brachet } // namespace __llvm_libc
381962bc1dSAlex Brachet 
391962bc1dSAlex Brachet #endif // LLVM_LIBC_UTILS_TESTUTILS_STREAMWRAPPER_H
40