1bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi/* 2bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi * Copyright (C) 2017 The Android Open Source Project 3bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi * 4bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi * Licensed under the Apache License, Version 2.0 (the "License"); 5bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi * you may not use this file except in compliance with the License. 6bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi * You may obtain a copy of the License at 7bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi * 8bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi * http://www.apache.org/licenses/LICENSE-2.0 9bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi * 10bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi * Unless required by applicable law or agreed to in writing, software 11bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi * distributed under the License is distributed on an "AS IS" BASIS, 12bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi * See the License for the specific language governing permissions and 14bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi * limitations under the License. 15bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi */ 16bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi 17bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi#include "common/memory_image/data-store.h" 18bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi 19bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi#include "util/base/logging.h" 20bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi 21bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifinamespace libtextclassifier { 22bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifinamespace nlp_core { 23bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifinamespace memory_image { 24bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi 25bda09f1da39ce38a5ece4757b82a64776e53214cMatt SharifiDataStore::DataStore(StringPiece bytes) 26bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi : reader_(bytes.data(), bytes.size()) { 27bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi if (!reader_.success_status()) { 28bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi TC_LOG(ERROR) << "Unable to successfully initialize DataStore."; 29bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi } 30bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi} 31bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi 32bda09f1da39ce38a5ece4757b82a64776e53214cMatt SharifiDataBlobView DataStore::GetData(const std::string &name) const { 33bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi if (!reader_.success_status()) { 34bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi TC_LOG(ERROR) << "DataStore::GetData(" << name << ") " 35bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi << "called on invalid DataStore; will return empty data " 36bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi << "chunk"; 37bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi return DataBlobView(); 38bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi } 39bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi 40bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi const auto &entries = reader_.trimmed_proto().entries(); 41bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi const auto &it = entries.find(name); 42bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi if (it == entries.end()) { 43bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi TC_LOG(ERROR) << "Unknown key: " << name 44bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi << "; will return empty data chunk"; 45bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi return DataBlobView(); 46bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi } 47bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi 48bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi const DataStoreEntryBytes &entry_bytes = it->second; 49bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi if (!entry_bytes.has_blob_index()) { 50bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi TC_LOG(ERROR) << "DataStoreEntryBytes with no blob_index; " 51bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi << "will return empty data chunk."; 52bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi return DataBlobView(); 53bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi } 54bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi 55bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi int blob_index = entry_bytes.blob_index(); 56bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi return reader_.data_blob_view(blob_index); 57bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi} 58bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi 59bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi} // namespace memory_image 60bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi} // namespace nlp_core 61bda09f1da39ce38a5ece4757b82a64776e53214cMatt Sharifi} // namespace libtextclassifier 62