Example #1
0
        /// @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);
        }
Example #2
0
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]);
  }
}