File: TextTable.h

package info (click to toggle)
android-platform-frameworks-native 1%3A10.0.0%2Br36-1.2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 25,836 kB
  • sloc: cpp: 252,025; xml: 52,812; ansic: 26,775; java: 5,107; python: 1,887; sh: 266; asm: 105; makefile: 23
file content (84 lines) | stat: -rw-r--r-- 2,526 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef FRAMEWORK_NATIVE_CMDS_LSHAL_TEXT_TABLE_H_
#define FRAMEWORK_NATIVE_CMDS_LSHAL_TEXT_TABLE_H_

#include <iostream>
#include <string>
#include <vector>

namespace android {
namespace lshal {

// An element in TextTable. This is either an actual row (an array of cells
// in this row), or a string of explanatory text.
// To see if this is an actual row, test fields().empty().
class TextTableRow {
public:
    // An empty line.
    TextTableRow() {}

    // A row of cells.
    explicit TextTableRow(std::vector<std::string>&& v) : mFields(std::move(v)) {}

    // A single comment string.
    explicit TextTableRow(std::string&& s) : mLine(std::move(s)) {}
    explicit TextTableRow(const std::string& s) : mLine(s) {}

    // Whether this row is an actual row of cells.
    bool isRow() const { return !fields().empty(); }

    // Get all cells.
    const std::vector<std::string>& fields() const { return mFields; }

    // Get the single comment string.
    const std::string& line() const { return mLine; }

private:
    std::vector<std::string> mFields;
    std::string mLine;
};

// A TextTable is a 2D array of strings.
class TextTable {
public:

    // Add a TextTableRow.
    void add() { mTable.emplace_back(); }
    void add(std::vector<std::string>&& v) {
        computeWidth(v);
        mTable.emplace_back(std::move(v));
    }
    void add(const std::string& s) { mTable.emplace_back(s); }
    void add(std::string&& s) { mTable.emplace_back(std::move(s)); }

    void addAll(TextTable&& other);

    // Prints the table to out, with column widths adjusted appropriately according
    // to the content.
    void dump(std::ostream& out) const;

private:
    void computeWidth(const std::vector<std::string>& v);
    std::vector<size_t> mWidths;
    std::vector<TextTableRow> mTable;
};

} // namespace lshal
} // namespace android

#endif // FRAMEWORK_NATIVE_CMDS_LSHAL_TEXT_TABLE_H_