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