utils.h revision 9759e1b1ce76185aa539aeea2fb1cbd8382156e7
167d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui/* 267d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui * Copyright (C) 2015 The Android Open Source Project 367d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui * 467d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui * Licensed under the Apache License, Version 2.0 (the "License"); 567d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui * you may not use this file except in compliance with the License. 667d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui * You may obtain a copy of the License at 767d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui * 867d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui * http://www.apache.org/licenses/LICENSE-2.0 967d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui * 1067d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui * Unless required by applicable law or agreed to in writing, software 1167d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui * distributed under the License is distributed on an "AS IS" BASIS, 1267d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1367d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui * See the License for the specific language governing permissions and 1467d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui * limitations under the License. 1567d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui */ 1667d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui 1767d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui#ifndef SIMPLE_PERF_UTILS_H_ 1867d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui#define SIMPLE_PERF_UTILS_H_ 1967d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui 2067d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui#include <stddef.h> 21323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui#include <stdio.h> 22323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui#include <stdlib.h> 23323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui#include <string> 249759e1b1ce76185aa539aeea2fb1cbd8382156e7Yabin Cui#include <vector> 2567d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui 2667d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cuivoid PrintIndented(size_t indent, const char* fmt, ...); 2767d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui 28323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cuiclass LineReader { 29323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui public: 30323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui LineReader(FILE* fp) : fp_(fp), buf_(nullptr), bufsize_(0) { 31323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui } 32323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui 33323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui ~LineReader() { 34323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui free(buf_); 35323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui fclose(fp_); 36323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui } 37323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui 38323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui char* ReadLine() { 39323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui if (getline(&buf_, &bufsize_, fp_) != -1) { 40323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui return buf_; 41323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui } 42323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui return nullptr; 43323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui } 44323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui 45323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui size_t MaxLineSize() { 46323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui return bufsize_; 47323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui } 48323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui 49323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui private: 50323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui FILE* fp_; 51323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui char* buf_; 52323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui size_t bufsize_; 53323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui}; 54323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui 559759e1b1ce76185aa539aeea2fb1cbd8382156e7Yabin Cuibool IsPowerOfTwo(uint64_t value); 569759e1b1ce76185aa539aeea2fb1cbd8382156e7Yabin Cui 579759e1b1ce76185aa539aeea2fb1cbd8382156e7Yabin Cuibool NextArgumentOrError(const std::vector<std::string>& args, size_t* pi); 589759e1b1ce76185aa539aeea2fb1cbd8382156e7Yabin Cui 599759e1b1ce76185aa539aeea2fb1cbd8382156e7Yabin Cui#define ALIGN(value, alignment) (((value) + (alignment)-1) & ~((alignment)-1)) 60323e945313b190373b3fcfe578e25ee8390a76d3Yabin Cui 6167d3abd7b26a741347b33402ad32f5c6735ca0bdYabin Cui#endif // SIMPLE_PERF_UTILS_H_ 62