static sk_sp<SkPDFArray> make_indexed_color_space(const SkColorTable* table) { auto result = sk_make_sp<SkPDFArray>(); result->reserve(4); result->appendName("Indexed"); result->appendName("DeviceRGB"); SkASSERT(table); if (table->count() < 1) { result->appendInt(0); char shortTableArray[3] = {0, 0, 0}; SkString tableString(shortTableArray, SK_ARRAY_COUNT(shortTableArray)); result->appendString(tableString); return result; } result->appendInt(table->count() - 1); // maximum color index. // Potentially, this could be represented in fewer bytes with a stream. // Max size as a string is 1.5k. char tableArray[256 * 3]; SkASSERT(3u * table->count() <= SK_ARRAY_COUNT(tableArray)); uint8_t* tablePtr = reinterpret_cast<uint8_t*>(tableArray); const SkPMColor* colors = table->readColors(); for (int i = 0; i < table->count(); i++) { pmcolor_to_rgb24(colors[i], tablePtr, kN32_SkColorType); tablePtr += 3; } SkString tableString(tableArray, 3 * table->count()); result->appendString(tableString); return result; }
void CSVFileAdapter::write(const TimeSeriesTable& table, const std::string& fileName) { InputTables tables{}; tables.emplace(tableString(), &table); CSVFileAdapter{}.extendWrite(tables, fileName); }
TimeSeriesTable CSVFileAdapter::readFile(const std::string& fileName) { auto abs_table = CSVFileAdapter{}.extendRead(fileName).at(tableString()); return static_cast<TimeSeriesTable&>(*abs_table); }