// crudwork // Copyright 2004 by Steve T. Pham (http://www.crudwork.com) // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with This program. If not, see <http://www.gnu.org/licenses/>. using System; using System.Collections.Generic; using System.Text; using System.IO; namespace crudwork.Utilities { /// <summary> /// Math Utility /// </summary> public static class MathUtil { /// <summary> /// Return the checksum of the buffer /// </summary> /// <param name="buffer"></param> /// <returns></returns> public static long ComputeChecksum(byte[] buffer) { return ComputeChecksum(buffer, 0); } /// <summary> /// Return the checksum of the buffer at the given offset /// </summary> /// <param name="buffer"></param> /// <param name="offset"></param> /// <returns></returns> public static long ComputeChecksum(byte[] buffer, int offset) { long sum = 0; for (int i = 0; i < buffer.Length; i++) { sum += buffer[i] * (i + 1 + offset); } return sum; } /// <summary> /// Return the checksum value of the given filename /// </summary> /// <param name="filename"></param> /// <returns></returns> public static long ComputeChecksum(string filename) { //byte[] buffer = FileUtil.ReadFile(filename, 4096); //return ComputeChecksum(buffer); long sum = 0; int bufSize = 4096; using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read)) using (BinaryReader r = new BinaryReader(fs)) { byte[] readChar = null; int offset = 0; do { readChar = r.ReadBytes(bufSize); sum += ComputeChecksum(readChar, offset); offset += readChar.Length; } while ((readChar != null) && (readChar.Length > 0)); r.Close(); //fs.Close(); } return sum; } } }