/* This file is part of TON Blockchain Library. TON Blockchain Library is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. TON Blockchain Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with TON Blockchain Library. If not, see . Copyright 2017-2019 Telegram Systems LLP */ #pragma once #include "catchain.h" namespace ton { namespace catchain { class CatChainBlockImpl : public CatChainBlock { private: std::unique_ptr extra_; td::uint32 src_; td::uint32 fork_; PublicKeyHash src_hash_; CatChainBlockHeight height_; CatChainBlockHash hash_; td::SharedSlice payload_; CatChainBlock *prev_; std::vector deps_; std::vector vt_; bool preprocess_sent_ = false; bool is_processed_ = false; public: td::SharedSlice &payload() override { return payload_; } const td::SharedSlice &payload() const override { return payload_; } CatChainBlock::Extra *extra() const override { return extra_.get(); } std::unique_ptr move_extra() override { return std::move(extra_); } void set_extra(std::unique_ptr extra) override { extra_ = std::move(extra); } td::uint32 source() const override { return src_; } td::uint32 fork() const override { return fork_; } PublicKeyHash source_hash() const override { return src_hash_; } CatChainBlockHash hash() const override { return hash_; } CatChainBlockHeight height() const override { return height_; } CatChainBlock *prev() override { return prev_; } const CatChainBlock *prev() const override { return prev_; } const std::vector &deps() const override { return deps_; } const std::vector &vt() const override { return vt_; } bool preprocess_is_sent() const override { return preprocess_sent_; } void preprocess_sent() override { preprocess_sent_ = true; } bool is_processed() const override { return is_processed_; } void set_processed() override { is_processed_ = true; } bool is_descendant_of(CatChainBlock *block) override; CatChainBlockImpl(td::uint32 src, td::uint32 fork, PublicKeyHash src_hash, CatChainBlockHeight height, CatChainBlockHash hash, td::SharedSlice payload, CatChainBlock *prev, std::vector deps, std::vector vt); }; } // namespace catchain } // namespace ton