1d157c62dfa3c52833c4f6ec34dd178257e4ac9cfShih-wei Liao/* 2d157c62dfa3c52833c4f6ec34dd178257e4ac9cfShih-wei Liao * Copyright 2011, The Android Open Source Project 3d157c62dfa3c52833c4f6ec34dd178257e4ac9cfShih-wei Liao * 4d157c62dfa3c52833c4f6ec34dd178257e4ac9cfShih-wei Liao * Licensed under the Apache License, Version 2.0 (the "License"); 5d157c62dfa3c52833c4f6ec34dd178257e4ac9cfShih-wei Liao * you may not use this file except in compliance with the License. 6d157c62dfa3c52833c4f6ec34dd178257e4ac9cfShih-wei Liao * You may obtain a copy of the License at 7d157c62dfa3c52833c4f6ec34dd178257e4ac9cfShih-wei Liao * 8d157c62dfa3c52833c4f6ec34dd178257e4ac9cfShih-wei Liao * http://www.apache.org/licenses/LICENSE-2.0 9d157c62dfa3c52833c4f6ec34dd178257e4ac9cfShih-wei Liao * 10d157c62dfa3c52833c4f6ec34dd178257e4ac9cfShih-wei Liao * Unless required by applicable law or agreed to in writing, software 11d157c62dfa3c52833c4f6ec34dd178257e4ac9cfShih-wei Liao * distributed under the License is distributed on an "AS IS" BASIS, 12d157c62dfa3c52833c4f6ec34dd178257e4ac9cfShih-wei Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d157c62dfa3c52833c4f6ec34dd178257e4ac9cfShih-wei Liao * See the License for the specific language governing permissions and 14d157c62dfa3c52833c4f6ec34dd178257e4ac9cfShih-wei Liao * limitations under the License. 15d157c62dfa3c52833c4f6ec34dd178257e4ac9cfShih-wei Liao */ 16d157c62dfa3c52833c4f6ec34dd178257e4ac9cfShih-wei Liao 177e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa#include "raw_ostream.h" 187e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa 197e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa#include <llvm/Support/raw_ostream.h> 207e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa#include <llvm/Support/Format.h> 217e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa#include <cstdarg> 227e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa#include <cstring> 237e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa 247e1f86b83570558bd1d512a055d4601cc9ceca6bTDYallvm::raw_ostream &out() { 257e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa static llvm::raw_ostream &singleton = llvm::outs(); 267e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa return singleton; 277e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa} 287e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa 297e1f86b83570558bd1d512a055d4601cc9ceca6bTDYaMyFormat const fillformat(char const fill_char, // Fill character. 307e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa int const length, // Fill Width. 317e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa char const *format_s, // Format string. 327e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa ...) { // Format variable. 337e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa using namespace std; 347e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa struct MyFormat t_format; 357e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa va_list valist; 367e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa va_start(valist, format_s); 377e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa t_format.ptr = new char[length+1]; 38a4ac2e13ea516fc60204ea3e60b8faffa8085d38Logan Chien t_format.ptr[length] = '\0'; 397e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa vsnprintf(t_format.ptr, length, format_s, valist); 407e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa int real_len = strlen(t_format.ptr); 417e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa int fill_len = length; 427e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa memmove(t_format.ptr + fill_len, t_format.ptr, real_len); 437e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa memset(t_format.ptr, fill_char, fill_len); 447e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa return t_format; 457e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa} 467e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa 477e1f86b83570558bd1d512a055d4601cc9ceca6bTDYallvm::raw_ostream &operator<<(llvm::raw_ostream &os, MyFormat const &mf) { 487e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa os << mf.ptr; 497e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa delete mf.ptr; 507e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa return os; 517e1f86b83570558bd1d512a055d4601cc9ceca6bTDYa} 52