public CHexagramValueSequencer(ref CHexagramValueSequencer hvs) : this(0)
        {
            Trigram(1).Line(2).Value = hvs.Trigram(1).Line(2).Value;
            Trigram(1).Line(1).Value = hvs.Trigram(1).Line(1).Value;
            Trigram(1).Line(0).Value = hvs.Trigram(1).Line(0).Value;
            Trigram(0).Line(2).Value = hvs.Trigram(0).Line(2).Value;
            Trigram(0).Line(1).Value = hvs.Trigram(0).Line(1).Value;
            Trigram(0).Line(0).Value = hvs.Trigram(0).Line(0).Value;

            Trigram(1).Line(2).UpdateInnerValues();
            Trigram(1).Line(1).UpdateInnerValues();
            Trigram(1).Line(0).UpdateInnerValues();
            Trigram(0).Line(2).UpdateInnerValues();
            Trigram(0).Line(1).UpdateInnerValues();
            Trigram(0).Line(0).UpdateInnerValues();

            Trigram(1).Line(2).UpdateOuterValues();
            Trigram(1).Line(1).UpdateOuterValues();
            Trigram(1).Line(0).UpdateOuterValues();
            Trigram(0).Line(2).UpdateOuterValues();
            Trigram(0).Line(1).UpdateOuterValues();
            Trigram(0).Line(0).UpdateOuterValues();

            //UpdateInnerValues();
            //UpdateOuterValues();
        }
 public String DescibeSecondary(bool bValue = false)
 {
     if (IsMoving)
     {
         CHexagramValueSequencer hvsPrimary  = this;
         CHexagramValueSequencer hvsSeconday = new CHexagramValueSequencer(ref hvsPrimary);
         hvsSeconday.Move();
         return(hvsSeconday.HexagramId() + " " + hvsSeconday.Label + (bValue ? " (" + hvsSeconday.ValueStr + ")" : ""));
     }
     return("");
 }
        public CHexagramValueSequencer AutoCast(ref CHexagramValueSequencer hvs)         //////// Random ?????????????????????????????
        {
            Random r = true ? Sequences.m_ranSession : new Random(DateTime.Now.Millisecond);

            for (int l = 0; l < 6; ++l)
            {
                int count = (r.Next(5) + 1) * 100 + r.Next(100);
                for (int c = 0; c < count; ++c)
                {
                    hvs.Trigram(l / 3).Line(l % 3).Next(true);
                }
            }
            return(hvs);
        }
        public CHexagramArray MultiCast(int nCount)
        {
            CHexagramValueSequencer hvs = new CHexagramValueSequencer(63);             // more even ????????

            for (int i = 0; i < nCount; ++i)
            {
                //CHexagramValueSequencer hvs = new CHexagramValueSequencer(63);
                AutoCast(ref hvs);
                CHexagram h      = new CHexagram(ref hvs);
                int       nIndex = Array.BinarySearch(m_arrHexagram, h);
                if (nIndex >= 0)
                {
                    ((CHexagram)m_arrHexagram.GetValue(nIndex)).Add();
                }
            }
            return(this);
        }
        public CHexagramArray()
        {
            CHexagramValueSequencer hvsPrimary = new CHexagramValueSequencer(0);

            hvsPrimary.First();
            for (int p = 0; p < 64; ++p)
            {
                for (int s = 0; s < 64; ++s)
                {
                    CHexagramValueSequencer hvs = new CHexagramValueSequencer(ref hvsPrimary);
                    for (int l = 0; l < 6; ++l)
                    {
                        if (((s & (1 << l)) >> l) == 1)
                        {
                            hvs.Trigram(l / 3).Line(l % 3).Next(false);
                        }
                    }
                    Add(ref hvs);
                }
                hvsPrimary.Next();
            }
            Array.Sort(m_arrHexagram);
        }
 public void Add(ref CHexagramValueSequencer hvsPrimary)
 {
     m_arrHexagram.SetValue(new CHexagram(ref hvsPrimary), ++m_nCount);
 }
 public CHexagram(ref CHexagramValueSequencer hvsPrimary)
 {
     m_hvsPrimary = new CHexagramValueSequencer(ref hvsPrimary);
 }