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