GoogleChart.

Dependents:   GoogleChart_TestProgram

Committer:
shintamainjp
Date:
Tue Aug 17 09:21:55 2010 +0000
Revision:
0:ded8a44ff71f

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 0:ded8a44ff71f 1 /**
shintamainjp 0:ded8a44ff71f 2 * GoogleChart API interface driver. (Version 0.0.1)
shintamainjp 0:ded8a44ff71f 3 *
shintamainjp 0:ded8a44ff71f 4 * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
shintamainjp 0:ded8a44ff71f 5 * http://shinta.main.jp/
shintamainjp 0:ded8a44ff71f 6 */
shintamainjp 0:ded8a44ff71f 7
shintamainjp 0:ded8a44ff71f 8 #include "GoogleChart.h"
shintamainjp 0:ded8a44ff71f 9
shintamainjp 0:ded8a44ff71f 10 const std::string GoogleChart::baseURL = "http://chart.apis.google.com/chart";
shintamainjp 0:ded8a44ff71f 11
shintamainjp 0:ded8a44ff71f 12 GoogleChart::GoogleChart() : title(""), width(300), height(225) {
shintamainjp 0:ded8a44ff71f 13 for (int i = 0; i < MAX_AXIS; i++) {
shintamainjp 0:ded8a44ff71f 14 axislist[i] = 0;
shintamainjp 0:ded8a44ff71f 15 }
shintamainjp 0:ded8a44ff71f 16 for (int i = 0; i < MAX_DATA; i++) {
shintamainjp 0:ded8a44ff71f 17 datalist[i] = 0;
shintamainjp 0:ded8a44ff71f 18 }
shintamainjp 0:ded8a44ff71f 19 }
shintamainjp 0:ded8a44ff71f 20
shintamainjp 0:ded8a44ff71f 21 GoogleChart::~GoogleChart() {}
shintamainjp 0:ded8a44ff71f 22
shintamainjp 0:ded8a44ff71f 23 int GoogleChart::addNewAxis(Axis::Type type) {
shintamainjp 0:ded8a44ff71f 24 /*
shintamainjp 0:ded8a44ff71f 25 * Search maximum number of axis.
shintamainjp 0:ded8a44ff71f 26 */
shintamainjp 0:ded8a44ff71f 27 int max = 0;
shintamainjp 0:ded8a44ff71f 28 for (int i = 0; i < MAX_AXIS; i++) {
shintamainjp 0:ded8a44ff71f 29 if (0 != axislist[i]) {
shintamainjp 0:ded8a44ff71f 30 if (axislist[i]->getNumber() > max) {
shintamainjp 0:ded8a44ff71f 31 max = axislist[i]->getNumber();
shintamainjp 0:ded8a44ff71f 32 }
shintamainjp 0:ded8a44ff71f 33 }
shintamainjp 0:ded8a44ff71f 34 }
shintamainjp 0:ded8a44ff71f 35
shintamainjp 0:ded8a44ff71f 36 /*
shintamainjp 0:ded8a44ff71f 37 * Create a new axis.
shintamainjp 0:ded8a44ff71f 38 */
shintamainjp 0:ded8a44ff71f 39 for (int i = 0; i < MAX_AXIS; i++) {
shintamainjp 0:ded8a44ff71f 40 if (0 == axislist[i]) {
shintamainjp 0:ded8a44ff71f 41 axislist[i] = new Axis(max + 1, type);
shintamainjp 0:ded8a44ff71f 42 return max + 1;
shintamainjp 0:ded8a44ff71f 43 }
shintamainjp 0:ded8a44ff71f 44 }
shintamainjp 0:ded8a44ff71f 45 return -1;
shintamainjp 0:ded8a44ff71f 46 }
shintamainjp 0:ded8a44ff71f 47
shintamainjp 0:ded8a44ff71f 48 int GoogleChart::setAxisType(const int number, Axis::Type type) {
shintamainjp 0:ded8a44ff71f 49 for (int i = 0; i < MAX_AXIS; i++) {
shintamainjp 0:ded8a44ff71f 50 if (0 != axislist[i]) {
shintamainjp 0:ded8a44ff71f 51 if (axislist[i]->getNumber() == number) {
shintamainjp 0:ded8a44ff71f 52 axislist[i]->setType(type);
shintamainjp 0:ded8a44ff71f 53 return number;
shintamainjp 0:ded8a44ff71f 54 }
shintamainjp 0:ded8a44ff71f 55 }
shintamainjp 0:ded8a44ff71f 56 }
shintamainjp 0:ded8a44ff71f 57 return -1;
shintamainjp 0:ded8a44ff71f 58 }
shintamainjp 0:ded8a44ff71f 59
shintamainjp 0:ded8a44ff71f 60 int GoogleChart::setAxisRange(const int number, int rangeStart, int rangeEnd) {
shintamainjp 0:ded8a44ff71f 61 for (int i = 0; i < MAX_AXIS; i++) {
shintamainjp 0:ded8a44ff71f 62 if (0 != axislist[i]) {
shintamainjp 0:ded8a44ff71f 63 if (axislist[i]->getNumber() == number) {
shintamainjp 0:ded8a44ff71f 64 axislist[i]->setRangeStart(rangeStart);
shintamainjp 0:ded8a44ff71f 65 axislist[i]->setRangeEnd(rangeEnd);
shintamainjp 0:ded8a44ff71f 66 return number;
shintamainjp 0:ded8a44ff71f 67 }
shintamainjp 0:ded8a44ff71f 68 }
shintamainjp 0:ded8a44ff71f 69 }
shintamainjp 0:ded8a44ff71f 70 return -1;
shintamainjp 0:ded8a44ff71f 71 }
shintamainjp 0:ded8a44ff71f 72
shintamainjp 0:ded8a44ff71f 73 int GoogleChart::removeAxis(const int number) {
shintamainjp 0:ded8a44ff71f 74 for (int i = 0; i < MAX_AXIS; i++) {
shintamainjp 0:ded8a44ff71f 75 if (0 != axislist[i]) {
shintamainjp 0:ded8a44ff71f 76 if (axislist[i]->getNumber() == number) {
shintamainjp 0:ded8a44ff71f 77 delete axislist[i];
shintamainjp 0:ded8a44ff71f 78 axislist[i] = 0;
shintamainjp 0:ded8a44ff71f 79 return number;
shintamainjp 0:ded8a44ff71f 80 }
shintamainjp 0:ded8a44ff71f 81 }
shintamainjp 0:ded8a44ff71f 82 }
shintamainjp 0:ded8a44ff71f 83 return -1;
shintamainjp 0:ded8a44ff71f 84 }
shintamainjp 0:ded8a44ff71f 85
shintamainjp 0:ded8a44ff71f 86 int GoogleChart::addNewDataSet(std::string label, const int size) {
shintamainjp 0:ded8a44ff71f 87 /*
shintamainjp 0:ded8a44ff71f 88 * Search maximum number of data set.
shintamainjp 0:ded8a44ff71f 89 */
shintamainjp 0:ded8a44ff71f 90 int max = 0;
shintamainjp 0:ded8a44ff71f 91 for (int i = 0; i < MAX_DATA; i++) {
shintamainjp 0:ded8a44ff71f 92 if (0 != datalist[i]) {
shintamainjp 0:ded8a44ff71f 93 if (datalist[i]->getNumber() > max) {
shintamainjp 0:ded8a44ff71f 94 max = datalist[i]->getNumber();
shintamainjp 0:ded8a44ff71f 95 }
shintamainjp 0:ded8a44ff71f 96 }
shintamainjp 0:ded8a44ff71f 97 }
shintamainjp 0:ded8a44ff71f 98
shintamainjp 0:ded8a44ff71f 99 /*
shintamainjp 0:ded8a44ff71f 100 * Create a new data set.
shintamainjp 0:ded8a44ff71f 101 */
shintamainjp 0:ded8a44ff71f 102 for (int i = 0; i < MAX_DATA; i++) {
shintamainjp 0:ded8a44ff71f 103 if (0 == datalist[i]) {
shintamainjp 0:ded8a44ff71f 104 datalist[i] = new DataSet(label, max + 1, size);
shintamainjp 0:ded8a44ff71f 105 return max + 1;
shintamainjp 0:ded8a44ff71f 106 }
shintamainjp 0:ded8a44ff71f 107 }
shintamainjp 0:ded8a44ff71f 108 return -1;
shintamainjp 0:ded8a44ff71f 109 }
shintamainjp 0:ded8a44ff71f 110
shintamainjp 0:ded8a44ff71f 111 int GoogleChart::removeDataSet(const int number) {
shintamainjp 0:ded8a44ff71f 112 for (int i = 0; i < MAX_DATA; i++) {
shintamainjp 0:ded8a44ff71f 113 if (0 != datalist[i]) {
shintamainjp 0:ded8a44ff71f 114 if (datalist[i]->getNumber() == number) {
shintamainjp 0:ded8a44ff71f 115 delete datalist[i];
shintamainjp 0:ded8a44ff71f 116 datalist[i] = 0;
shintamainjp 0:ded8a44ff71f 117 return number;
shintamainjp 0:ded8a44ff71f 118 }
shintamainjp 0:ded8a44ff71f 119 }
shintamainjp 0:ded8a44ff71f 120 }
shintamainjp 0:ded8a44ff71f 121 return -1;
shintamainjp 0:ded8a44ff71f 122 }
shintamainjp 0:ded8a44ff71f 123
shintamainjp 0:ded8a44ff71f 124 int GoogleChart::addData(const int number, double data) {
shintamainjp 0:ded8a44ff71f 125 for (int i = 0; i < MAX_DATA; i++) {
shintamainjp 0:ded8a44ff71f 126 if (0 != datalist[i]) {
shintamainjp 0:ded8a44ff71f 127 if (datalist[i]->getNumber() == number) {
shintamainjp 0:ded8a44ff71f 128 datalist[i]->addData(data);
shintamainjp 0:ded8a44ff71f 129 return i;
shintamainjp 0:ded8a44ff71f 130 }
shintamainjp 0:ded8a44ff71f 131 }
shintamainjp 0:ded8a44ff71f 132 }
shintamainjp 0:ded8a44ff71f 133 return -1;
shintamainjp 0:ded8a44ff71f 134 }
shintamainjp 0:ded8a44ff71f 135
shintamainjp 0:ded8a44ff71f 136 int GoogleChart::clearAllData(const int number) {
shintamainjp 0:ded8a44ff71f 137 for (int i = 0; i < MAX_DATA; i++) {
shintamainjp 0:ded8a44ff71f 138 if (0 != datalist[i]) {
shintamainjp 0:ded8a44ff71f 139 if (datalist[i]->getNumber() == number) {
shintamainjp 0:ded8a44ff71f 140 datalist[i]->clearAllData();
shintamainjp 0:ded8a44ff71f 141 return i;
shintamainjp 0:ded8a44ff71f 142 }
shintamainjp 0:ded8a44ff71f 143 }
shintamainjp 0:ded8a44ff71f 144 }
shintamainjp 0:ded8a44ff71f 145 return -1;
shintamainjp 0:ded8a44ff71f 146 }
shintamainjp 0:ded8a44ff71f 147
shintamainjp 0:ded8a44ff71f 148 int GoogleChart::setDataScale(const int number, int min, int max) {
shintamainjp 0:ded8a44ff71f 149 for (int i = 0; i < MAX_DATA; i++) {
shintamainjp 0:ded8a44ff71f 150 if (0 != datalist[i]) {
shintamainjp 0:ded8a44ff71f 151 if (datalist[i]->getNumber() == number) {
shintamainjp 0:ded8a44ff71f 152 datalist[i]->setScale(min, max);
shintamainjp 0:ded8a44ff71f 153 return i;
shintamainjp 0:ded8a44ff71f 154 }
shintamainjp 0:ded8a44ff71f 155 }
shintamainjp 0:ded8a44ff71f 156 }
shintamainjp 0:ded8a44ff71f 157 return -1;
shintamainjp 0:ded8a44ff71f 158 }
shintamainjp 0:ded8a44ff71f 159
shintamainjp 0:ded8a44ff71f 160 void GoogleChart::setTitle(std::string title) {
shintamainjp 0:ded8a44ff71f 161 GoogleChart::title = title;
shintamainjp 0:ded8a44ff71f 162 }
shintamainjp 0:ded8a44ff71f 163
shintamainjp 0:ded8a44ff71f 164 std::string GoogleChart::getTitle() const {
shintamainjp 0:ded8a44ff71f 165 return title;
shintamainjp 0:ded8a44ff71f 166 }
shintamainjp 0:ded8a44ff71f 167
shintamainjp 0:ded8a44ff71f 168 void GoogleChart::setWidth(int width) {
shintamainjp 0:ded8a44ff71f 169 GoogleChart::width = width;
shintamainjp 0:ded8a44ff71f 170 }
shintamainjp 0:ded8a44ff71f 171
shintamainjp 0:ded8a44ff71f 172 int GoogleChart::getWidth() const {
shintamainjp 0:ded8a44ff71f 173 return width;
shintamainjp 0:ded8a44ff71f 174 }
shintamainjp 0:ded8a44ff71f 175
shintamainjp 0:ded8a44ff71f 176 void GoogleChart::setHeight(int height) {
shintamainjp 0:ded8a44ff71f 177 GoogleChart::height = height;
shintamainjp 0:ded8a44ff71f 178 }
shintamainjp 0:ded8a44ff71f 179
shintamainjp 0:ded8a44ff71f 180 int GoogleChart::getHeight() const {
shintamainjp 0:ded8a44ff71f 181 return height;
shintamainjp 0:ded8a44ff71f 182 }
shintamainjp 0:ded8a44ff71f 183
shintamainjp 0:ded8a44ff71f 184 std::string GoogleChart::toURL(std::string text) {
shintamainjp 0:ded8a44ff71f 185 static const char *unsafe_characters = " \"<>#%{}|\\^~[]`";
shintamainjp 0:ded8a44ff71f 186 std::string s = "";
shintamainjp 0:ded8a44ff71f 187 for (int i = 0; i < text.length(); i++) {
shintamainjp 0:ded8a44ff71f 188 char c = text.at(i);
shintamainjp 0:ded8a44ff71f 189 if (strchr(unsafe_characters, c) == NULL) {
shintamainjp 0:ded8a44ff71f 190 s = s + c;
shintamainjp 0:ded8a44ff71f 191 } else {
shintamainjp 0:ded8a44ff71f 192 char buf[8];
shintamainjp 0:ded8a44ff71f 193 snprintf(buf, sizeof(buf), "%%%02X", c & 0xff);
shintamainjp 0:ded8a44ff71f 194 s = s + std::string(buf);
shintamainjp 0:ded8a44ff71f 195 }
shintamainjp 0:ded8a44ff71f 196 }
shintamainjp 0:ded8a44ff71f 197 return s;
shintamainjp 0:ded8a44ff71f 198 }
shintamainjp 0:ded8a44ff71f 199
shintamainjp 0:ded8a44ff71f 200 std::string GoogleChart::paramChartType(ChartType chartType) {
shintamainjp 0:ded8a44ff71f 201 /*
shintamainjp 0:ded8a44ff71f 202 * Chart Type.
shintamainjp 0:ded8a44ff71f 203 */
shintamainjp 0:ded8a44ff71f 204 std::string s = "cht=";
shintamainjp 0:ded8a44ff71f 205 switch (chartType) {
shintamainjp 0:ded8a44ff71f 206 case LineChart:
shintamainjp 0:ded8a44ff71f 207 s = s + "lc";
shintamainjp 0:ded8a44ff71f 208 break;
shintamainjp 0:ded8a44ff71f 209 default:
shintamainjp 0:ded8a44ff71f 210 s = s + "unknown";
shintamainjp 0:ded8a44ff71f 211 break;
shintamainjp 0:ded8a44ff71f 212 }
shintamainjp 0:ded8a44ff71f 213 return s;
shintamainjp 0:ded8a44ff71f 214 }
shintamainjp 0:ded8a44ff71f 215
shintamainjp 0:ded8a44ff71f 216 std::string GoogleChart::paramAxis(Axis **list, int size) {
shintamainjp 0:ded8a44ff71f 217
shintamainjp 0:ded8a44ff71f 218 char buf[64];
shintamainjp 0:ded8a44ff71f 219 /*
shintamainjp 0:ded8a44ff71f 220 * Axis type and range.
shintamainjp 0:ded8a44ff71f 221 */
shintamainjp 0:ded8a44ff71f 222 int cnt = 0;
shintamainjp 0:ded8a44ff71f 223 std::string sType = "chxt=";
shintamainjp 0:ded8a44ff71f 224 std::string sRange = "chxr=";
shintamainjp 0:ded8a44ff71f 225 for (int i = 0; i < size; i++) {
shintamainjp 0:ded8a44ff71f 226 Axis *p = list[i];
shintamainjp 0:ded8a44ff71f 227 if (0 != p) {
shintamainjp 0:ded8a44ff71f 228 /*
shintamainjp 0:ded8a44ff71f 229 * Type.
shintamainjp 0:ded8a44ff71f 230 */
shintamainjp 0:ded8a44ff71f 231 if (0 < cnt) {
shintamainjp 0:ded8a44ff71f 232 sType = sType + ",";
shintamainjp 0:ded8a44ff71f 233 }
shintamainjp 0:ded8a44ff71f 234 switch (p->getType()) {
shintamainjp 0:ded8a44ff71f 235 case Axis::Bottom:
shintamainjp 0:ded8a44ff71f 236 sType = sType + "x";
shintamainjp 0:ded8a44ff71f 237 break;
shintamainjp 0:ded8a44ff71f 238 case Axis::Left:
shintamainjp 0:ded8a44ff71f 239 sType = sType + "y";
shintamainjp 0:ded8a44ff71f 240 break;
shintamainjp 0:ded8a44ff71f 241 case Axis::Right:
shintamainjp 0:ded8a44ff71f 242 sType = sType + "r";
shintamainjp 0:ded8a44ff71f 243 break;
shintamainjp 0:ded8a44ff71f 244 case Axis::Top:
shintamainjp 0:ded8a44ff71f 245 sType = sType + "t";
shintamainjp 0:ded8a44ff71f 246 break;
shintamainjp 0:ded8a44ff71f 247 default:
shintamainjp 0:ded8a44ff71f 248 sType = sType + "?";
shintamainjp 0:ded8a44ff71f 249 break;
shintamainjp 0:ded8a44ff71f 250 }
shintamainjp 0:ded8a44ff71f 251 /*
shintamainjp 0:ded8a44ff71f 252 * Range.
shintamainjp 0:ded8a44ff71f 253 */
shintamainjp 0:ded8a44ff71f 254 if (0 < cnt) {
shintamainjp 0:ded8a44ff71f 255 sRange = sRange + "|";
shintamainjp 0:ded8a44ff71f 256 }
shintamainjp 0:ded8a44ff71f 257 snprintf(buf, sizeof(buf), "%d,%d,%d", cnt, p->getRangeStart(), p->getRangeEnd());
shintamainjp 0:ded8a44ff71f 258 sRange = sRange + std::string(buf);
shintamainjp 0:ded8a44ff71f 259 /*
shintamainjp 0:ded8a44ff71f 260 * Next.
shintamainjp 0:ded8a44ff71f 261 */
shintamainjp 0:ded8a44ff71f 262 cnt++;
shintamainjp 0:ded8a44ff71f 263 }
shintamainjp 0:ded8a44ff71f 264 }
shintamainjp 0:ded8a44ff71f 265
shintamainjp 0:ded8a44ff71f 266 return sRange + "&" + sType;
shintamainjp 0:ded8a44ff71f 267 }
shintamainjp 0:ded8a44ff71f 268
shintamainjp 0:ded8a44ff71f 269 std::string GoogleChart::paramDataSet(DataSet **list, int size) {
shintamainjp 0:ded8a44ff71f 270 char buf[64];
shintamainjp 0:ded8a44ff71f 271 int cnt = 0;
shintamainjp 0:ded8a44ff71f 272 std::string sData = "chd=t:";
shintamainjp 0:ded8a44ff71f 273 std::string sScale = "chds=";
shintamainjp 0:ded8a44ff71f 274 std::string sLabel = "chdl=";
shintamainjp 0:ded8a44ff71f 275 for (int i = 0; i < size; i++) {
shintamainjp 0:ded8a44ff71f 276 DataSet *p = list[i];
shintamainjp 0:ded8a44ff71f 277 if (0 != p) {
shintamainjp 0:ded8a44ff71f 278 /*
shintamainjp 0:ded8a44ff71f 279 * Data.
shintamainjp 0:ded8a44ff71f 280 */
shintamainjp 0:ded8a44ff71f 281 if (0 < cnt) {
shintamainjp 0:ded8a44ff71f 282 sData = sData + "|";
shintamainjp 0:ded8a44ff71f 283 }
shintamainjp 0:ded8a44ff71f 284 for (int i = 0; i < p->getDataCount(); i++) {
shintamainjp 0:ded8a44ff71f 285 double d = p->getData(i);
shintamainjp 0:ded8a44ff71f 286 snprintf(buf, sizeof(buf), "%.3f", d);
shintamainjp 0:ded8a44ff71f 287 if (0 < i) {
shintamainjp 0:ded8a44ff71f 288 sData = sData + ",";
shintamainjp 0:ded8a44ff71f 289 }
shintamainjp 0:ded8a44ff71f 290 sData = sData + std::string(buf);
shintamainjp 0:ded8a44ff71f 291 }
shintamainjp 0:ded8a44ff71f 292 /*
shintamainjp 0:ded8a44ff71f 293 * Range.
shintamainjp 0:ded8a44ff71f 294 */
shintamainjp 0:ded8a44ff71f 295 if (0 < cnt) {
shintamainjp 0:ded8a44ff71f 296 sScale = sScale + ",";
shintamainjp 0:ded8a44ff71f 297 }
shintamainjp 0:ded8a44ff71f 298 snprintf(buf, sizeof(buf), "%.3f,%.3f", p->getMin(), p->getMax());
shintamainjp 0:ded8a44ff71f 299 sScale = sScale + std::string(buf);
shintamainjp 0:ded8a44ff71f 300 /*
shintamainjp 0:ded8a44ff71f 301 * Label.
shintamainjp 0:ded8a44ff71f 302 */
shintamainjp 0:ded8a44ff71f 303 if (0 < cnt) {
shintamainjp 0:ded8a44ff71f 304 sLabel = sLabel + "|";
shintamainjp 0:ded8a44ff71f 305 }
shintamainjp 0:ded8a44ff71f 306 sLabel = sLabel + p->getLabel();
shintamainjp 0:ded8a44ff71f 307 /*
shintamainjp 0:ded8a44ff71f 308 * Next.
shintamainjp 0:ded8a44ff71f 309 */
shintamainjp 0:ded8a44ff71f 310 cnt++;
shintamainjp 0:ded8a44ff71f 311 }
shintamainjp 0:ded8a44ff71f 312 }
shintamainjp 0:ded8a44ff71f 313
shintamainjp 0:ded8a44ff71f 314 return sScale + "&" + sData + "&" + sLabel;
shintamainjp 0:ded8a44ff71f 315 }
shintamainjp 0:ded8a44ff71f 316
shintamainjp 0:ded8a44ff71f 317 std::string GoogleChart::paramTitle(std::string title, int color, double fontSize) {
shintamainjp 0:ded8a44ff71f 318 char buf[64];
shintamainjp 0:ded8a44ff71f 319 std::string s = "";
shintamainjp 0:ded8a44ff71f 320 /*
shintamainjp 0:ded8a44ff71f 321 * Chart Title Text.
shintamainjp 0:ded8a44ff71f 322 */
shintamainjp 0:ded8a44ff71f 323 s = s + "chtt=" + title;
shintamainjp 0:ded8a44ff71f 324 /*
shintamainjp 0:ded8a44ff71f 325 * Chart Title Specification.
shintamainjp 0:ded8a44ff71f 326 */
shintamainjp 0:ded8a44ff71f 327 snprintf(buf, sizeof(buf), "&chts=%06X,%.1f", color, fontSize);
shintamainjp 0:ded8a44ff71f 328 s = s + std::string(buf);
shintamainjp 0:ded8a44ff71f 329 return s;
shintamainjp 0:ded8a44ff71f 330 }
shintamainjp 0:ded8a44ff71f 331
shintamainjp 0:ded8a44ff71f 332 std::string GoogleChart::paramSize(int width, int height) {
shintamainjp 0:ded8a44ff71f 333 char buf[64];
shintamainjp 0:ded8a44ff71f 334 /*
shintamainjp 0:ded8a44ff71f 335 * Chart Size.
shintamainjp 0:ded8a44ff71f 336 */
shintamainjp 0:ded8a44ff71f 337 snprintf(buf, sizeof(buf), "chs=%dx%d", width, height);
shintamainjp 0:ded8a44ff71f 338 return std::string(buf);
shintamainjp 0:ded8a44ff71f 339 }