1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: CRC32.cxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_package.hxx"
38 #include <external/zlib/zlib.h>
41 #include <PackageConstants.hxx>
42 #include <com/sun/star/io/XInputStream.hpp>
45 using namespace com::sun::star::uno
;
46 using namespace com::sun::star::io
;
48 /** A class to compute the CRC32 value of a data stream
58 void SAL_CALL
CRC32::reset()
59 throw(RuntimeException
)
63 sal_Int32 SAL_CALL
CRC32::getValue()
64 throw(RuntimeException
)
66 return nCRC
& 0xFFFFFFFFL
;
68 /** Update CRC32 with specified sequence of bytes
70 void SAL_CALL
CRC32::updateSegment(const Sequence
< sal_Int8
> &b
,
73 throw(RuntimeException
)
75 nCRC
= crc32(nCRC
, (const unsigned char*)b
.getConstArray()+off
, len
);
77 /** Update CRC32 with specified sequence of bytes
79 void SAL_CALL
CRC32::update(const Sequence
< sal_Int8
> &b
)
80 throw(RuntimeException
)
82 nCRC
= crc32(nCRC
, (const unsigned char*)b
.getConstArray(),b
.getLength());
85 sal_Int32 SAL_CALL
CRC32::updateStream( Reference
< XInputStream
> & xStream
)
86 throw ( RuntimeException
)
88 sal_Int32 nLength
, nTotal
= 0;
89 Sequence
< sal_Int8
> aSeq ( n_ConstBufferSize
);
92 nLength
= xStream
->readBytes ( aSeq
, n_ConstBufferSize
);
93 updateSegment ( aSeq
, 0, nLength
);
96 while ( nLength
== n_ConstBufferSize
);