EMANE  1.2.1
slotter.inl
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015 - Adjacent Link LLC, Bridgewater, New Jersey
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  * * Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in
13  * the documentation and/or other materials provided with the
14  * distribution.
15  * * Neither the name of Adjacent Link LLC nor the names of its
16  * contributors may be used to endorse or promote products derived
17  * from this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
22  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
23  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
24  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
25  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30  * POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 inline
35  u64SlotSizeMicroseconds_{},
36  u32SlotsPerFrame_{},
37  u32FramesPerMultiFrame_{}{}
38 
39 inline
40 void EMANE::Models::TDMA::Slotter::reset(const Microseconds & slotSizeMicroseconds,
41  std::uint64_t u32SlotsPerFrame,
42  std::uint64_t u32FramesPerMultiFrame)
43 {
44  u64SlotSizeMicroseconds_ = slotSizeMicroseconds.count();
45  u32SlotsPerFrame_ = u32SlotsPerFrame;
46  u32FramesPerMultiFrame_ = u32FramesPerMultiFrame;
47 }
48 
49 inline
51 EMANE::Models::TDMA::Slotter::getMultiFrameTime(std::uint64_t u64MultiFrameIndex) const
52 {
53  return TimePoint{Microseconds{u64MultiFrameIndex *
54  u32FramesPerMultiFrame_ *
55  u32SlotsPerFrame_ *
56  u64SlotSizeMicroseconds_}};
57 }
58 
59 inline
61 {
62  return TimePoint{Microseconds{u64FrameIndex *
63  u32SlotsPerFrame_ *
64  u64SlotSizeMicroseconds_}};
65 }
66 
67 inline
69 {
70  return TimePoint{Microseconds{u64SlotIndex *
71  u64SlotSizeMicroseconds_}};
72 }
73 
74 inline
75 std::tuple<std::uint64_t,std::uint64_t,std::uint64_t>
77 {
78  std::uint64_t count = std::chrono::duration_cast<Microseconds>(timePoint.time_since_epoch()).count();
79 
80  std::uint64_t slotIndex{count / u64SlotSizeMicroseconds_};
81 
82  std::uint64_t frameIndex{slotIndex / u32SlotsPerFrame_};
83 
84  std::uint64_t multiFrameIndex{frameIndex / u32FramesPerMultiFrame_};
85 
86  return std::make_tuple(slotIndex,frameIndex,multiFrameIndex);
87 }
88 
89 inline
90 std::tuple<std::uint32_t,std::uint32_t>
91 EMANE::Models::TDMA::Slotter::getRelativeIndex(std::uint64_t u64SlotIndex) const
92 {
93  return std::make_tuple(u64SlotIndex % u32SlotsPerFrame_,
94  u64SlotIndex / u32SlotsPerFrame_ % u32FramesPerMultiFrame_);
95 }
TimePoint getMultiFrameTime(std::uint64_t u64MultiFrameIndex) const
Definition: slotter.inl:51
std::tuple< std::uint32_t, std::uint32_t > getRelativeIndex(std::uint64_t u64SlotIndex) const
Definition: slotter.inl:91
TimePoint getFrameTime(std::uint64_t u64FrameIndex) const
Definition: slotter.inl:60
TimePoint getSlotTime(std::uint64_t u64SlotIndex) const
Definition: slotter.inl:68
void reset(const EMANE::Microseconds &slotSizeMicroseconds, std::uint64_t u32SlotsPerFrame, std::uint64_t u32FramesPerMultiFrame)
Definition: slotter.inl:40
std::chrono::microseconds Microseconds
Definition: types.h:45
std::tuple< std::uint64_t, std::uint64_t, std::uint64_t > getAbsoluteIndex(const EMANE::TimePoint &timePoint) const
Definition: slotter.inl:76
Clock::time_point TimePoint
Definition: types.h:50