/// @copydoc layer::set_symbols(const sak::const_storage&) void set_symbols(const sak::const_storage &symbol_storage) { assert(symbol_storage.m_size > 0); assert(symbol_storage.m_data != 0); assert(symbol_storage.m_size <= SuperCoder::symbols() * SuperCoder::symbol_size()); // Use the copy function copy_storage(sak::storage(m_data), symbol_storage); // This will specify all symbols, also in the case // of partial data. If this is not desired then the // symbols need to be set individually. m_symbols_count = SuperCoder::symbols(); std::fill(m_symbols.begin(), m_symbols.end(), true); }
void constructorTest() { // Construct an empty storage thunder::Storage< T > default_storage; EXPECT_EQ(0, default_storage.size()); EXPECT_EQ(nullptr, default_storage.data()); // Construct an empty storage using explicit size thunder::Storage< T > size_empty_storage(0); EXPECT_EQ(0, size_empty_storage.size()); EXPECT_EQ(nullptr, size_empty_storage.data()); // Construct an empty storage from copy constructor thunder::Storage< T > copy_empty_storage(default_storage); EXPECT_EQ(0, copy_empty_storage.size()); EXPECT_EQ(nullptr, copy_empty_storage.data()); // Construct an storage with some size thunder::Storage< T > size_storage(5); int size_storage_val = 0; for (typename thunder::Storage< T >::size_type i = 0; i < 5; ++i) { size_storage[i] = static_cast< T >(size_storage_val++); } EXPECT_EQ(5, size_storage.size()); EXPECT_NE(nullptr, size_storage.data()); // Construct an storage with some size and a default value thunder::Storage< T > size_value_storage(5, (T)3); EXPECT_EQ(5, size_storage.size()); EXPECT_NE(nullptr, size_value_storage.data()); for (int i = 0; i < 5; ++i) { EXPECT_EQ((T)3, size_value_storage.data()[i]); } // Copy construct a storage thunder::Storage< T > copy_storage(size_storage); EXPECT_EQ(5, copy_storage.size()); EXPECT_NE(nullptr, copy_storage.data()); for (int i = 0; i < 5; ++i) { EXPECT_EQ(size_storage.data()[i], copy_storage.data()[i]); } // Initialzation list constructor thunder::Storage< T > init_storage({3, 4, 5, 6, 7}); EXPECT_EQ(5, init_storage.size()); EXPECT_NE(nullptr, init_storage.data()); for (int i = 0; i < 5; ++i) { EXPECT_EQ(static_cast< T >(i + 3), init_storage.data()[i]); } // Construct an storage using external data thunder::Storage< T > data_storage( init_storage.data(), init_storage.size()); EXPECT_EQ(5, data_storage.size()); EXPECT_NE(nullptr, data_storage.data()); EXPECT_EQ(init_storage.data(), data_storage.data()); for (int i = 0; i < 5; ++i) { EXPECT_EQ(static_cast< T >(i + 3), data_storage.data()[i]); } // Construct a storage using external shared data thunder::Storage< T > shared_storage( init_storage.shared(), init_storage.size()); EXPECT_EQ(5, shared_storage.size()); EXPECT_NE(nullptr, shared_storage.data()); EXPECT_EQ(init_storage.data(), shared_storage.data()); for (int i = 0; i < 5; ++i) { EXPECT_EQ(static_cast< T >(i + 3), shared_storage.data()[i]); } }