Barcode& Barcode2dBase::build( const std::string& rawData, double w, double h ) { std::string cookedData; /* Preprocessed data */ Matrix<bool> encodedData; /* Encoded data matrix */ clear(); if ( rawData.empty() ) { setIsEmpty( true ); setIsDataValid( false ); setWidth( 0 ); setHeight( 0 ); } else { setIsEmpty( false ); if ( !validate( rawData ) ) { setIsDataValid( false ); setWidth( 0 ); setHeight( 0 ); } else { setIsDataValid( true ); cookedData = preprocess( rawData ); encode( cookedData, encodedData ); vectorize( encodedData, w, h ); setWidth( w ); setHeight( h ); } } return *this; }
void BlockDirectory::addBlock(MarkedBlock::Handle* block) { size_t index; if (m_freeBlockIndices.isEmpty()) { index = m_blocks.size(); size_t oldCapacity = m_blocks.capacity(); m_blocks.append(block); if (m_blocks.capacity() != oldCapacity) { forEachBitVector( NoLockingNecessary, [&] (FastBitVector& vector) { ASSERT_UNUSED(vector, vector.numBits() == oldCapacity); }); ASSERT(m_blocks.capacity() > oldCapacity); LockHolder locker(m_bitvectorLock); subspace()->didResizeBits(m_blocks.capacity()); forEachBitVector( locker, [&] (FastBitVector& vector) { vector.resize(m_blocks.capacity()); }); } } else { index = m_freeBlockIndices.takeLast(); ASSERT(!m_blocks[index]); m_blocks[index] = block; } forEachBitVector( NoLockingNecessary, [&] (FastBitVector& vector) { ASSERT_UNUSED(vector, !vector[index]); }); // This is the point at which the block learns of its cellSize() and attributes(). block->didAddToDirectory(this, index); setIsLive(NoLockingNecessary, index, true); setIsEmpty(NoLockingNecessary, index, true); }
void MarkedAllocator::addBlock(MarkedBlock::Handle* block) { size_t index; if (m_freeBlockIndices.isEmpty()) { index = m_blocks.size(); size_t oldCapacity = m_blocks.capacity(); m_blocks.append(block); if (m_blocks.capacity() != oldCapacity) { forEachBitVector( [&] (FastBitVector& vector) { ASSERT_UNUSED(vector, vector.numBits() == oldCapacity); }); ASSERT(m_blocks.capacity() > oldCapacity); forEachBitVector( [&] (FastBitVector& vector) { vector.resize(m_blocks.capacity()); }); } } else { index = m_freeBlockIndices.takeLast(); ASSERT(!m_blocks[index]); m_blocks[index] = block; } forEachBitVector( [&] (FastBitVector& vector) { ASSERT_UNUSED(vector, !vector[index]); }); // This is the point at which the block learns of its cellSize() and attributes(). block->didAddToAllocator(this, index); setIsLive(index, true); setIsEmpty(index, true); }