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("}"); } }
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); } }
//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 ? "∞" : 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 ? "∞" : 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>"); }
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("}"); }
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("}"); } } }
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); }
public void PrintCEncode(PEREffectiveConstraint cns, StreamWriterLevel c, string errorCode, string varName, int lev) { c.P(lev); c.WriteLine("/* NULL type */"); }
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")); } } }
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)); }
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); }
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; }
public void VarsNeededForEncode(PEREffectiveConstraint cns, int arrayDepth, OrderedDictionary<string, CLocalVariable> existingVars) { }
public void PrintCEncode(PEREffectiveConstraint cns, StreamWriterLevel c, string errorCode, string varName, int lev) { SCCStringBase.PrintCEncode(this, cns, c, errorCode, varName, lev); }
public void VarsNeededForDecode(PEREffectiveConstraint cns, int arrayDepth, OrderedDictionary<string, CLocalVariable> existingVars) { if (!existingVars.ContainsKey("enumIndex")) { existingVars.Add("enumIndex", new CLocalVariable("enumIndex", "asn1SccSint", 0, "0")); } }
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); }
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("}"); }
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); }
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("}"); }
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("}"); }
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); }
public void PrintHTypeDeclaration(PEREffectiveConstraint cns, StreamWriterLevel h, string typeName, string varName, int lev) { h.Write("NullType "); }
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); }
public void PrintCDecodeItem(PEREffectiveConstraint cns, StreamWriterLevel c, string varName, int lev) { SCCStringBase.PrintCDecodeItem(this, cns, c, varName, lev); }
public void PrintHTypeDeclaration(PEREffectiveConstraint cns, StreamWriterLevel h, string typeName, string varName, int lev) { SCCStringBase.PrintHTypeDeclaration(this, cns, h, typeName, varName, lev); }
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); }
public void VarsNeededForDecode(PEREffectiveConstraint cns, int arrayDepth, OrderedDictionary<string, CLocalVariable> existingVars) { SCCSizeable.VarsNeededForDecode(this, cns, arrayDepth, existingVars); }
public override string ItemConstraint(PEREffectiveConstraint cns) { PERAlphabetAndSizeEffectiveConstraint cn = (PERAlphabetAndSizeEffectiveConstraint)cns; if (cn.m_from!=null) return cn.m_from.ToString(); return ""; }
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); } }
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; }
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); } }