Alien  1.3.0
Developer documentation
Loading...
Searching...
No Matches
BlockBuilder.cc
1/* Author : desrozis at Thu Mar 14 12:29:22 2013
2 * Generated by createNew
3 */
4
5#include <alien/utils/Precomp.h>
6#include "alien/index_manager/IIndexManager.h"
7#include "BlockBuilder.h"
8
9/*---------------------------------------------------------------------------*/
10/*---------------------------------------------------------------------------*/
11
12namespace Alien
13{
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17BlockBuilder::SizeVector::
18SizeVector(BlockBuilder& block_Builder, ConstArrayView<Integer> indexes)
19: m_block_Builder(block_Builder)
20, m_indexes(indexes)
21{}
22
23/*---------------------------------------------------------------------------*/
24
25void BlockBuilder::SizeVector::
26operator=(Integer size)
27{
28 for (Integer i = 0; i < m_indexes.size(); ++i) {
29 if (m_block_Builder.isLocal(m_indexes[i]))
30 m_block_Builder[m_indexes[i]] = size;
31 }
32}
33
34/*---------------------------------------------------------------------------*/
35
36void BlockBuilder::SizeVector::
37operator+=(Integer size)
38{
39 for (Integer i = 0; i < m_indexes.size(); ++i) {
40 if (m_block_Builder.isLocal(m_indexes[i]))
41 m_block_Builder[m_indexes[i]] += size;
42 }
43}
44
45/*---------------------------------------------------------------------------*/
46/*---------------------------------------------------------------------------*/
47
48BlockBuilder::
49BlockBuilder(IIndexManager& index_mng)
50: m_index_mng(index_mng)
51{
52 if (not index_mng.isPrepared())
53 index_mng.prepare();
54
55 Integer global_size, local_size;
56 index_mng.stats(global_size, m_offset, local_size);
57 m_next_offset = m_offset + local_size;
58
59 m_sizes.resize(local_size);
60 m_sizes.fill(0);
61}
62
63/*---------------------------------------------------------------------------*/
64
65BlockBuilder::SizeVector
66BlockBuilder::
67operator[](ConstArrayView<Integer> indexes)
68{
69 return SizeVector(*this, indexes);
70}
71
72/*---------------------------------------------------------------------------*/
73
74Integer&
75BlockBuilder::
76operator[](Integer index)
77{
78 return m_sizes[index - m_offset];
79}
80
81/*---------------------------------------------------------------------------*/
82
83const BlockSizes::ValuePerBlock&
84BlockBuilder::
85sizes() const
86{
87 if (m_sizes_computed)
88 return m_block_sizes.sizes();
89
90 m_block_sizes.prepare(m_index_mng, m_sizes);
91
92 m_sizes_computed = true;
93
94 return m_block_sizes.sizes();
95}
96
97/*---------------------------------------------------------------------------*/
98/*---------------------------------------------------------------------------*/
99} // namespace Alien
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Definition BackEnd.h:17