private void CreateChain(ref List chain,byte[] startword) { if (chain.Count > 0) return; //vyzadujeme prazdy retazec na zaciatku! Piece piece = new Piece(); //najpr vytvoryme zaciatok retazca [0-krok] piece.word = startword; piece.hash = settings.hashAlgo.ComputeHash(piece.word); chain.Add(piece); // pridame prvy na zaciatku for (int poz = 1; poz < settings.chainLen - 1; poz++) //v kazdej iteracii rozvijame retazec o jeden prvok { //najprv ziskame nove slovo z predchadzajucej hash hodnoty //pomocou redukcnej funkcii ktora prislucha danemu // "stplcu" v retazci // // prvok01 -> RedukcnaFunkcia01 -> prvok02 -> RedukcnaFunkcia02 -> .... -> RedukcnaFunkciaN -> prvokN // piece = new Piece(); piece.word = ReductionFunction(chain[poz - 1].hash, poz); //redukujeme hash na slovo pomocou prislusnej funkcie piece.hash = settings.hashAlgo.ComputeHash(piece.word); chain.Add(piece); } //ukoncime retazec ,pridanim posledneho prvku ktory obsahuje uz len hash piece = new Piece(); piece.word = null; piece.hash = settings.hashAlgo.ComputeHash(chain[settings.chainLen - 2].word); }