blob: c2c3c0b97cb43286c4af1ff388269d18c0fdefc8 [file] [log] [blame]
peizhen guocf4df2d2014-08-12 13:22:32 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
3 * Copyright (c) 2014, Regents of the University of California
4 *
5 * This file is part of NSL (NDN Signature Logger).
6 * See AUTHORS.md for complete list of NSL authors and contributors.
7 *
8 * NSL is free software: you can redistribute it and/or modify it under the terms
9 * of the GNU General Public License as published by the Free Software Foundation,
10 * either version 3 of the License, or (at your option) any later version.
11 *
12 * NSL is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
13 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 * PURPOSE. See the GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along with
17 * NSL, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
18 *
19 * @author Peizhen Guo <patrick.guopz@gmail.com>
20 */
21#ifndef NLS_CORE_INTERMEDIATE_NODE_HPP
22#define NLS_CORE_INTERMEDIATE_NODE_HPP
23
24#include <stddef.h>
25#include <math.h>
26#include <ndn-cxx/util/crypto.hpp>
27#include "node.hpp"
28
29
30namespace nsl {
31
32
33class IntermediateNode : public Node
34{
35public:
36
37 IntermediateNode()
38 : Node()
39 {
40 }
41
42 IntermediateNode(uint64_t sequenceNumber, uint64_t level, time_t timestamp)
43 : Node(sequenceNumber, level, timestamp), m_isFull(false)
44 {
45 }
46
47 IntermediateNode(const IntermediateNode& new_node)
48 :Node(new_node.getIndex().number, new_node.getIndex().level, 0)
49 {
50 m_isFull = new_node.isFull();
51 this->setHash(new_node.getHash());
52 }
53
54 ~IntermediateNode()
55 {
56 }
57
58 bool
59 setIsFull(uint64_t totalLeafNum);
60
61 bool
62 isFull() const;
63
64 void
65 computeHash(ndn::ConstBufferPtr hash_l, ndn::ConstBufferPtr hash_r);
66
67 void
68 computeHashOneSide(ndn::ConstBufferPtr hash_l);
69
70private:
71 bool m_isFull;
72};
73
74} // namespace nsl
75
76#endif // NLS_CORE_INTERMEDIATE_NODE_HPP