1 /* sane - Scanner Access Now Easy. 2 3 Copyright (C) 2019 Povilas Kanapickas <povilas@radix.lt> 4 5 This file is part of the SANE package. 6 7 This program is free software; you can redistribute it and/or 8 modify it under the terms of the GNU General Public License as 9 published by the Free Software Foundation; either version 2 of the 10 License, or (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, but 13 WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <https://www.gnu.org/licenses/>. 19 */ 20 21 #ifndef BACKEND_GENESYS_REGISTER_CACHE_H 22 #define BACKEND_GENESYS_REGISTER_CACHE_H 23 24 #include "register.h" 25 26 namespace genesys { 27 28 template<class Value> 29 class RegisterCache 30 { 31 public: update(std::uint16_t address,Value value)32 void update(std::uint16_t address, Value value) 33 { 34 if (regs_.has_reg(address)) { 35 regs_.set(address, value); 36 } else { 37 regs_.init_reg(address, value); 38 } 39 } 40 update(const Genesys_Register_Set & regs)41 void update(const Genesys_Register_Set& regs) 42 { 43 for (const auto& reg : regs) { 44 update(reg.address, reg.value); 45 } 46 } 47 get(std::uint16_t address)48 Value get(std::uint16_t address) const 49 { 50 return regs_.get(address); 51 } 52 53 private: 54 RegisterContainer<Value> regs_; 55 56 template<class V> 57 friend std::ostream& operator<<(std::ostream& out, const RegisterCache<V>& cache); 58 }; 59 60 template<class Value> 61 std::ostream& operator<<(std::ostream& out, const RegisterCache<Value>& cache) 62 { 63 out << cache.regs_; 64 return out; 65 } 66 67 } // namespace genesys 68 69 #endif // BACKEND_GENESYS_LINE_BUFFER_H 70