コード例 #1
0
ファイル: CSSType.cs プロジェクト: kia92798/tinyasn1
        public static void PrintCIsConstraintValid(Asn1Type pThis, PEREffectiveConstraint cns, StreamWriterLevel c, string errorCode, string typeName, string varName, int lev, int arrayDepth)
        {
            string varName2 = varName;
            if (!varName.Contains("->"))
                varName2 = "*" + varName;

            if (pThis.m_constraints.Count > 0)
            {
                c.P(lev); c.Write("if ( !(");
                for (int i = 0; i < pThis.m_constraints.Count; i++)
                {
                    string ret = ((ISCConstraint)pThis.m_constraints[i]).PrintCIsConstraintValid(varName2, lev);
                    c.Write(ret);
                    if (i != pThis.m_constraints.Count - 1)
                        c.Write(" && ");
                }
                c.WriteLine(") ) {");
                c.P(lev + 1);
                c.WriteLine("*pErrCode = ERR_{0};", C.ID(errorCode));
                c.P(lev + 1);
                c.WriteLine("return FALSE;");
                c.P(lev);
                c.WriteLine("}");
            }
        }
コード例 #2
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
        public void PrintCDecode(PEREffectiveConstraint cns, StreamWriterLevel c, string varName, int lev)
        {
            long min = minItems(cns);
            long max = maxItems(cns);
            string i = "i" + (CLocalVariable.GetArrayIndex(varName) + 1);
            string length = "length" + (CLocalVariable.GetArrayIndex(varName) + 1);
            string curBlockSize = "curBlockSize" + (CLocalVariable.GetArrayIndex(varName) + 1);
            string nCount = "nCount" + (CLocalVariable.GetArrayIndex(varName) + 1);
            string prefix = "";
            bool topLevel = !varName.Contains("->");
            if (topLevel)
                prefix = varName + "->";
            else
                prefix = varName + ".";

            if (max < 0x10000)
            {
                if (min != max)
                {
                    c.P(lev);
                    c.WriteLine("if (!BitStream_DecodeConstraintWholeNumber(pBitStrm, &nCount, {0}, {1})) {{", min, max);
                    c.P(lev + 1);
                    c.WriteLine("*pErrCode = ERR_INSUFFICIENT_DATA;");
                    c.P(lev + 1);
                    c.WriteLine("return FALSE;");
                    c.P(lev);
                    c.WriteLine("}");
                    c.P(lev);
                    c.WriteLine("{0}nCount = (long)nCount;", prefix);

                }
                else
                {
                    c.P(lev);
                    c.WriteLine("{0}nCount = {1};", prefix, max);
                }

                c.P(lev);
                c.WriteLine("if (!BitStream_ReadBits(pBitStrm, {0}arr, {0}nCount)) {{", prefix);
                c.P(lev + 1);
                c.WriteLine("*pErrCode = ERR_INSUFFICIENT_DATA;");
                c.P(lev + 1);
                c.WriteLine("return FALSE;");
                c.P(lev);
                c.WriteLine("}");
            }
            else
            {
                PrintCDecodeFragmentation(cns, c, varName, lev,
                        "arr", max, prefix, length, curBlockSize, nCount);
            }
        }
コード例 #3
0
ファイル: ConstructedTypes.cs プロジェクト: kia92798/tinyasn1
        //Default implementation of PrintHtml for all types
        public static void PrintHtml(Asn1Type pThis, PEREffectiveConstraint cns, StreamWriterLevel o, int lev, List<string> comment, TypeAssigment tas, List<IConstraint> additonalConstraints)
        {
            o.WriteLine("<a name=\"{0}\"></a>", "ICD_" + tas.m_name.Replace("-", "_"));
            o.WriteLine("<table border=\"0\" width=\"100%\" >");
            o.WriteLine("<tbody>");

            o.WriteLine("<tr  bgcolor=\"{0}\">", (tas.m_createdThroughTabulization ? "#379CEE" : "#FF8f00"));
            o.WriteLine("<td height=\"35\" colspan=\"2\"  >");
            o.WriteLine("<font face=\"Verdana\" color=\"#FFFFFF\" size=\"4\">{0}</font><font face=\"Verdana\" color=\"#FFFFFF\" size=\"2\">({1}) </font>", tas.m_name, pThis.Name);
            o.WriteLine("<font face=\"Verdana\" color=\"#FFFFFF\" size=\"2\"><a href=\"#{0}\">ASN.1</a></font>", "ASN1_" + tas.m_name.Replace("-", "_"));
            o.WriteLine("</td>");

            o.WriteLine("<td height=\"35\" align=\"center\">");
            o.WriteLine("    <font face=\"Verdana\" color=\"#FFFFFF\" size=\"2\">min = {0} bytes</font>", (pThis.MinBytesInPER == -1 ? "&#8734" : pThis.MinBytesInPER.ToString()));
            o.WriteLine("</td>");

            o.WriteLine("<td height=\"35\" align=\"center\">");
            o.WriteLine("    <font face=\"Verdana\" color=\"#FFFFFF\" size=\"2\">max = {0} bytes{1}</font>", (pThis.MaxBytesInPER == -1 ? "&#8734" : pThis.MaxBytesInPER.ToString()), pThis.MaxBitsInPER_Explained);
            o.WriteLine("</td>");
            o.WriteLine("</tr>");

            IInternalContentsInHtml pICIH = pThis as IInternalContentsInHtml;
            string tmp = string.Empty;
            if (pICIH != null)
                tmp = pICIH.InternalContentsInHtml(additonalConstraints);
            if (comment.Count > 0 || tmp.Length > 0)
            {
                o.WriteLine("<tr class=\"CommentRow\">");
                o.WriteLine("<td class=\"comment2\" colspan=\"4\">" + o.BR(comment) + tmp + "</td>");
                o.WriteLine("</tr>");
            }

            o.WriteLine("<tr class=\"headerRow\">");
            o.WriteLine("<td class=\"hrconstraint2\" colspan=\"2\">Constraints</td>");
            o.WriteLine("<td class=\"hrMin2\">Min Length (bits)</td>");
            o.WriteLine("<td class=\"hrMax2\">Max Length (bits)</td>");
            o.WriteLine("</tr>");

            o.WriteLine("<tr class=\"OddRow\">");
            o.WriteLine("    <td class=\"constraint\" colspan=\"2\">{0}</td>", o.Constraint(pThis.Constraints + BaseConstraint.AsString(additonalConstraints)));
            o.WriteLine("    <td class=\"min\" >{0}</td>", pThis.MinBitsInPER);
            o.WriteLine("    <td class=\"max\" >{0}{1}</td>", pThis.MaxBitsInPER, pThis.MaxBitsInPER_Explained);
            o.WriteLine("</tr>");

            o.WriteLine("</tbody>");
            o.WriteLine("</table>");
        }
コード例 #4
0
ファイル: SCCChoiceType.cs プロジェクト: kia92798/tinyasn1
        public void PrintCDecode(PEREffectiveConstraint cns, StreamWriterLevel c, string varName, int lev)
        {
            string varName2 = varName;
            if (!varName.Contains("->"))
                varName2 += "->";
            else
                varName2 += ".";

            int largestIndex = -1;
            foreach (string v in m_children.Keys)
            {
                if (m_children[v].m_extended)
                    continue;
                largestIndex++;
            }

            c.P(lev);
            c.WriteLine("if (!BitStream_DecodeConstraintWholeNumber(pBitStrm, &nChoiceIndex, {0}, {1})) {{", 0, largestIndex);
            c.P(lev + 1);
            c.WriteLine("*pErrCode = ERR_INSUFFICIENT_DATA;");
            c.P(lev + 1);
            c.WriteLine("return FALSE;");
            c.P(lev);
            c.WriteLine("}");
            c.P(lev);
            c.WriteLine("switch(nChoiceIndex)");
            c.P(lev); c.WriteLine("{");
            int choiceIndex = 0;
            foreach (ChoiceChild ch in m_children.Values)
            {
                c.P(lev); c.WriteLine("case {0}:", choiceIndex);
                ((ISCCType)ch.m_type).PrintCDecode(ch.m_type.PEREffectiveConstraint, c,
                    varName2 + "u." + C.ID(ch.m_childVarName), lev + 1);

                c.P(lev + 1);
                c.WriteLine("{0}kind = {1};", varName2, ch.CID);
                c.P(lev + 1);
                c.WriteLine("break;");
                choiceIndex++;
            }
            c.P(lev); c.WriteLine("}");
        }
コード例 #5
0
ファイル: SCCArray.cs プロジェクト: kia92798/tinyasn1
        public static void PrintCInitialize(ArrayType pThis, PEREffectiveConstraint cns,
            Asn1Value defauleVal, StreamWriterLevel c, string typeName, string varName, int lev, int arrayDepth)
        {
            long min = pThis.minItems(cns);
            long max = pThis.maxItems(cns);
            string i = "i" + arrayDepth.ToString();
            string prefix = "";
            bool topLevel = !varName.Contains("->");
            if (topLevel)
                prefix = varName + "->";
            else
            {
                prefix = varName + ".";
            }

            ArrayValue arVal = defauleVal as ArrayValue;
            if (arVal == null)
            {
                c.P(lev);
                c.WriteLine("{0}nCount = 0;", prefix);

                c.P(lev); c.WriteLine("for({0}=0;{0}<{1};{0}++)", i, pThis.maxItems(cns));
                c.P(lev); c.WriteLine("{");
                ((ISCCType)pThis.m_type).PrintCInitialize(pThis.m_type.PEREffectiveConstraint, pThis.m_type.GetOneValidValue(), c,
                    typeName + "_arr", prefix + "arr[" + i + "]", lev + 1, arrayDepth + 1);
                c.P(lev); c.WriteLine("}");
            }
            else
            {
                c.P(lev);
                c.WriteLine("{0}nCount = {1};", prefix, arVal.m_children.Count);
                for (int k = 0; k < arVal.m_children.Count; k++)
                {
                    c.P(lev); c.WriteLine("{");
                    ((ISCCType)pThis.m_type).PrintCInitialize(pThis.m_type.PEREffectiveConstraint, arVal.m_children[k], c,
                        typeName + "_arr", prefix + "arr[" + k.ToString() + "]", lev + 1, arrayDepth + 1);
                    c.P(lev); c.WriteLine("}");
                }
            }
        }
コード例 #6
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
 public void PrintCInitialize(PEREffectiveConstraint cns, Asn1Value defaultVal, StreamWriterLevel h, string typeName, string varName, int lev, int arrayDepth)
 {
     bool topLevel = !varName.Contains("->");
     h.P(lev);
     if (topLevel)
         h.WriteLine("*{0} = 0;", varName);
     else
         h.WriteLine("{0} = 0;", varName);
 }
コード例 #7
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
 public void PrintCEncode(PEREffectiveConstraint cns, StreamWriterLevel c, string errorCode, string varName, int lev)
 {
     c.P(lev); c.WriteLine("/* NULL type */");
 }
コード例 #8
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
 public void VarsNeededForDecode(PEREffectiveConstraint cns, int arrayDepth, OrderedDictionary<string, CLocalVariable> existingVars)
 {
     PERIntegerEffectiveConstraint cn = cns as PERIntegerEffectiveConstraint;
     if (cns != null && cn.Extensible)
     {
         if (!existingVars.ContainsKey("extBit"))
         {
             existingVars.Add("extBit", new CLocalVariable("extBit", "flag", 0, "FALSE"));
         }
     }
 }
コード例 #9
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
        public void PrintCInitialize(PEREffectiveConstraint cns, Asn1Value defaultVal, StreamWriterLevel h, string typeName, string varName, int lev, int arrayDepth)
        {
            bool topLevel = !varName.Contains("->");
            long defValue = 0;

            PERIntegerEffectiveConstraint intCns = cns as PERIntegerEffectiveConstraint;
            if (defaultVal != null)
                defValue = ((IntegerValue)defaultVal).Value;

            h.P(lev);
            if (topLevel)
                h.WriteLine("*{0} = {1};", varName, C.L(defValue));
            else
                h.WriteLine("{0} = {1};", varName, C.L(defValue));
        }
コード例 #10
0
ファイル: SingleTypes.cs プロジェクト: kia92798/tinyasn1
 public void PrintHtml(PEREffectiveConstraint cns, StreamWriterLevel o, int lev, List<string> comment, TypeAssigment tas, List<IConstraint> additonalConstraints)
 {
     ICDBType.PrintHtml(this, cns, o, lev, comment, tas, additonalConstraints);
 }
コード例 #11
0
ファイル: StringTypes.cs プロジェクト: kia92798/tinyasn1
        public override long maxItemBitsInPER(PEREffectiveConstraint cns)
        {
            if (!DefaultBackend.EnterRecursiveFunc(MB.GetCurrentMethod().Name, this))
                return -1;
            long ret = minItemBitsInPER(cns);

            DefaultBackend.LeaveRecursiveFunc(MB.GetCurrentMethod().Name, this);

            return ret;
        }
コード例 #12
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
 public void VarsNeededForEncode(PEREffectiveConstraint cns, int arrayDepth, OrderedDictionary<string, CLocalVariable> existingVars)
 {
 }
コード例 #13
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
 public void PrintCEncode(PEREffectiveConstraint cns, StreamWriterLevel c, string errorCode, string varName, int lev)
 {
     SCCStringBase.PrintCEncode(this, cns, c, errorCode, varName, lev);
 }
コード例 #14
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
 public void VarsNeededForDecode(PEREffectiveConstraint cns, int arrayDepth, OrderedDictionary<string, CLocalVariable> existingVars)
 {
     if (!existingVars.ContainsKey("enumIndex"))
     {
         existingVars.Add("enumIndex", new CLocalVariable("enumIndex", "asn1SccSint", 0, "0"));
     }
 }
コード例 #15
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
 public void PrintCIsConstraintValid(PEREffectiveConstraint cns, StreamWriterLevel c, string errorCode, string typeName, string varName, int lev, int arrayDepth)
 {
     CSSType.PrintCIsConstraintValid(this, cns, c, errorCode, typeName, varName, lev, arrayDepth);
 }
コード例 #16
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
        public void PrintHTypeDeclaration(PEREffectiveConstraint cns, StreamWriterLevel h, string typeName, string varName, int lev)
        {
            h.WriteLine("enum {");
            //            h.WriteLine("enum {0} {{", typeName);
            int i = 0;
            foreach (Item it in m_enumValues.Values)
            {
                h.P(lev + 1);
                h.Write("{0} = {1}", it.CID, it.m_value);
                if (i < m_enumValues.Values.Count - 1)
                    h.WriteLine(",");
                else
                    h.WriteLine();
                i++;
            }

            h.P(lev);
            h.Write("}");
        }
コード例 #17
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
 public void PrintCInitialize(PEREffectiveConstraint cns, Asn1Value defauleVal, StreamWriterLevel h, string typeName, string varName, int lev, int arrayDepth)
 {
     bool topLevel = !varName.Contains("->");
     EnumeratedValue v = defauleVal as EnumeratedValue;
     string defVal = m_enumValues.Values[0].CID;
     if (v != null)
         defVal = m_enumValues[v.ID].CID;
     h.P(lev);
     if (topLevel)
         h.WriteLine("*{0} = {1};", varName, defVal);
     else
         h.WriteLine("{0} = {1};", varName, defVal);
 }
コード例 #18
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
        public void PrintCEncode(PEREffectiveConstraint cns, StreamWriterLevel c, string errorCode, string varName, int lev)
        {
            string varName2 = varName;
            if (!varName.Contains("->"))
                varName2 = "*" + varName;

            c.P(lev);
            c.WriteLine("switch({0})", varName2);
            c.P(lev); c.WriteLine("{");
            int index = 0;
            foreach (Item it in m_enumValues.Values)
            {
                c.P(lev); c.WriteLine("case {0}:", it.CID);
                c.P(lev + 1);
                c.WriteLine("BitStream_EncodeConstraintWholeNumber(pBitStrm, {0}, {1}, {2});", index, 0, RootItemsCount - 1);
                c.P(lev + 1);
                c.WriteLine("break;");
                index++;
            }
            c.P(lev); c.WriteLine("}");
        }
コード例 #19
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
        public void PrintCDecode(PEREffectiveConstraint cns, StreamWriterLevel c, string varName, int lev)
        {
            string varName2 = varName;
            if (!varName.Contains("->"))
                varName2 = "*" + varName;

            c.P(lev);
            c.WriteLine("if (!BitStream_DecodeConstraintWholeNumber(pBitStrm, &enumIndex, {0}, {1})) {{", 0, RootItemsCount - 1);
            c.P(lev + 1);
            c.WriteLine("*pErrCode = ERR_INSUFFICIENT_DATA;");
            c.P(lev + 1);
            c.WriteLine("return FALSE;");
            c.P(lev);
            c.WriteLine("}");
            c.P(lev);
            c.WriteLine("switch(enumIndex)");
            c.P(lev); c.WriteLine("{");
            int index = 0;
            foreach (Item it in m_enumValues.Values)
            {
                c.P(lev); c.WriteLine("case {0}:", index);
                c.P(lev + 1);
                c.WriteLine("{0} = {1};", varName2, it.CID);
                c.P(lev + 1);
                c.WriteLine("break;");
                index++;
            }

            c.P(lev); c.WriteLine("}");
        }
コード例 #20
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
 public void PrintCInitialize(PEREffectiveConstraint cns, Asn1Value defaultVal, StreamWriterLevel h, string typeName, string varName, int lev, int arrayDepth)
 {
     bool topLevel = !varName.Contains("->");
     BooleanValue b = defaultVal as BooleanValue;
     string defVal = "FALSE";
     if (b != null && b.Value)
         defVal = "TRUE";
     h.P(lev);
     if (topLevel)
         h.WriteLine("*{0} = {1};", varName, defVal);
     else
         h.WriteLine("{0} = {1};", varName, defVal);
 }
コード例 #21
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
 public void PrintHTypeDeclaration(PEREffectiveConstraint cns, StreamWriterLevel h, string typeName, string varName, int lev)
 {
     h.Write("NullType ");
 }
コード例 #22
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
 public void PrintCInitialize(PEREffectiveConstraint cns, Asn1Value defaultVal, StreamWriterLevel h, string typeName, string varName, int lev, int arrayDepth)
 {
     SCCStringBase.PrintCInitialize(this, cns, defaultVal, h, typeName, varName, lev, arrayDepth);
 }
コード例 #23
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
 public void PrintCDecodeItem(PEREffectiveConstraint cns, StreamWriterLevel c, string varName, int lev)
 {
     SCCStringBase.PrintCDecodeItem(this, cns, c, varName, lev);
 }
コード例 #24
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
 public void PrintHTypeDeclaration(PEREffectiveConstraint cns, StreamWriterLevel h, string typeName, string varName, int lev)
 {
     SCCStringBase.PrintHTypeDeclaration(this, cns, h, typeName, varName, lev);
 }
コード例 #25
0
ファイル: SingleTypes.cs プロジェクト: kia92798/tinyasn1
 public void PrintHtml(PEREffectiveConstraint cns, StreamWriterLevel o, int lev, List<string> comment, TypeAssigment tas, List<IConstraint> additonalConstraints)
 {
     ((ICDType)Type).PrintHtml(cns, o, lev, comment, tas, m_constraints);
 }
コード例 #26
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
 public void VarsNeededForDecode(PEREffectiveConstraint cns, int arrayDepth, OrderedDictionary<string, CLocalVariable> existingVars)
 {
     SCCSizeable.VarsNeededForDecode(this, cns, arrayDepth, existingVars);
 }
コード例 #27
0
ファイル: StringTypes.cs プロジェクト: kia92798/tinyasn1
 public override string ItemConstraint(PEREffectiveConstraint cns)
 {
     PERAlphabetAndSizeEffectiveConstraint cn = (PERAlphabetAndSizeEffectiveConstraint)cns;
     if (cn.m_from!=null)
         return cn.m_from.ToString();
     return "";
 }
コード例 #28
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
        public void PrintCDecode(PEREffectiveConstraint cns, StreamWriterLevel c, string varName, int lev)
        {
            string var = varName;
            if (varName.Contains("->"))
                var = "&" + var;
            PERIntegerEffectiveConstraint cn = cns as PERIntegerEffectiveConstraint;
            if (cn == null) //unconstraint integer
            {
                c.P(lev);
                c.WriteLine("if (!BitStream_DecodeUnConstraintWholeNumber(pBitStrm, {0})) {{", var);
                c.P(lev + 1);
                c.WriteLine("*pErrCode = ERR_INSUFFICIENT_DATA;");
                c.P(lev + 1);
                c.WriteLine("return FALSE;");
                c.P(lev);
                c.WriteLine("}");
            }
            else
            {
                if (cn.Extensible)
                {
                    c.P(lev);
                    c.WriteLine("if (!BitStream_ReadBit(pBitStrm, &extBit)) { /* read extension bit*/ ");
                    c.P(lev + 1);
                    c.WriteLine("*pErrCode = ERR_INSUFFICIENT_DATA;");
                    c.P(lev + 1);
                    c.WriteLine("return FALSE;");
                    c.P(lev);
                    c.WriteLine("}");

                    c.P(lev);
                    c.WriteLine("if (extBit==0) { /* ext bit is zero ==> value is expecteted with root range*/");
                    DecodeNormal(cn, c, var, lev + 1);
                    c.P(lev); c.WriteLine("} else {");
                    c.P(lev + 1);
                    c.WriteLine("if (!BitStream_DecodeUnConstraintWholeNumber(pBitStrm, {0})) {{", var);
                    c.P(lev + 2);
                    c.WriteLine("*pErrCode = ERR_INSUFFICIENT_DATA;");
                    c.P(lev + 2);
                    c.WriteLine("return FALSE;");
                    c.P(lev + 1);
                    c.WriteLine("}");
                    c.P(lev);
                    c.WriteLine("}");
                }
                else
                    DecodeNormal(cn, c, var, lev);

            }
        }
コード例 #29
0
ファイル: StringTypes.cs プロジェクト: kia92798/tinyasn1
        public override long minItemBitsInPER(PEREffectiveConstraint cns)
        {
            if (!DefaultBackend.EnterRecursiveFunc(MB.GetCurrentMethod().Name, this))
                return 0;
            PERAlphabetAndSizeEffectiveConstraint cn = (PERAlphabetAndSizeEffectiveConstraint)cns;
            long ret = BitsPerSingleChar(cn.m_from);

            DefaultBackend.LeaveRecursiveFunc(MB.GetCurrentMethod().Name, this);

            return ret;
        }
コード例 #30
0
ファイル: SCCSingleTypes.cs プロジェクト: kia92798/tinyasn1
        public void PrintCEncode(PEREffectiveConstraint cns, StreamWriterLevel c, string errorCode, string varName, int lev)
        {
            string var = varName;
            if (!varName.Contains("->"))
                var = "*" + var;

            PERIntegerEffectiveConstraint cn = cns as PERIntegerEffectiveConstraint;
            if (cn == null) //unconstraint integer
            {
                c.P(lev);
                c.WriteLine("BitStream_EncodeUnConstraintWholeNumber(pBitStrm, {0});", var);
            }
            else
            {
                if (cn.Extensible)
                {
                    if ((cn.m_extRange == null))
                    {
                        c.P(lev);
                        c.WriteLine("BitStream_AppendBitZero(pBitStrm); /* write extension bit*/");
                        EncodeNormal(cn, c, var, lev);
                    }
                    else
                    {
                        c.P(lev);
                        c.Write("if ");
                        for (int i = 0; i < m_constraints.Count; i++)
                        {
                            string ret = ((ISCConstraint)m_constraints[i]).PrintCIsRootConstraintValid(var, lev);
                            c.Write(ret);
                            if (i != m_constraints.Count - 1)
                                c.Write(" && ");
                        }
                        c.WriteLine(" {");
                        c.P(lev + 1);
                        c.WriteLine("BitStream_AppendBitZero(pBitStrm); /* value within root range, so ext bit is zero*/");
                        EncodeNormal(cn, c, var, lev + 1);
                        c.P(lev);
                        c.WriteLine("} else {");
                        lev++;
                        c.P(lev);
                        c.WriteLine("/* value is not within root range, so ext bit is one and value is encoded as uncostraint*/");
                        c.P(lev);
                        c.WriteLine("BitStream_AppendBitOne(pBitStrm);");
                        c.P(lev);
                        c.WriteLine("BitStream_EncodeUnConstraintWholeNumber(pBitStrm, {0});", var);
                        lev--;
                        c.P(lev);
                        c.WriteLine("}");
                    }

                }
                else
                    EncodeNormal(cn, c, var, lev);

            }
        }