Listing 2

class Mgt : public Composite {
 public:
    Mgt() : 
        Composite("Mgt")
    {
        Add(new Bitset("tableId",		8));
        Add(new Bitset("sectionSyntaxIndicator",	1));
        Add(new Bitset("privateIndicator",	1));
        Add(new Bitset("reserved2a",		2));
        Add(new Bitset("sectionLength",	12));
        Add(new Bitset("tableIdExtention",	16));
        Add(new Bitset("reserved2b",		2));
        Add(new Bitset("versionNumber",	5));
        Add(new Bitset("currentNextIndicator",	1));
        Add(new Bitset("sectionNumber",	8));
        Add(new Bitset("lastSectionNumber",	8));
        Add(new Bitset("protocolVersion",	8));                
        Add(new Bitset("tablesDefined",	16));
        Add(new List  ("tables",                 LIST_INFO(MgtDefinedTable, 
                                                 Mgt, KeepReadingTables)));
        Add(new Bitset("reserved4",		4));
        Add(new Bitset("descriptorsLength",	12));
        Add(new List  ("descriptors",
         LIST_INFO(SIDescriptor, Mgt, KeepReadingDescriptors)));
        Add(new Bitset("crc",		32));
    }
 private:
    bool KeepReadingTables() {
        return Value("tables") < Value("tablesDefined");
    }
    bool KeepReadingDescriptors() {
        return SizeInBytes("descriptors") < Value("descriptorsLength");
    }
};