1 // Copyright (c) 2015-2022 Clearmatics Technologies Ltd
3 // SPDX-License-Identifier: LGPL-3.0+
5 #ifndef __ZETH_CORE_HASH_STREAM_TCC__
6 #define __ZETH_CORE_HASH_STREAM_TCC__
8 #include "libzeth/core/hash_stream.hpp"
13 template<typename HashT> hash_streambuf<HashT>::hash_streambuf() : hash_state()
17 template<typename HashT>
18 std::streamsize hash_streambuf<HashT>::xsputn(const char *s, std::streamsize n)
20 hash_state.update(s, n);
24 template<typename HashT>
25 hash_streambuf_wrapper<HashT>::hash_streambuf_wrapper(std::ostream *inner)
26 : hash_state(), inner_out(inner), inner_in(nullptr)
30 template<typename HashT>
31 hash_streambuf_wrapper<HashT>::hash_streambuf_wrapper(std::istream *inner)
32 : hash_state(), inner_out(nullptr), inner_in(inner)
36 template<typename HashT>
37 std::streamsize hash_streambuf_wrapper<HashT>::xsputn(
38 const char *s, std::streamsize n)
40 inner_out->write(s, n);
41 hash_state.update(s, n);
45 template<typename HashT>
46 std::streamsize hash_streambuf_wrapper<HashT>::xsgetn(
47 char *s, std::streamsize n)
50 hash_state.update(s, n);
54 template<typename HashT>
55 hash_ostream<HashT>::hash_ostream() : std::ostream(&hsb), hsb()
59 template<typename HashT>
60 void hash_ostream<HashT>::get_hash(typename HashT::OutBuffer out_hash)
62 hsb.hash_state.final(out_hash);
65 template<typename HashT>
66 hash_ostream_wrapper<HashT>::hash_ostream_wrapper(std::ostream &inner_stream)
67 : std::ostream(&hsb), hsb(&inner_stream)
71 template<typename HashT>
72 void hash_ostream_wrapper<HashT>::get_hash(typename HashT::OutBuffer out_hash)
74 hsb.hash_state.final(out_hash);
77 template<typename HashT>
78 hash_istream_wrapper<HashT>::hash_istream_wrapper(std::istream &inner_stream)
79 : std::istream(&hsb), hsb(&inner_stream)
83 template<typename HashT>
84 void hash_istream_wrapper<HashT>::get_hash(typename HashT::OutBuffer out_hash)
86 hsb.hash_state.final(out_hash);
89 } // namespace libzeth
91 #endif // __ZETH_CORE_HASH_STREAM_TCC__