Beispiel #1
0
        override public bool AddFrame(Stream st)
        {
            long adding_pos = FileSource.Position;

            System.Console.WriteLine("arbe niveau " + depth.ToString() + " en " + StartPosition.ToString() + "avec " + blockCount.ToString() + " block, contenant de " + FirstFrame + " à " + LastFrame);
            if (Child.AddFrame(st))//on a un problème
            {
                addChildBlock(Child, FileSource, false);
                if (PredictHit(FileSource) && !Top.MaxBlockCountReach(depth, blockCount))//pas de problème on peut faire une nouvelle branche
                {
                    CreateNewChild(FileSource);
                    UpdateHeader(FileSource);

                    return(false);
                }
                else//le predicteur à échouer il faut arrêter
                {
                    TerminateBlock(FileSource);//on met le Block comme terminé (update aussi le header)
                    if (!Top.MaxBlockCountReach(0, blockCount))
                    {
                        Console.WriteLine("echec predicteur d=" + Depth + ", on fini avec Totalize=" + TotalSize + "(entre " + FirstFrame + " et " + LastFrame + ")");
                    }
                    Console.WriteLine("abre terminé");
                    return(true);//le problème doit remonter à l'arbre au dessus
                }
            }
            else
            {
                return(false);//pas de problème
            }
        }