166d00febSPaula Toth //===-- StreamWrapper.cpp -------------------------------------------------===// 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 #include "StreamWrapper.h" 101962bc1dSAlex Brachet #include <cassert> 11c6aa206bSSiva Chandra Reddy #include <fstream> 128a4ee355SMichael Jones #include <iostream> 131962bc1dSAlex Brachet #include <memory> 14d69cbd82SSiva Chandra Reddy #include <string> 151962bc1dSAlex Brachet 161962bc1dSAlex Brachet namespace __llvm_libc { 171962bc1dSAlex Brachet namespace testutils { 181962bc1dSAlex Brachet outs()198a4ee355SMichael JonesStreamWrapper outs() { return {std::addressof(std::cout)}; } 201962bc1dSAlex Brachet operator <<(T t)211962bc1dSAlex Brachettemplate <typename T> StreamWrapper &StreamWrapper::operator<<(T t) { 22*25226f3eSMichael Jones assert(os); 23*25226f3eSMichael Jones std::ostream &Stream = *reinterpret_cast<std::ostream *>(os); 241962bc1dSAlex Brachet Stream << t; 25c6aa206bSSiva Chandra Reddy Stream.flush(); 261962bc1dSAlex Brachet return *this; 271962bc1dSAlex Brachet } 281962bc1dSAlex Brachet 291348ca40SAlex Brachet template StreamWrapper &StreamWrapper::operator<<<void *>(void *t); 301962bc1dSAlex Brachet template StreamWrapper &StreamWrapper::operator<<<const char *>(const char *t); 311962bc1dSAlex Brachet template StreamWrapper &StreamWrapper::operator<<<char *>(char *t); 321962bc1dSAlex Brachet template StreamWrapper &StreamWrapper::operator<<<char>(char t); 331962bc1dSAlex Brachet template StreamWrapper &StreamWrapper::operator<<<short>(short t); 341962bc1dSAlex Brachet template StreamWrapper &StreamWrapper::operator<<<int>(int t); 351962bc1dSAlex Brachet template StreamWrapper &StreamWrapper::operator<<<long>(long t); 361962bc1dSAlex Brachet template StreamWrapper &StreamWrapper::operator<<<long long>(long long t); 371962bc1dSAlex Brachet template StreamWrapper & 381962bc1dSAlex Brachet StreamWrapper::operator<<<unsigned char>(unsigned char t); 391962bc1dSAlex Brachet template StreamWrapper & 401962bc1dSAlex Brachet StreamWrapper::operator<<<unsigned short>(unsigned short t); 411962bc1dSAlex Brachet template StreamWrapper &StreamWrapper::operator<<<unsigned int>(unsigned int t); 421962bc1dSAlex Brachet template StreamWrapper & 431962bc1dSAlex Brachet StreamWrapper::operator<<<unsigned long>(unsigned long t); 441962bc1dSAlex Brachet template StreamWrapper & 451962bc1dSAlex Brachet StreamWrapper::operator<<<unsigned long long>(unsigned long long t); 461962bc1dSAlex Brachet template StreamWrapper &StreamWrapper::operator<<<bool>(bool t); 47d69cbd82SSiva Chandra Reddy template StreamWrapper &StreamWrapper::operator<<<std::string>(std::string t); 48c6aa206bSSiva Chandra Reddy template StreamWrapper &StreamWrapper::operator<<<float>(float t); 49c6aa206bSSiva Chandra Reddy template StreamWrapper &StreamWrapper::operator<<<double>(double t); 50c6aa206bSSiva Chandra Reddy OutputFileStream(const char * FN)51c6aa206bSSiva Chandra ReddyOutputFileStream::OutputFileStream(const char *FN) 52c6aa206bSSiva Chandra Reddy : StreamWrapper(new std::ofstream(FN)) {} 53c6aa206bSSiva Chandra Reddy ~OutputFileStream()54c6aa206bSSiva Chandra ReddyOutputFileStream::~OutputFileStream() { 55*25226f3eSMichael Jones delete reinterpret_cast<std::ofstream *>(os); 56c6aa206bSSiva Chandra Reddy } 571962bc1dSAlex Brachet 581962bc1dSAlex Brachet } // namespace testutils 591962bc1dSAlex Brachet } // namespace __llvm_libc 60