рдпрд╣ рд▓реЗрдЦ "рдЯреЗрдХреНрд╕реНрдЯ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░" рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рд▓реЗрдЦрдХ рдХреА рдорд╛рдиреНрдпрддрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд▓реЗрдЦ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдореЗрдВ, рд╣рдо рдкрд╛рда рдХреЛ рд╕реНрддрд░реЛрдВ рдореЗрдВ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред (
рдЖрд░рдВрдн рдФрд░
рдЕрдВрдд )ред
рд▓реЗрдЦ рд╕рдВрд░рдЪрдирд╛:
- рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
- рдХреЛрдб рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП
- TAuthoringAnalyser рдЗрдВрдЯрд░реНрдирд▓ рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдЯреЛрд░реЗрдЬ
- рд░рдгрдиреАрддрд┐рдпреЛрдВ рдкрд░ рд░рд╛рдЬреНрдп рдорд╢реАрди рджреНрд╡рд╛рд░рд╛ рд╕рдорддрд▓ рдХрд░рдирд╛
- рдЖрд╡реГрддреНрддрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрдЧреНрд░рд╣
- рд╣реИрдорд┐рдВрдЧ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдордЧреНрд░реА:
- рдкрд╛рда рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд░реЛрдд (рдмреЛрд░рд▓реИрдВрдб рд╕реА ++ рдмрд┐рд▓реНрдбрд░ 6.0)
- рдПрдХреНрд╕реЗрд▓ рдореЗрдВ рд╣реИрдорд┐рдВрдЧ рдиреНрдпреВрд░рд▓ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг ( [xls] )
- рдЕрдВрддрд░рд┐рдХреНрд╖рдпрд╛рди рдХреЗ рд╕реНрддрд░ рдореЗрдВ рдкрд╛рда рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рддрд╛рд▓рд┐рдХрд╛ ( [xls] )
- рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рдордВрдЬрд╕реНрдп рдХреА рдЧрдгрдирд╛ ( [xls] )
- рдкрд╛рда рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдбрд┐рдкреНрд▓реЛрдорд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ ( [рдкреАрдкреАрдЯреА] )
- "рд╕рджреНрднрд╛рд╡ рдХреЗ рдорд╛рдирдЪрд┐рддреНрд░" рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ ( [рдкреАрдкреАрдЯреА] )
- рдпреЗ рд╕рднреА рд╕рд╛рдордЧреНрд░рд┐рдпрд╛рдВ рд╕рдВрдХреБрдЪрд┐рдд рд╣реИрдВ ( [рдЬрд╝рд┐рдк] , [thesez] , [rar] )
рдЖрд╡рд╢реНрдпрдХ:
- рдкрд╛рда рдХреЛ рд╢рдмреНрджреЛрдВ, рд╡рд╛рдХреНрдпреЛрдВ рдФрд░ рдЕрдиреБрдЪреНрдЫреЗрджреЛрдВ рдореЗрдВ рддреЛрдбрд╝ рджреЗрдВред
- рдЗрди рд╕реНрддрд░реЛрдВ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛, рдЖрдВрддрд░рд┐рдХ рдмреЛрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирдирд╛ред
- рдЗрди рд╕реНрддрд░реЛрдВ рдХреЛ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рди рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рдЧреНрд░рдВрдереЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреА рдирдХрд▓ рдХреА рдЬрд╛рдПрдЧреАред

рдирд┐рд╖реНрдХрд░реНрд╖:
- рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╕рд╛рде рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрддрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рддрд╛рд░реНрдХрд┐рдХ рддрд░реАрдХреЗ рд╕реЗ, рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдпрд╣рд╛рдВ рдлрд┐рдЯ рд╣реЛрддреА рд╣реИ (рд░реЗрдВрдЬ, [1] , [2] , [3] ); рдФрд░ рдпрджреНрдпрдкрд┐ рдЙрд╕ рд╕рдордп рдореБрдЭреЗ рдЕрднреА рднреА рд░реЗрдВрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдкрддрд╛ рдерд╛, рди рд╣реА рдЕрд▓реЗрдХреНрдЬреЗрдВрдбреНрд░реЗрд╕реНрдХреБ ( [1] ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореБрдЭреЗ рдкреНрд░рд┐рдорд┐рдЯрд┐рд╡ рд░реЗрдВрдЬ рдорд┐рд▓реАред рд░реЗрдВрдЬ рдореЗрдВ рдПрдХ рд╢реБрд░реБрдЖрддреА рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рдПрдВрдбрд┐рдВрдЧ рдЗрдВрдбреЗрдХреНрд╕ рд╣реЛрддрд╛ рд╣реИ: RangeItem (BeginIndex, EndIndex), рдпрд╛ рдПрдХ рд╢реБрд░реБрдЖрддреА рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рдорд╛рддреНрд░рд╛ (рдСрдлрд╕реЗрдЯ): рд░реЗрдВрдЬ (BeginIndex, Count)ред рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдкрд╛рда рдореЗрдВ рд╡рд░реНрдгреЛрдВ рдХреЗ рдкрджреЛрдВ рдХреЗ рдмрд┐рд▓реНрдХреБрд▓ рдЕрдиреБрд░реВрдк рд╣реИред рдпрджрд┐ рд╣рдо рд╕рднреА рдкрд╛рда рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд░реЗрдВрдЬ рдЗрдЯреЗрдо (1, рд▓рдВрдмрд╛рдИ (рдкрд╛рда)) рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╣рдореЗрдВ рдмреАрдЪ рдореЗрдВ рдХреБрдЫ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдореЗрдВ рд░реЗрдВрдЬ рдЗрдЯреЗрдо (312031, 312355) рдорд┐рд▓рддрд╛ рд╣реИред рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рд╕реАрдзреЗ рдХреЙрдкреА рдХрд┐рдП рдмрд┐рдирд╛ рдкрд╛рда рдХреЗ рдЯреБрдХрдбрд╝реЗ рд╣реЛрдВрдЧреЗред
- рдПрдмреНрд╕рдЯреНрд░реИрдХреНрд╢рди рдХреЗ рдкреАрдЫреЗ рд░рдВрдЧреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реБрдП, рдЬреЛ рдкрд╣рд▓реЗ рдФрд░ рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдЧреНрд░рд╛рдл рд╣реИрдВ, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЙрд╕ рдкрд╛рда рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЙрдирдореЗрдВ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИред рд╣рдореЗрдВ рдЗрд╕ рдмрд╛рдд рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпреЗ рд░реЗрдВрдЬ рдХрд┐рддрдиреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рдХрд╣рд╛рдБ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП рд╣рдо рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреА рдУрд░ рдореБрдбрд╝реЗрдВ, рдФрд░ рд╡рд╣ рд╣рдореЗрдВ рд╡рд╣реА рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВред
- рд╢рдмреНрджреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЕрдиреНрдп рд╡рд░реНрдгреЛрдВ рдХреЗ рдмреАрдЪ рдХреЗ рд╕рднреА рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрд╛рдиреЗрдВ ... рдкреИрд░рд╛рдЧреНрд░рд╛рдл рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╣рдЪрд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЬрдм рддрдХ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЗ рдЕрдВрдд рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( [1] )ред рдФрд░ рдпрд╣рд╛рдБ рдСрдлрд╝рд░ рд╣реИрдВ ... рдХрд┐рддрдиреЗ, рдХреНрдпрд╛ рдЖрдк рд╕реЛрдЪреЗрдВрдЧреЗ, рдСрдлрд╝рд░ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдХрд╛рдиреВрдиреА" рд╕рдВрдХреЗрдд рд╣реИрдВ? рддреАрди! рдПрдХ рдмрд┐рдВрджреБ, рдПрдХ рдкреНрд░рд╢реНрди рдФрд░ рдПрдХ рд╡рд┐рд╕реНрдордпрд╛рджрд┐рдмреЛрдзрдХ? .. рдЬрд╣рд╛рдБ рд╡рд╣рд╛рдБ! .. рд╡реЗ рдЕрднреА рднреА рд╕рдВрдпреБрдХреНрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ !!! ( [рез] )ред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИ; рдореИрдВ рдРрд╕реЗ рдирд┐рд░реНрдорд╛рдгреЛрдВ рд╕реЗ рдорд┐рд▓рд╛ рдЬрд╣рд╛рдБ рдПрдХ рд╡рд╛рдХреНрдп рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛ рдпрд╛ рдЕрдзрд┐рдХ рд╣реИрдВред рдФрд░ рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдЧрд▓рдд рдорд╛рдирддреЗ рд╣реИрдВ, рддреЛ рд╕рд╛рдд рдкрд┐рдЫрд▓реЗ рд╡рд╛рдХреНрдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдкрдВрджреНрд░рд╣ рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЧрд┐рдирддреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рд╖реНрдХрд░реНрд╖, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕реНрдкрд╖реНрдЯ рд╣реИ: рд╣рдореЗрдВ рдПрдХ рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдХреЗрдП рдПрдХ рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди рд╣реИ (
[1] ,
[реи] ,
[рей] )ред рдЗрд╕рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкрд╛рддреНрд░реЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХреБрдЫ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ: рд╢рдмреНрдж, рдпреМрдЧрд┐рдХ рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрди, рдХрд╛рд░реНрдп, рд╕рдВрд░рдЪрдирд╛рдПрдВ, рдЙрдирдХреЗ рддрд░реАрдХреЛрдВ рдФрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░реЗ рд╡рд░реНрдЧред рдпрд╣ рд╡рд░реНрддрдиреАрдХрд╛рд░, рд╕реНрд░реЛрдд рдХреЛрдб рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░, рдХрдВрдкрд╛рдЗрд▓рд░, рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдЯреВрд▓ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХрд╛ рдХрдВрдкреНрдпреВрдЯрд░ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИред рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рдХреА рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЛ рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрд░реА рдХрдерд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛, рдФрд░ рдпрд╣ рд╕рдВрднрд╡ рд╣реИред рдпрд╣рд╛рдВ, 2003 рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реЗрд░реНрдЧреЗрдИ рд╕рддреНрд╕реНрдХреА (
[1] ) рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рдд рд░рдгрдиреАрддрд┐рдпреЛрдВ (
[1] ) рдкрд░ рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......
Copy Source | Copy HTML template < class SState , class SEvent , class SFunctor = SEmptyFunctor< SState , SEvent >, class SUnknownEventStrategy = SThrowStrategy< SEvent > > class SFiniteStateMachine { public : typedef SState StateType ; typedef SEvent EventType ; private : StateType _CurrentState; // Current machine state std::vector< StateType > _States; // A list of the registered states std::vector< EventType > _Events; // A list of the registered events std::vector< std::vector< StateType > > _Transitions; // A table of transitions between states SFunctor _Functor; // Transition function SUnknownEventStrategy _UnknownEventStrategy; // Unknown event strategy std::deque< EventType > _EventsQueue; // Internal events queue to support events // that were generated in the transition functions bool _InProcess; // To be sure that we are in the process of events int _CurrentStateIndex; // Index of column in a transition table (0 - based) StateType _InitialState; // Start machine state // ......

рд╕реИрдХреА рд░рд╛рдЬреНрдп рдорд╢реАрди (
[h] ) "рд░рдгрдиреАрддрд┐" рдкреИрдЯрд░реНрди рдкрд░ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рд╣реИред (рд░рдгрдиреАрддрд┐,
[рез] ,
[реи] ,
[рей] )ред рд░рдгрдиреАрддрд┐рдпреЛрдВ рдореЗрдВ рдПрд╕рдПрд╕рдЯреЗрдЯ, рд╕реЗрд╡реЗрдВрдЯ (рдИрд╡реЗрдВрдЯ, рд╕реНрдЯреЗрдЯ), рдПрд╕рдПрдлрдпреВрдиреЗрдХреНрдЯрд░ (рдПрдХ рд░рд╛рдЬреНрдп рд╕реЗ рджреВрд╕рд░реЗ рд░рд╛рдЬреНрдп рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдлрд╝рдирдХрд╛рд░), рдФрд░ рдПрд╕рдПрдирдбреЛрдиреЙрдЯрдЗрдирд╡реЗрдВрдЯрд╕реНрдЯреНрд░реИрд░реА (рдХреЗрдП рд╡реНрдпрд╡рд╣рд╛рд░ рдпрджрд┐ рдЗрд╡реЗрдВрдЯ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ) рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣рд╛рдВ рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдИрд╡реЗрдВрдЯ рдХреЛ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ рдФрд░ рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рдХреЛ рдирдП рд░рд╛рдЬреНрдп рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ:
Copy Source | Copy HTML
- рдЗрдирд▓рд╛рдЗрди рд╢реВрдиреНрдп рдкреНрд░реЛрд╕реЗрд╕рдПрд╡реЗрдВрдЯ ( const EventType & tEvent)
- {
- int EventIndex (GetEventIndex (tEvent));
- if (EventIndex == - 1 ) рд╡рд╛рдкрд╕реА ;
- StateType OldState (_CurrentState); // рдкреБрд░рд╛рдиреА рдЕрд╡рд╕реНрдерд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦреЗрдВред
- _CurrentState = (_Transitions [EventIndex]) [_ CurrentStateIndex]; // рдПрдХ рдирдИ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
- _CurrentStateIndex = GetStateIndex (_CurrentState);
- _Functor (OldState, tEvent, _CurrentState); // рдирдП рд░рд╛рдЬреНрдп рд╕реЗ рдЬреБрдбрд╝реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░реЗрдВред
- }
рдЪрд░рд┐рддреНрд░ рджреНрд╡рд╛рд░рд╛ рдкрд╛рда рдЪрд░рд┐рддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд╣рд░реА рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╣реАрдВ рдЫрд╛рдБрдЯрдиреЗ рджреЗрдВред рд╣рдо рдЕрдЧрд▓рд╛ рдЪрд░рд┐рддреНрд░ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ ProcessEvent () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рд░рд╛рдЬреНрдп рдорд╢реАрди рдЗрд╕ рдкреНрд░рддреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрдХреНрд░рдордг рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рд╕реЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреА рд╣реИ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдкрд░ рднреА рдЖрдзрд╛рд░рд┐рдд рд╣реИред рд╕реЗрд▓ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕реНрдерд┐рддрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВрдиреЗ рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рддрд╛рдХрд┐ рд╡рд╣ рдПрдХ рдШрдЯрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ "рдкреНрд░рддреАрдХ" рдХреЛ рд╕рдордЭ рд╕рдХреЗред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рд╡рд░реНрдЧ рдХреЛ рдЦрд┐рд╕рдХрд╛рдХрд░ "рд░рд╛рдЬреНрдп" рдХреА рд░рдгрдиреАрддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рдВрдХреНрд░рдордг рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХреБрдЫ рдШрдЯрдирд╛рдУрдВ рдФрд░ рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рд╕рдорд╛рд╡реЗрд╢ рдерд╛ рдЬреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдереЗред
рдФрд░ рдЗрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдерд╛ред рд╡рд╣ рдЫрд▓рд╛рдВрдЧ рдФрд░ рд╕реАрдорд╛ рд╕реЗ рдмрдврд╝реАред рдпрджрд┐ рд░рд╛рдЬреНрдп "рдЦрд╛рд▓реА" рдерд╛, рдФрд░ рдкрддреНрд░ "рдП" рдЖрдпрд╛ рдерд╛, рддреЛ рд╣рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд░рд╛рдЬреНрдп рдореЗрдВ рдЬрд╛рдХрд░ рд╢рдмреНрдж, рд╡рд╛рдХреНрдп рдФрд░ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЛ рдкрд╣рдЪрд╛рдирдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдХреЛрдИ рдмрд┐рдВрджреБ рдЖрдпрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдЧрд░ рдпрд╣ рдПрдХ рд╕рдВрдпреБрдХреНрдд рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрди рдирд╣реАрдВ рд╣реИред "B", "C", "b", "c", "!", "1", "2" ... рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рд╕рднреА рдЕрдХреНрд╖рд░, рд╕рднреА рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрди, рд╕рд╛рдорд╛рдиреНрдпрддрдГ ASCII рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рднреА рд╡рд░реНрдг рдЖ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдЙрди рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ! рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ ~ 255 рдкрдВрдХреНрддрд┐рдпрд╛рдБ (рдПрдХ рдкрдВрдХреНрддрд┐ - рдПрдХ рдШрдЯрдирд╛, рдПрдХ рдкреНрд░рддреАрдХ) рдФрд░ рд▓рдЧрднрдЧ 20 рдХреЙрд▓рдо, рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рд░рд╛рдЬреНрдпреЛрдВред рдпрд╣ рдПрдХ рдЭрд╛рдбрд╝реВ рдХреЗ рд╕рд╛рде рдорд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╣реИ, рд╕рдВрдХреНрд░рдордг рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд┐рддрдиреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рднрд░рдирд╛ рд╣реИ! 20 * 255 = 5100 рд╕реЗрд▓ред рдореБрдЭреЗ рдПрдХ рд╕рд░рд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдорд┐рд▓рд╛ред рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рднреА рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдЪрд░рд┐рддреНрд░ рд╕реЗрдЯ (
[CCharsSet.h] ;
[UConstants.h] ) рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреВрд░реЗ рд╡рд░реНрдг рд╕реЗрдЯ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдШрдЯрдирд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЙрд╕рдХрд╛ рдЪрд░рд┐рддреНрд░ рдЖ рдЧрдпрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╕реЗрдЯ рдЕрдВрддрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдХреНрд╖рд░ "рдмреА" рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯреЛрдВ рдХреЗ рддрддреНрд╡ рд╣реИрдВ: "рд╕рднреА рд╡рд░реНрдг", "рдкрддреНрд░", "рдЕрдкрд░рдХреЗрд╕ рдкрддреНрд░", "рд░реВрд╕реА рдкрддреНрд░", "рд░реВрд╕реА рдкреВрдВрдЬреА рдкрддреНрд░"ред рдбреЙрдЯ рдЪрд┐рд╣реНрди рд╕рднреА рдкреНрд░рддреАрдХреЛрдВ, рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрди рдФрд░ рдкреИрд░рд╛рдЧреНрд░рд╛рдлрд╝ рдПрдВрдб рдорд╛рд░реНрдХ рд╕реЗрдЯреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред рдФрд░ рдЗрд╕реА рддрд░рд╣ред рд╕реЗрдЯ рдирд┐рд░реНрдгрд╛рдпрдХ рд░реВрдк рд╕реЗ рд╕рд╛рдордиреЗ рдЖрдП, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рднреА рдкрд╛рддреНрд░реЛрдВ рд╕реЗ рдХрдо рд╣реИред рд░реВрдкрд╛рдВрддрд░рдг рддрд╛рд▓рд┐рдХрд╛ (
[xls] ) рдХреЛ рджрд╕ рдЧреБрдирд╛ рдХрдо рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдиреЗрд╡рд┐рдЧреЗрд╢рди рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд╕реЗрдЯ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЦреИрд░, рд╣рдо рдкрддреНрд░ "" рднреВрд▓ рдЧрдП, рдареАрдХ рд╣реИ, рд╣рдордиреЗ рдЗрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реЗрдЯреЛрдВ, рдФрд░ рд╡реНрдпрд╛рдкрд╛рд░ рдореЗрдВ рдбрд╛рд▓рд╛! ..
рдпрд╣ рдХреИрд╕реЗ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рда рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рд╕реНрддрд░реЛрдВ рдХрд╛ рдПрдХ рдкреЗрдбрд╝ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рддреЛ рд░рд╛рдЬреНрдп рдорд╢реАрди, рдШрдЯрдирд╛ рд╣реЛрдиреЗ рдкрд░ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдШрдЯрдирд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдИ рдХрд╛рд░реНрдп рд╣реИрдВ (
[UParSentWordFSM.h] ), рдФрд░ рд╡реЗ рд╕рднреА рдПрдХ рдЖрдо рдкреЗрдбрд╝ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдирдкреБрдЯ рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рд╡рд░реНрдгрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Copy Source | Copy HTML
- рдХрдХреНрд╖рд╛ TState ;
- typedef TCharsSetEvent рддреАрдЦрд╛ ;
- typedef TCFDivisionTreeItem < TCFLevelDataType , TUnitType > TCFCustomUnitDivisionTreeItem;
- typedef TCFTreeLevel < TCFLevelDataType , TUnitType > TCFCustomUnitTreeLevel;
- рдЯрд╛рдЗрдкрдбрд┐рдл рд╢реВрдиреНрдп (* TFuncPtr) (TCFCustomUnitDivisionTreeItem *, const TEvent &);
- typedef TStateMachineDescriptor < TState , TEvent > TParSenWordDescriptor;
- / * рд░рд╛рдЬреНрдп рдХреЗ рд╡рд░реНрдЧ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред * /
- рд╡рд░реНрдЧ TState : рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ TFunctionalState < Tevent , TTextString >
- {
- рдирд┐рдЬреА :
- TFuncPtr _Function;
- TCFCustomUnitDivisionTreeItem * _TargetTree;
- рдЬрдирддрд╛ :
- рд╢реВрдиреНрдп рдСрдирд░рдЯрд░ ( const TState & tStateFrom, const TEvent & tEvent) {
- _Function (_TargetTree, tEvent);
- };
- TState ( const TTextString & tName, TFuncPtr tFunc, TCFCustomUnitDivisionTreeItem * tTargetTree)
- : TFunctionalState < TEvent , TTextString > (tName, sat_None), _Function (tFunc), _TargetTree (tTargetTree) {};
- };
TState рд╡рд░реНрдЧ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕рдХреЗ рдирд╛рдо рдХрд╛ рдЕрд░реНрде рд╣реИ, CA рдХреА рдПрдХ рд╕реНрдерд┐рддрд┐ рд╣реИред рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдкреЗрдбрд╝ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдлрдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдФрд░ рдкреЗрдбрд╝ рдХреЗ рдкрд╛рд╕ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╣реИред рд╕рдорд╛рд░реЛрд╣ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм TState рд╕реЗ OnEnter () рд╡рд┐рдзрд┐ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкреЗрдбрд╝ рдЬрд┐рд╕ рд╡рд░реНрдЧ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ (TCFCustomUnitDivisionTreeItem) рдмрд▓реНрдХрд┐ рдпрд╣ рдЬрдЯрд┐рд▓ рд╣реИ: рдпрд╣ рдХреБрдЫ рдФрд░ рд╕рд╛рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд░реНрдЧ (
[h] ) рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИред рд╣рдо рдЕрдм рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП рдкреЗрдбрд╝ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЖрдЧреЗ рджреЗрдЦреЗрдВред
Copy Source | Copy HTML
- рд╢реВрдиреНрдп рд╕реЗ рдЦрд╛рд▓реА (TCFCustomUnitDivisionTreeItem * tItem, const TEvent & tEm)
- {
- рд╡рд╛рдкрд╕реА;
- };
- рд╢реВрдиреНрдп рдлрд╝реЙрд░реЗрдк рдкреИрд░рд╛ (TCFCustomUnitDivisionTreeItem * tTree, const TEvent & Event)
- {
- TCFCustomUnitDivisionTreeItem NewItem ( 0 , TRangeItem (tEvent.Iterator) (), tEvent.Iterator ());
- tTree-> AddItem ( 0 , NewItem);
- };
- рд╢реВрдиреНрдп рдлрд╝рд╛рдЗрдиреЗрд╕реЗрдВрдЯреЗрдВрд╕ (TCFCustomUnitDivisionTreeItem * tTree, const Tevent & Event)
- {
- TCFCustomUnitDivisionTreeItem NewItem ( 1 , TRangeItem (tEvent.Iterator) (), tEvent.Iterator ());
- tTree-> AddItem ( 1 , NewItem);
- };
- // .......
- рд╢реВрдиреНрдп FCloseAll (TCFCustomUnitDivisionTreeItem * tTree, const Tevent & Event)
- {
- FCloseWord (tTree, tEvent);
- FCloseSentence (tTree, tEvent);
- FCloseParagraph (tTree, tEvent);
- };
- // ... рдФрд░ рдХреБрдЫ рдФрд░ рдХрд╛рд░реНрдп ...
рд╡реЗ рд╕рднреА рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реИрдВред рд╣рдо рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ TState рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЕрдзрд┐рднрд╛рд░ рдФрд░ рдмрд╣реБрд░реВрдкрддрд╛ рд╣реИ (
[1] ,
[2] )ред
рд▓реЗрдХрд┐рди рдпреЗ рд╕рднреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВ рдФрд░ рдореБрдЦреНрдп рдЪреАрдЬ рдХреА рддреИрдпрд╛рд░реА рд╣реИред рд╣рдореЗрдВ рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╡рд╛рд▓реА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╕реНрддреБ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдП, рд╣реИ рдирд╛? рдпрд╣рд╛рдБ рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдРрд╕реА рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддрд╛ рд╣реИ:
Copy Source | Copy HTML
- TParSenWordDescriptor Descriptor (TCFCustomUnitDivisionTreeItem * tTree)
- {
- // рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ q0 рд╣реИ, рдлрд╝рдВрдХреНрд╢рди FEmpty рд╣реИ, рд╕рдВрдХреНрд░рдордг рддрд╛рд▓рд┐рдХрд╛ рдХреЛ "рдкреИрд░рд╛рдЧреНрд░рд╛рдл, рд╡рд╛рдХреНрдп, рд╢рдмреНрдж" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
- TParSenWordDescriptor D (TState ( "q0" , FEmpty, tTree), "рдкреИрд░рд╛рдЧреНрд░рд╛рдл, рд╡рд╛рдХреНрдп, рд╢рдмреНрдж" );
- // рд░рд╛рдЬреНрдп рд╕реЗрдЯ рдХрд░реЗрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдЕрдкрдирд╛ рдирд╛рдо рд╣реИ: q0, q1, ... q14ред
- // рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдп рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди (FEmpty, FOpenAll ...) рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд░рд╛рдЬреНрдп рд╣реЛрдиреЗ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- // рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЬрд┐рд╕ рдкреЗрдбрд╝ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдХрд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдкрд╛рд╕ рдХрд░реЗрдВ - tTreeред
- D << TState ( "q0" , FEmpty, tTree)
- << TState ( "q1" , рдлрд╝реЛрдкрдирдПрд▓, tTree)
- << TState ( "q2" , рдлрд╝реАрдирд╕реЗрдВрд╕ рдУрдкреЗрдирд╡реЗрдпрд░, tTree)
- << TState ( "q3" , рдлрд╝реЙрдкрдирд╡рд░реНрдб, tTree)
- << TState ( "q4" , FEmpty, tTree)
- << TState ( " q5 " , FCloseWord, tTree)
- << TState ( "q6" , FCloseSentence, tTree)
- << TState ( " q7 " , FCloseSentenceOpenSentenceOpenWord, tTree)
- << TState ( "q8" , FEmpty, tTree)
- << TState ( "q9" , FEmpty, tTree)
- << TState ( "q10" , FCloseWord, tTree)
- << TState ( "q11" , FCloseAll, tTree)
- << TState ( "q12" , FCloseSentenceCloseParagraph, tTree)
- << TState ( "q13" , FCloseParagraph, tTree)
- << TState ( "q14" , FEmpty, tTree);
- // рдИрд╡реЗрдВрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдЕрдкрдирд╛ рдирд╛рдо ("WinParagraph", "SentenceEnd" ...)ред
- // cWinParagraph, cSentenceEnd, UConstants.h рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╡рд░реНрдг рд╕реЗрдЯ рд╣реИрдВред
- D << Tevent ( "WinParagraph" , cWinParagraph)
- << "q0" << "q11" << "q11" << "q11" << "q11" << "q12" << "q12" << "q11" << "q12" << "q13" << "q12" << "q0" << "q0" << "q0" << "q12" ;
- D << TEvent ( " рд╕реЗрдВрдЯреЗрдВрд╕рдПрдВрдб " , cSentenceEnd)
- << "q0" << "q10" << "q10" << "q10" << "q10" << "q14" << "q14" << "q10" << "q14" << "q9" << "q14" << "q0" << "q0" << "q0" << "q14" ;
- D << TEvent ( "рдкрддреНрд░" , cLetters + cDigits)
- << "q1" << "q4" << "q4" << "q4" << "q4" << "q3" << "q2" << "q4" << "q3" << "q2" << "q7" << "q1" << "q1" << "q1" << "q7" ;
- D << Tevent ( "Space" , cSpace + cTab)
- << "q0" << " q5" << "q5" << "q5" << "q5" << "q8" << "q9" << "q5" << "q8" << "q9" << "q6" << "q0" << "q0" << "q0" << "q6" ;
- D << Tevent ( "PunctMarks рдФрд░ рдЕрдиреНрдп рдкреНрд░рддреАрдХ" , TCharsSet (cPrintable) >> cWinParagraph >> cSentenceEnd >> cLetters >> cDigits >> cSpace >> cabab)
- << "q0" << " q5" << "q5" << "q5" << "q5" << "q8" << "q9" << "q5" << "q8" << "q9" << "q14" << "q0" << "q0" << "q0" << "q14" ;
- D << Tevent ( "EndSign" , TCharsSet (CTextStringEndSign))
- << "q0" << "q11" << "q11" << "q11" << "q11" << "q12" << "q13" << "q11" << "q12" << "q13" << "q12" << "q0" << "q0" << "q0" << "q12" ;
- рд╡рд╛рдкрд╕реА D;
- };
рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рдХреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдФрд░ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрди "<<" рд╕рдВрдХреЗрддреЛрдВ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╕реНрд╡рдпрдВ рджреЗрдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдмрд╕ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░реЛ, рдпрд╣рд╛рдБ рдпрд╣ рд╕рдм рджрд░реНрдЬ рд╣реИред
рдПрдХ рдЕрднреА рднреА TEvent рд╡рд░реНрдЧ рдореЗрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, TCharsSetEvent (
[cpp] ,
[]] рд╣реИ )ред рдЬрд┐рдЬреНрдЮрд╛рд╕реБ - рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ, рдФрд░ рд╣рдо рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рдХреЗ рдкреНрд░рдмрдВрдзрдХ - TFiniteStateMachineManager (
[h] ) рдХреЗ рдкрд╛рд╕ рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдПрдХреАрдХреГрдд рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рд╛рд░ рд╕реНрд░реЛрдд рдкрд░ рдПрдХ рдЕрдореВрд░реНрдд рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреНрд░рдмрдВрдзрдХ рдореЗрдВ рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдорд╛рдиреНрдпрддрд╛ рдХреА рдкреНрд░рдЧрддрд┐ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдХреЛрдб рдмрд╣реБрдд рд╕рдореГрджреНрдз рд╣реИ, рдФрд░ рдореИрдВ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЦрдВрдб рджреВрдВрдЧрд╛ред
Copy Source | Copy HTML
- рдЯреЗрдореНрдкрд▓реЗрдЯ < рд╡рд░реНрдЧ EventType , рд╡рд░реНрдЧ FiniteStateMachineType , рд╡рд░реНрдЧ StateMachineDescriptorType , рд╡рд░реНрдЧ SourceType >
- рд╡рд░реНрдЧ TFiniteStateMachineManager
- {
- рдирд┐рдЬреА :
- StateMachineDescriptorType _Descriptor;
- SourceType _Source;
- рддрд┐рдпреБрдВрдд _рдмреЗрдЧрд┐рди;
- TUInt _End;
- TUInt _Iterator;
- рдЬрдирддрд╛ :
- // <......>
- TFiniteStateMachineManager ( const StateMachineDescriptorType & tDescriptor, const SourceType & tSource)
- :
- _Descriptor (tDescriptor),
- _ рд╕реНрд░реЛрдд (tSource),
- _рд░рдкреЛрд░реНрдЯрд╕реНрдЯреЗрдк ( 0 ),
- _рдкреНрд░реЛрдЧреНрд░реЗрд╕рдлрдВрдХ (NULL)
- {};
- // <......>
рдлрд┐рд░, рд╣рдо рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, "рд░рдгрдиреАрддрд┐" рдкреИрдЯрд░реНрди рднреА рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рди рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдкрд░ рдПрдХ рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди рд╣реИ, рдмрд▓реНрдХрд┐ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдмрдВрдзрдХ рднреА рд╣реИрдВ! рдореИрдВ рдирд╣реАрдВ рдЫреБрдкрд╛ рд░рд╣рд╛ рд╣реВрдБ, рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░рдмрдВрдзрдХ рдПрдХ рд╕рджреНрднрд╛рд╡ рдХрд╛рд░реНрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдФрд░ рд░рд╛рдЬреНрдп рдорд╢реАрди, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рдХреЛ рдлрд┐рд╕рд▓рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдХреЗрд╡рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рдорд╛рди рд╣реИред рдкреНрд░рдмрдВрдзрдХ рдЗрд╕реЗ "рд╕реНрд▓рд┐рдк" рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╕рднреА рдХрд╛рдореЛрдВ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рдзреНрд╡рдирд┐ рдирд┐рдпрдореЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ - рдкрд╛рда рдХреЛ рд╕реНрддрд░реЛрдВ рдореЗрдВ рддреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣ "рд░рдгрдиреАрддрд┐" рдкреИрдЯрд░реНрди рдХрд╛ рд╕рд╛рд░ рд╣реИ: рд╣рдо рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЛ рдЙрди рд╡рд╕реНрддреБрдУрдВ-рд░рдгрдиреАрддрд┐рдпреЛрдВ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЗ рд╣реЛрдиреЗ рдкрд░ рдореБрдЭреЗ рдПрдХ рдЯреНрд░рд┐рдЧрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдЕрдиреНрдп рд╡рд░реНрдЧ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдХреЗ EventType рдЗрд╡реЗрдВрдЯ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рд░рдгрдиреАрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
Copy Source | Copy HTML
- TFiniteStateMachineManager рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ ()
- {
- _Begin = _Source.Begin ();
- _End = _Source.End ();
- FiniteStateMachineType _Machine (_Descriptor.StartState (), _Descriptor.Proxy ());
- for (_Iterator = _Begin; _Iterator <= _ End; _Iterator ++)
- {
- _Machine << EventType (_Source [_Iterator], _Iterator);
- };
- _Machine << EventType (_Source.EndSign (), _End + 1 );
- рд╡рд╛рдкрд╕реА * рдпрд╣ ;
- };

рдкреНрд░рдХреНрд░рд┐рдпрд╛ () рдлрд╝рдВрдХреНрд╢рди рд╕рд░рд▓ рд╣реИред _Machine рд░рд╛рдЬреНрдп рдорд╢реАрди рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ (рд╕рдВрдХреНрд░рдордг рддрд╛рд▓рд┐рдХрд╛, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐) рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд▓реВрдк рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдИрд╡реЗрдВрдЯрдЯрд╛рдЗрдк рд╡рд░реНрдЧ рдХреЗ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд "рдЗрдЯрд░реЗрдЯрд░" рдкрд╛рда рдореЗрдВ рдЪрд░рд┐рддреНрд░ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдШрдЯрдирд╛ рд╢реБрд░реВ рд╣реБрдИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рд╕реНрдЯрд╛рд░реНрдЯ рд╡рд░реНрдб" рд╕реНрдерд┐рддрд┐, рддреЛ рдЗрдВрдбреЗрдХреНрд╕рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ BeginIndex рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд: рдпрджрд┐ рдШрдЯрдирд╛ рдПрдХ рд╢рдмреНрдж (рд╡рд╛рдХреНрдп, рдкреИрд░рд╛рдЧреНрд░рд╛рдл) рдХрд╛ рдЕрдВрдд рд╣реИ, рддреЛ рдЗрд╕ рд╕реАрдорд╛ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХрд╛рдВрдХ рдЕрдВрддрд┐рдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рддреЛ рд╣рдо рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд░реЗрдВрдЬ рдЗрдЯреЗрдо рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ "рдкреБрдирд░рд╛рд╡реГрддрд┐" рд╢рдмреНрдж рдХреНрдпреЛрдВ рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛? рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдЪрд░ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдкреНрд░рдмрдВрдзрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдерд╛, рддреЛ рд╣рдореЗрдВ рдШрдЯрдирд╛ рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдЕрдореВрд░реНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкреНрд░рдмрдВрдзрдХ рдХреЛ рдЗрд╕ рдмрд╛рдд рдХреА рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рдХрд┐рди рд╕реВрдЪрд┐рдпреЛрдВ, рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдпрд╛ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╡реЗ рдЖрддреЗ рд╣реИрдВ, рдХрд┐рддрдиреЗ рддрддреНрд╡ рд╣реИрдВ, рдФрд░ рд╡реЗ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рд╣реИрдВред рдФрд░ рдЙрдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рд░реНрдЧ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдИ Iterator рдкреИрдЯрд░реНрди (Iterator,
[1] ,
[2] ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд▓реВрдк рдХрд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА:
Copy Source | Copy HTML
- // ......
- SourceType * _Source;
- // ......
- SourceType :: Iterator _Iterator = _Source-> Begin ();
- рдХреЗ рд▓рд┐рдП (_Iterator! = _Source-> рдПрдВрдб (); ++ _ Iterator)
- {
- _Machine << EventType (* _ Iterator);
- };

рдЗрд╕ рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдкреНрд▓рд┐рдЯрд┐рдВрдЧ рдЯреНрд░реА рд╣реЛрдЧрд╛ред рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдЗрди рд╡рд┐рднрд╛рдЬрдиреЛрдВ рд╕реЗ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрднрд╛рдЧреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред
- рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рда рдХреЗ рд▓рд┐рдП, рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рд▓рдВрдмрд╛рдИ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдПрдХ рдиреНрдпреВрдирддрдо рдЕрдиреБрдкрд╛рд▓рди рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдЧреНрд░рдВрдереЛрдВ рд╕реЗ рдПрдХ рд╣реА рд▓рдВрдмрд╛рдИ рдХреЗ рдХрд┐рддрдиреЗ рдЦрдВрдб рд▓рд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рднреА рдЧреНрд░рдВрдереЛрдВ рдореЗрдВ 1000 рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде 10 рдкреИрд░рд╛рдЧреНрд░рд╛рдл рд╣реИрдВ, рдФрд░ рдРрд╕реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЗ рдПрдХ рдкрд╛рда рдореЗрдВ рдХреЗрд╡рд▓ 8 рд╣реИрдВ, рддреЛ рдиреНрдпреВрдирддрдо рдореИрдЪ 8 рдЦрдВрдб рд╣реИрдВред рддреЛ - рдкреНрд░рддреНрдпреЗрдХ рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдПред
- рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗ рд╕реЗрдХреНрд╢рди рдЪреБрдиреЗ рдЬрд╛рддреЗ рд╣реИрдВред
- рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╕рднреА рд╕реНрддрд░реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ: рдкреИрд░рд╛рдЧреНрд░рд╛рдл, рд╡рд╛рдХреНрдп рдФрд░ рд╢рдмреНрджред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирдореВрдиреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред