public virtual cBitStream Not() { if(!m_open) throw new ObjectDisposedException("ObjectDisposed_BitStreamClosed"); // Create the new BitStream cBitStream bstrmNew = new cBitStream(m_buffer_length); uint uiWholeUInt32Lengths = m_buffer_length >> c_bit_buffer_unit_size_shift; uint uiCounter = 0; for(uiCounter = 0; uiCounter < uiWholeUInt32Lengths; uiCounter++) bstrmNew.m_buffer[uiCounter] = ~m_buffer[uiCounter]; // Are there any further bits in the buffer? if((m_buffer_length & c_bit_buffer_unit_size_mod) > 0) { uint uiBitMask = uint.MaxValue << (int)(c_bit_buffer_unit_size - (m_buffer_length & c_bit_buffer_unit_size_mod)); bstrmNew.m_buffer[uiCounter] = ~m_buffer[uiCounter] & uiBitMask; } return bstrmNew; }
public virtual cBitStream Or(cBitStream bits) { if(!m_open) throw new ObjectDisposedException("ObjectDisposed_BitStreamClosed"); if(bits == null) throw new ArgumentNullException("bits", "ArgumentNull_BitStream"); if(bits.Length != m_buffer_length) throw new ArgumentException("Argument_DifferentBitStreamLengths"); // Create the new BitStream cBitStream bstrmNew = new cBitStream(m_buffer_length); uint uiWholeUInt32Lengths = m_buffer_length >> c_bit_buffer_unit_size_shift; uint uiCounter = 0; for(uiCounter = 0; uiCounter < uiWholeUInt32Lengths; uiCounter++) bstrmNew.m_buffer[uiCounter] = m_buffer[uiCounter] | bits.m_buffer[uiCounter]; // Are there any further bits in the buffer? if((m_buffer_length & c_bit_buffer_unit_size_mod) > 0) { uint uiBitMask = uint.MaxValue << (int)(c_bit_buffer_unit_size - (m_buffer_length & c_bit_buffer_unit_size_mod)); bstrmNew.m_buffer[uiCounter] = m_buffer[uiCounter] | bits.m_buffer[uiCounter] & uiBitMask; } return bstrmNew; }
public virtual cBitStream Copy() { cBitStream bstrmCopy = new cBitStream(this.Length); Buffer.BlockCopy(m_buffer, 0, bstrmCopy.m_buffer, 0, bstrmCopy.m_buffer.Length << 2); bstrmCopy.m_buffer_length = this.m_buffer_length; return bstrmCopy; }