def encodeValue(self, encodeFun, value, defMode, maxChunkSize, ifNotEmpty=False):
value.verifySizeSpec()
substrate = null
idx = len(value)
# This is certainly a hack but how else do I distinguish SetOf
# from Set if they have the same tags&constraints?
if isinstance(value, univ.SequenceAndSetBase):
# Set
namedTypes = value.componentType
comps = []
compsMap = {}
while idx > 0:
idx -= 1
if namedTypes:
if namedTypes[idx].isOptional and not value[idx].isValue:
continue
if namedTypes[idx].isDefaulted and value[idx] == namedTypes[idx].asn1Object:
continue
comps.append(value[idx])
compsMap[id(value[idx])] = namedTypes[idx].isOptional
for comp in self._sortComponents(comps):
substrate += encodeFun(comp, defMode, maxChunkSize, ifNotEmpty=compsMap[id(comp)])
else:
# SetOf
compSubs = []
while idx > 0:
idx -= 1
compSubs.append(
encodeFun(value[idx], defMode, maxChunkSize)
)
compSubs.sort() # perhaps padding's not needed
substrate = null
for compSub in compSubs:
substrate += compSub
return substrate, True, True
评论列表
文章目录