Cach├й рдСрдмреНрдЬреЗрдХреНрдЯ DBMS рдмрд┐рдЯрдореИрдк рдФрд░ рдмрд┐рдЯрд╕реНрд▓рд╛рдЗрдХ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╡реЗ Cach├й рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИрдВ: рдпрд╣ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ
рдмрд┐рдЯрдореИрдк рдпрд╛
рдмрд┐рдЯреНрд╕рд▓рд┐рд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░ рдХреБрдЫ рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдордирдорд╛рдиреА рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдмрд┐рдЯ рд▓реЙрдЬрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдХреИрд╢реЗ рдореЗрдВ NoSQL рдЪрд▓рд╛рдиреЗ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдкреВрд░реНрд╡-рд╡рд╕реНрддреБ рд╕рдордп рдХреЗ рдмрд╛рдж рд╕реЗ, рдЬрдм рдЧреНрд▓реЛрдмрд▓реНрд╕ рдореЗрдВ рдмреНрдпрд╛рдЬ рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдлреЙрд░реНрдо рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛
рд╕реЗрдЯ ^ рдЗрдВрдбреЗрдХреНрд╕ ( "рд╕рдВрдкрддреНрддрд┐" , рдореВрд▓реНрдп , рдЖрдИрдбреА ) = ""рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдЖрдкрдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдп рд╣реИ:
рд╕реЗрдЯ рдЖрдИрдбреА = "" рд╕реЗрдЯ рдЖрдИрдбреА рдХреЗ рд▓рд┐рдП = $ рдСрд░реНрдбрд░ (^ рдЗрдВрдбреЗрдХреНрд╕ ( "рд╕рдВрдкрддреНрддрд┐" , рдореВрд▓реНрдп , рдЖрдИрдбреА )) рдЫреЛрдбрд╝ рджрд┐рдпрд╛ : рдЖрдИрдбреА = "" рдЖрдИрдбреА рдЖрдИрдбреА ,!рдЙрди рд╕рднреА рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рджреЗрдЧрд╛ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╕рдВрдкрддреНрддрд┐ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рдореВрд▓реНрдп рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ:
рдЕрдЧрд░ $ рдбреЗрдЯрд╛ (^ рд╕реВрдЪрдХрд╛рдВрдХ ( "рд╕рдВрдкрддреНрддрд┐" , рдореВрд▓реНрдп ))> 1 {
"рдЖрдИрдбреА" _ $ рдСрд░реНрдбрд░ (^ рд╕реВрдЪрдХрд╛рдВрдХ ( "рд╕рдВрдкрддреНрддрд┐" , рдореВрд▓реНрдп , "" ) _ "" _ рдорд╛рди _ "рдореМрдЬреВрдж рд╣реИ" рдХреЗ рд╕рд╛рде рд▓рд┐рдЦреЗрдВ
рдФрд░ {
"" рдорд╛рди рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рджрд░реНрдЬ рдХрд░реЗрдВ " _ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ" }рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреА рдХреБрд╢рд▓ рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рд╛рде рдЖрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдЬреЛ "I" рд▓реЙрдЬрд┐рдХ рджреНрд╡рд╛рд░рд╛ рдПрдХрдЬреБрдЯ рд╣реЛрдХрд░ рдХрдИ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╛ рддреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ (рдФрд░ рд╣рд░ рдмрд╛рд░ рдбрд┐рдмрдЧ) рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо, рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рднреА рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдЧрдгрдирд╛ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдирд╛ред
рдПрдХ рдХреНрд░рд╛рдВрддрд┐рдХрд╛рд░реА рдкрд░рд┐рд╡рд░реНрддрди рдкреВрд░реНрдг-
рдмрд┐рдЯ рдмрд┐рдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдХреИрдЪ рдореЗрдВ рдЙрдкрд╕реНрдерд┐рддрд┐ рдерд╛:
$ рдмрд┐рдЯ (),
$ рдмрд┐рдЯреЛрдЧреНрд▓рд┐рдХ (),
$ рдмрд┐рдЯрдлрд╝реАрдб () рдФрд░
$ рдмрд┐рдЯрдХрд╛рдЙрдВрдЯ ()ред рдЕрдм рдЖрдк рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд░рд▓рддрдо рд╕реНрдерд┐рддрд┐ рдореЗрдВ - рдлреЙрд░реНрдо рдХрд╛
$ рдмрд┐рдЯ рд╕реЗрдЯ рдХрд░реЗрдВ (^ рд╕реВрдЪрдХрд╛рдВрдХ ( "рд╕рдВрдкрддреНрддрд┐" , рдореВрд▓реНрдп ), рдЖрдИрдбреА ) = 1рдмреЗрд╢рдХ, рдЪреВрдВрдХрд┐ рдмрд┐рдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ 256K рддрдХ рд╕реАрдорд┐рдд рд╣реИ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдПрдХ рдмрд┐рдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
$ рдмрд┐рдЯреЛрдЧреНрд▓рд┐рдХ () рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕реА рднреА рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХреНрд╡реЗрд░реА рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдирдореВрдиреЗ рдХреЗ рдЕрдиреБрд░реВрдк рдРрд╕реЗ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рд╕реЗ рдкрд░рд┐рдгрд╛рдореА рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддреЗ рд╣реИрдВ, $ рдмрд┐рдЯрдХрд╛рдЙрдВрдЯ () рдирдореВрдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ $ рдмрд┐рдЯрдлрд╝рд╛рд╕реНрдЯ () рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдореА рдирдореВрдирд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрди рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП "Pr1" рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ "A" рдпрд╛ "B" рдореВрд▓реНрдп рд╣реИрдВ, рдФрд░ "Pr2" рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп "C" рд╣реИ:
рд╕реЗрдЯ ^ mtemp.resbitmap = $ bitlogic (^ рдЗрдВрдбреЗрдХреНрд╕ ( "Pr1" , "A" ) ^ рдЗрдВрдбреЗрдХреНрд╕ ( "Pr1" , "B" ))
рд╕реЗрдЯ ^ mtemp.resbitmap = $ bitlogic (^ mtemp.resbitmap & ^ Index ( "Pr2" , "C" )рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЖрдИрдбреА рджреЗрдВ:
рдЕрдЧрд░ ' $ рдмрд┐рдЯрдХреЙрдЗрди (^ mtemp.resbitmap) "рдХреЛрдИ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдорд┐рд▓рд╛" , рд▓рд┐рдЦреЛ !
рдФрд░ рд╕реЗрдЯ рдЖрдИрдбреА = 0 рд╕реЗрдЯ рдЖрдИрдбреА рдХреЗ рд▓рд┐рдП = $ bitfind (^ mtemp.resbitmap, 1, id ) рдЫреЛрдбрд╝ рджрд┐рдпрд╛ : ' рдЖрдИрдбреА рдЖрдИрдбреА рдЖрдИрдбреА !рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИ рдЬреЛ рдХрд╛рдЪреЗ рдореЗрдВ рдмрд┐рдЯ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдирд┐рдЪреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдореВрд╣реАрдХрд░рдг рдлрд╝рдВрдХреНрд╢рди (рдпреЛрдЧ, рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдорд╛рдзреНрдп, рдиреНрдпреВрдирддрдо, рдЕрдзрд┐рдХрддрдо) рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рдХреЛ рд╕рдорд╛рди, рд╣рдореЗрдВ рдЪрдХреНрд░ рдореЗрдВ рдирдореВрдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрдХреНрд░ рдХрд░рдирд╛ рдерд╛, рдЬреЛ рдХрд┐ рдПрдХ рдкрд░реНрдпрд╛рдкреНрдд рдирдореВрдирд╛ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рддреЗрдЬ рдирд╣реАрдВ рдерд╛ред рд▓реЗрдХрд┐рди рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрд╢реЛрдзрди рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рднреА рддреЗрдЬ рдХрд░рддрд╛ рд╣реИ - рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рдорд╛рди рдкреВрд░реНрдгрд╛рдВрдХ рдпрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рджрд╢рдорд▓рд╡ рдмрд┐рдВрджреБ рдХреЗ рд╕рд╛рде рд╣реИред
рдЗрд╕ рд╕рдВрд╢реЛрдзрди рдХрд╛ рд╕рд╛рд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдЯ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдмрд┐рдЯрдореИрдк рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реИред рдРрд╕реЗ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рдмрд┐рдЯ-рд╕реНрд▓рд╛рдЗрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
$ рдмрд┐рдЯ (^ рдЗрдВрдбреЗрдХреНрд╕ ( "рдкреНрд░реЙрдкрд░реНрдЯреА" , N ), рдЖрдИрдбреА ) = NthBitOfValue рд╕реЗрдЯ рдХрд░реЗрдВрд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдлрд┐рд░ рд╕реЗ, рдмрд┐рдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдмрд┐рдЯрдХреЙрдЗрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдЕрдзрд┐рдХ" рдпрд╛ "рдХрдо" рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреА рдЦреЛрдЬ, рд▓реЗрдХрд┐рди рд╕рдореВрд╣рди рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдореЗрдВ рд▓рд╛рдн рдЗрд╕ рдЕрд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдХрд╛рдлреА рд╣рдж рддрдХ рджреВрд░ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЪрдпрдирд┐рдд рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рд░рд╛рд╢рд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд▓реВрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдмреНрдпрд╛рдЬ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рднреА рдмрд┐рдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореА рдмрд┐рдЯрдореИрдк рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╡рдЬрд╝рди $ рдмрд┐рдЯрдХрд╛рдЙрдВрдЯ () рдХреЗ рд╕рд╛рде рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдПрдХ рдкрд░реНрдпрд╛рдкреНрдд рдирдореВрдирд╛ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде, рдЕрддрд┐рд╢рдпреЛрдХреНрддрд┐ рдХреЗ рдмрд┐рдирд╛, рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рднрдпрд╛рдирдХред
рдХрдХреНрд╖рд╛ рдХреЛрдб/// рдмрд┐рдЯрдореИрдк рдФрд░ рдмрд┐рдЯ-рд╕реНрд▓рд╛рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдмрдирд╛рдиреЗ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ
///
/// рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛
/// рдлреЙрд░реНрдо рд╕рд░рдгреА (рдорд╛рди) рдХреА рдПрдХ рд╕рд░рдгреА, рдЬрд┐рдирдХреЗ рддрддреНрд╡ рд╣реИрдВ
/// рдмрд┐рдЯ рд░рд┐рдХреЙрд░реНрдб рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдкрджреЛрдВ рдореЗрдВ 1 рдХреЗ рд╕рд╛рде рддрд╛рд░,
/// рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рдорд╛рди рд▓реЗрддрд╛ рд╣реИ,
/// $$$ MAXBITLENGTH рдХреА рдЕрдзрд┐рдХрддрдо рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде рддрд╛рд░ рдХреА рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдЯреВрдЯ рдЧрдпрд╛
/// рд░рд┐рдХреЙрд░реНрдб рдирдВрдмрд░рд┐рдВрдЧ - 1 рд╕реЗ, рд╕рд░рдгреА рддрддреНрд╡ - 0 рд╕реЗ,
/// (рдмрд╛рдж рдореЗрдВ, рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛, рдмрд┐рдЯрдореИрдкреНрд╕ рдХреЗ рд▓рд┐рдП)ред
/// рднрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг
/// рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдХреНрд░рд┐рдп рдкреИрд░рд╛рдореАрдЯрд░ рд╕рдВрдЦреНрдпрд╛ рдмрд░рд╛рдмрд░ рд╣реИ рд╡реИрд▓ рд╣реИ
/// рд╕реЗрдЯ idf0 = idfact-1 \ $$$ MAXBITLENGTH, idf1 = idfact-1 # $$$ MAXBITLENGTH + 1
/// рд╕реЗрдЯ $ рдмрд┐рдЯ (^ BM ("I", par, val, idf0), idf1) = 1
/// рд╕реЗрдЯ $ рдмрд┐рдЯ (^ BM ("EXIST", idf0), idf1) = 1
/// рдореМрдЬреВрджрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдЙрдкрдпреЛрдЧреА рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреНрдпреЛрдВрдХрд┐
/// рддрд╛рд░реНрдХрд┐рдХ рд╡рд┐рд▓реЛрдкрди рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд,
/// рдмрд┐рдирд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬреНрдЮрд╛рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ
/// рдЕрдиреНрдп рд╕рдВрд░рдЪрдирд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ, рдЬреЛ рд╕рд╣реА рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ
/// BMNot рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)
/// рдмреАрдЯрд▓ рдЗрдВрдбреЗрдХреНрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛:
/// рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕ рдХреА рд╕рд░рдгреАред рд╕рд░рдгреА рдХрд╛ рдкрд╣рд▓рд╛ рддрддреНрд╡ - рд╡рд░реНрдг рд╕реВрдЪрдХрд╛рдВрдХ
/// рдорд╛рди, рджреВрд╕рд░рд╛ - рдХрдо рд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯреНрд╕ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ (1/0), 3 -
/// рдкреЗрдиреЙрд▓реНрдЯ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ (2/0), рдЖрджрд┐ред
///
/// рднрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг
/// рдкреНрд░рд╡реЗрд╢ рд╕рдВрдЦреНрдпрд╛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдкреИрд░рд╛рдореАрдЯрд░ рдмрд░рд╛рдмрд░ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИ
/// рд╡реИрд▓реНрдпреВ рдСрдл рд╡реИрд▓
/// рд╕реЗрдЯ idf0 = idfact-1 \ $$$ MAXBITLENGTH, idf1 = idfact-1 # $$$ MAXBITLENGTH + 1
/// рд╕реЗрдЯ рд╡реИрд▓ = $$ CvtToBin (рд╡реИрд▓)
/// рдХреЗ рд▓рд┐рдП ix = 1: 1: $ рд▓рдВрдмрд╛рдИ (рд╡реИрд▓) рд╕реЗрдЯ: $ рдПрдХреНрд╕рдЯреНрд░реЗрдХреНрдЯ (рд╡реИрд▓, ix) $ рдмрд┐рдЯ (^ рдмреАрдПрдо ("рдПрд╕", рдмрд░рд╛рдмрд░, ix, idf0), idf1) = 1
/// рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рднрд░рдиреЗ рдХреЗ рдХреНрд░рдо рдореЗрдВ, рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдЧрд┐рд░рд╛рд╡рдЯ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП
/// рдкреНрд░рджрд░реНрд╢рди, рдпрд╣ рдЗрд╕реА рдЦрдВрдб рдУрд╡рд░рд▓реЗ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рд╣реИ
/// рдХреЛрдб рдСрдлрд╝ рдлрд╝рдВрдХреНрд╢рдВрд╕ $ sortbegin (^ BM) рдФрд░ $ рд╕реЙрд░реНрдЯреЗрдВрдб (^ BM)
/// рджрд┐рдП рдЧрдП рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдФрд░ рдкреНрд░рд╛рдкреНрддрд┐рдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рддрдереНрдпреЛрдВ рдХреЗ рдЪрдпрди рдХреЗ рд▓рд┐рдП
/// рд╕рдореВрд╣реАрдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ "рдпреЛрдЧ", "рдЕрдзрд┐рдХрддрдо" рдФрд░ "рдиреНрдпреВрдирддрдо" рдХреЗ рдирдореВрдиреЗ
/// рдлрд╝рдВрдХреНрд╢рди BSSum (), BSMax () рдФрд░ BSMin () рд╣реИрдВ
рд╡рд░реНрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛.рдмрд┐рдЯрдореИрдк рд▓рд┐рдВрдХ% рдкрдВрдЬреАрдХреГрдд рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ [ рд╡рд┐рд╢реЗрд╖рдг ]
{
/// рдирд╛рдо ($ рдирд╛) рд╡реИрд╢реНрд╡рд┐рдХ рдЬрд╣рд╛рдВ рдмрд┐рдЯрдореИрдкреНрд╕ рдФрд░ рдмрд┐рдЯрдХреНрд▓реЗрд╕реЗрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
/// рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди "^ BM" рд╣реИ
рд╕рдВрдкрддреНрддрд┐ BMGLOB % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ ( TRUNCATE = 1 ) [ InitialExpression = "^ BM" ];
/// рдЕрдзрд┐рдХрддрдо рдмрд┐рдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рд▓рдВрдмрд╛рдИ
рдкреИрд░рд╛рдореАрдЯрд░ MAXBITLENGTH = 64000 ;
/// рд╡реИрд╢реНрд╡рд┐рдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЙрдк-рдирд╛рдо рдХрд╛ рдирд╛рдо ($ na) () рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
/// рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдмрд┐рдЯрдореИрдк рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
ClassMethod GetNewTMP () % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ
{
$ рдирд╛рдо (^ рдХреИрд╢рдЯреЗрдореНрдк ( "рдмреА.рдПрдо." , $ рдЬреЙрдм _ $ рдЬреВрдЯрд┐рд▓ (110), $ рдЗрдВрдХреНрд░реАрдореЗрдВрдЯ ) (^ рдХреИрдЪреЗрдореНрдк ( "рдмреА.рдПрдо." , $ рдЬреЙрдм _ $ рдЬреВрдЯрд┐рд▓ (110))))
}
/// рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╕рднреА рдЕрд╕реНрдерд╛рдпреА рд╕рдмрдиреЗрдЯ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ
ClassMethod KillAllTMP ()
{
рдорд╛рд░ ^ рдХреИрд╢реЗрдЯреЗрдореНрдк ( "рдмреАрдПрдо" , $ рдиреМрдХрд░реА _ $ рдЬреВрдЯрд┐рд▓ (110)) рдЫреЛрдбрд╝ рджрд┐рдпрд╛
}
/// рдмрд┐рдЯрдореИрдк рдкрд░ рдкрд░рд┐рдЪрд╛рд▓рди
/// рдЗрд╕рдХреЗ рдмрд╛рдж, рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рд▓рд┐рдП, рдмрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕,
/// рдРрд░реЗ рдФрд░ рд╕реНрд▓рд╛рдЗрд╕ рдирд╛рдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ ($ na ())
///
/// рд╕реНрдерд┐рддрд┐ рдХреЛ рдПрдХрд▓ рдмрд┐рдЯ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ
/// рдмреАрдПрдо рдореЗрдВ - рдмрд┐рдЯрдореИрдк рдирд╛рдо рд╕реЗ рдкрд╛рд░рд┐рдд
рд╡рд┐рдзрд┐ BMOrder ( bm % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , pos %% рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ ) % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ
{
рд╕реЗрдЯ рдЙрдк = рд╕реНрдерд┐рддрд┐ \ редред #MAXBITLENGTH , ix = $ bitfind ( $ get (@ bm @ ( рдЙрдк )), 1, pos # .. #MAXBITLENGTH +1)
рдкрджрднрд╛рд░ : ix рдЙрдк * .. #MAXBITLENGTH + ix
рд╕реЗрдЯ рдЙрдк рдХреЗ рд▓рд┐рдП = $ рдСрд░реНрдбрд░ (@ bm @ ( рдЙрдк )) рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ : ' рд╕рдм рд╕реЗрдЯ ix = $ bitfind ( $ get (@ bm @ ( рдЙрдк )), 1) рдЫреЛрдбрд╝реЗрдВ : ix
рдкрджрднрд╛рд░ : ix рдЙрдк * .. #MAXBITLENGTH + ix
"" рдЫреЛрдбрд╝реЛ
}
/// bmdest = bmdest & bmsrc
рд╡рд┐рдзрд┐ BMAnd ( bmdest % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , bmsrc % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ )
{
рд╕реЗрдЯ рд╕рдм 1 = $ рдСрд░реНрдбрд░ (@ bmdest @ ( $ char (0)), - 1), рд╕рдм = $ рдСрд░реНрдбрд░ (@ bmsrc @ ( $ char (0)), - 1))
рд╕реЗрдЯ : рдЙрдк < рд╕рдм 1 рдЙрдк = рд╕рдм 1
ix = 0: 1 рдХреЗ рд▓рд┐рдП: рдЙрдк- рд╕реЗрдЯ : $ рдбреЗрдЯрд╛ (@ bmdest @ ( ix )) рдФрд░ $ рдбреЗрдЯрд╛ (@ bmsrc @ ( ix )) @ bmdest @ ( ix ) = $ bitlogic (@ bmdest @ ( ix ) & @ bmsrc ) @ ( ix )) рдорд╛рд░ : ' $ рдбреЗрдЯрд╛ (@ bmsrc @ ( ix )) @ bmdest @ ( ix )
рдЫреЛрдбрд╝рдирд╛
}
/// bmdest = bmdest | bmsrc
рд╡рд┐рдзрд┐ BMOr ( bmdest % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , bmsrc % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ )
{
рд╕реЗрдЯ рд╕рдм 1 = $ рдСрд░реНрдбрд░ (@ bmdest @ ( $ char (0)), - 1), рд╕рдм = $ рдСрд░реНрдбрд░ (@ bmsrc @ ( $ char (0)), - 1))
рд╕реЗрдЯ : рдЙрдк < рд╕рдм 1 рдЙрдк = рд╕рдм 1
ix = 0: 1 рдХреЗ рд▓рд┐рдП: рдЙрдк рд╕реЗрдЯ : $ рдбреЗрдЯрд╛ (@ bmsrc @ ( ix )) @ bmdest @ ( ix ) = $ рдЪрдпрди ( $ рдбреЗрдЯрд╛ (@ bmdest @ ( ix )): $ bitlogic (@ bmdest @ ( ix )) | @ bmsrc @ ( ix )), 1: @ bmsrc @ ( ix ))
рдЫреЛрдбрд╝рдирд╛
}
рд╡рд┐рдзрд┐ BMNot ( %% рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ )
{
рд╕реЗрдЯ рдореИрдХреНрд╕рдмреНрд▓реНрдХ = $ рдСрд░реНрдбрд░ (@ (.. рдмреАрдПрдордЬреАрдПрд▓рдУрдмреА ) @ ( " рдПрдХреНрд╕реНрдЯрд┐рд╕реНрдЯ " , "" ), - рез), рдмреНрд▓реЗрдХрд▓реЗрди = $ рдмрд┐рдЯрдХрд╛рдЙрдВрдЯ (@ (.. рдмреАрдПрдордЬреАрдПрд▓рдУрдмреА ) @ ( " рдПрдХреНрд╕реНрдЯрд┐рд╕реНрдЯ " , рдореИрдХреНрд╕рдмреНрд▓реЗрдХ )
ix = maxblk : -1: 0 рд╕реЗрдЯ blk = $ get (@ bm @ ( ix )) рд╕реЗрдЯ : $ bitcount ( blk ) < blklen $ bit ( blk , blklen ) = 0 set @ bm ( ix ) = $ bitlogic (~ blk ), blklen = .. #MAXBITLENGTH
do .. BMAnd ( bm , $ рдирд╛рдо (@ (.. BMGLOB ) @ ( " рдПрдХреНрд╕реНрдЯреАрд╕реНрдЯ " )))
рдЫреЛрдбрд╝рдирд╛
}
/// рд╕рд░рдгреА рдореЗрдВ рдпреВрдирд┐рдЯ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рд╡рд┐рдзрд┐ BMCount ( % String рдХреЗ рд░реВрдк рдореЗрдВ bm ) % рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ
{
рд╕реЗрдЯ ix = "" , bmcret = 0
рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП ix = $ рдСрд░реНрдбрд░ (@ bm @ ( ix )) рдЫреЛрдбрд╝ рджреЗрдВ : ix '= + ix рд╕реЗрдЯ bmcret = bmcret + $ bitcount (@ bm @ ( ix ), 1)
Bmcret рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ
}
/// bmdest рдмрд┐рдЯрдореИрдк рдореЗрдВ рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕ vbmsrc рд╕реЗ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ,
/// рдЬрд╣рд╛рдВ рдкреИрд░рд╛рдореАрдЯрд░ рд╡реИрд▓реНрдпреВ рд╡реИрд▓ рд╣реИ
///
рд╡рд┐рдзрд┐ BMEq ( bmdest % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , vbmsrc % рд╕реНрдЯреНрд░рд┐рдВрдЧ , рд╡реИрд▓ % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ )
{
рдорд╛рд░ рдбрд╛рд▓реЛ @ bmdest рдорд░реНрдЬ @ bmdest = @ vbmsrc @ ( val )
рдЫреЛрдбрд╝рдирд╛
}
/// bmdest рдмрд┐рдЯрдореИрдк рдореЗрдВ рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕ vbmsrc рд╕реЗ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ,
/// рдЬрд╣рд╛рдВ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рд╡реИрд▓ рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ
рд╡рд┐рдзрд┐ BMNe ( bmdest % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , vbmsrc % рд╕реНрдЯреНрд░рд┐рдВрдЧ , рд╡реИрд▓ % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ )
{
do .. BMEq ( bmdest , vbmsrc , val ) рдХрд░рддреЗ рд╣реИрдВ .. BMNot ( bmdest )
рдЫреЛрдбрд╝рдирд╛
}
/// bmdest рдмрд┐рдЯрдореИрдк рдореЗрдВ рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕ vbmsrc рд╕реЗ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ,
/// рдЬрд╣рд╛рдВ рдкреИрд░рд╛рдореАрдЯрд░ рд╡реИрд▓реНрдпреВ рдХрдо рд╣реИ (рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛) рд╡реИрд▓
/// bmdest: = U (vbmsrc (v): v <val)
рд╡рд┐рдзрд┐ BMLt ( % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ bmdest , % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ vbmsrc , % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реИрд▓ )
{
@ bmdest рд╕реЗрдЯ ix = val рдХреЛ рдорд╛рд░реЗрдВ
рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП ix = $ рдСрд░реНрдбрд░ (@ vbmsrc @ ( ix ), - 1) рдЫреЛрдбрд╝ рджреЗрдВ : ix = "" рдХрд░рддреЗ рд╣реИрдВ .. BMOr ( bmdest , $ name (@ vbmsrc @ ( ix )))
рдЫреЛрдбрд╝рдирд╛
}
/// рдмреАрдПрдордПрд▓рдЯреА () рдХреЗ рд╕рдорд╛рди рд▓реЗрдХрд┐рди "рд╕реЗ рдХрдо рдпрд╛ рдмрд░рд╛рдмрд░"
рд╡рд┐рдзрд┐ рдмреАрдПрдордПрд▓рдИ ( bmdest % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , vbmsrc % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , рдорд╛рди % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ )
{
рдорд╛рд░ @ bmdest рдорд░реНрдЬ @ bmdest = @ vbmsrc @ ( рд╡реИрд▓ ) рд╕реЗрдЯ ix = рд╡реИрд▓
рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП ix = $ рдСрд░реНрдбрд░ (@ vbmsrc @ ( ix ), - 1) рдЫреЛрдбрд╝ рджреЗрдВ : ix = "" рдХрд░рддреЗ рд╣реИрдВ .. BMOr ( bmdest , $ name (@ vbmsrc @ ( ix )))
рдЫреЛрдбрд╝рдирд╛
}
/// BMLe рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди "рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдмрд░рд╛рдмрд░"
рд╡рд┐рдзрд┐ рдмреАрдПрдордЬреА ( bmdest % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , vbmsrc % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , рд╡реИрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ% рдХреЗ рд░реВрдк рдореЗрдВ )
{
рдорд╛рд░ @ bmdest рдорд░реНрдЬ @ bmdest = @ vbmsrc @ ( рд╡реИрд▓ ) рд╕реЗрдЯ ix = рд╡реИрд▓
рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП ix = $ рдСрд░реНрдбрд░ (@ vbmsrc @ ( ix )) рдЫреЛрдбрд╝ рджреЗрдВ : ix = "" рдХрд░рддреЗ рд╣реИрдВ .. BMOr ( bmdest , $ name (@ vbmsrc @ ( ix )))
рдЫреЛрдбрд╝рдирд╛
}
/// рдЗрд╕реА рдкреНрд░рдХрд╛рд░, рдорд╛рди рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдиреНрдпреВрдирддрдо рдХреЗ рдмрд░рд╛рдмрд░ рдФрд░ рдЕрдзрд┐рдХрддрдо рд╕реЗ рдХрдо рдпрд╛ рдмрд░рд╛рдмрд░
рд╡рд┐рдзрд┐ BMGeLe ( bmdest % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , vbmsrc % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , рдиреНрдпреВрдирддрдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ , рдиреНрдпреВрдирддрдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдзрд┐рдХрддрдо )
{
рдорд╛рд░ @ bmdest рдорд░реНрдЬ @ bmdest = @ vbmsrc @ ( рдиреНрдпреВрдирддрдо ) рд╕реЗрдЯ ix = рдорд┐рдирдЯ
рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП ix = $ рдСрд░реНрдбрд░ (@ vbmsrc @ ( ix )) рдЫреЛрдбрд╝ рджрд┐рдпрд╛ : ix ]] рдЕрдзрд┐рдХрддрдо рдЫреЛрдбрд╝ рджрд┐рдпрд╛ : ix = "" рдХрд░рддреЗ рд╣реИрдВ .. BMOr ( bmdest , $ name (@ vbmsrc @ ( ix ))
рдЫреЛрдбрд╝рдирд╛
}
/// рдмреАрдПрдордЬреА рдХреЗ рд╕рдорд╛рди (), рд▓реЗрдХрд┐рди "рд╕рдЦреНрддреА рд╕реЗ рдмрдбрд╝рд╛"
рд╡рд┐рдзрд┐ BMGt ( bmdest % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , vbmsrc % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , %% рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реИрд▓ )
{
@ bmdest рд╕реЗрдЯ ix = val рдХреЛ рдорд╛рд░реЗрдВ
рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП ix = $ рдСрд░реНрдбрд░ (@ vbmsrc @ ( ix )) рдЫреЛрдбрд╝ рджреЗрдВ : ix = "" рдХрд░рддреЗ рд╣реИрдВ .. BMOr ( bmdest , $ name (@ vbmsrc @ ( ix )))
рдЫреЛрдбрд╝рдирд╛
}
/// рд╕рдорд╛рди рд░реВрдк рд╕реЗ, рдиреНрдпреВрдирддрдо рд╕реЗ рдЕрдзрд┐рдХ рдФрд░ рдЕрдзрд┐рдХрддрдо рд╕реЗ рдХрдо рдореВрд▓реНрдп
рд╡рд┐рдзрд┐ BMGtLt ( bmdest % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , vbmsrc % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , рдиреНрдпреВрдирддрдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ , рдиреНрдпреВрдирддрдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдзрд┐рдХрддрдо )
{
рдорд╛рд░ @ bmdest рд╕реЗрдЯ ix = рдорд┐рдирдЯ
рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП ix = $ рдСрд░реНрдбрд░ (@ vbmsrc @ ( ix )) рдЫреЛрдбрд╝ рджрд┐рдпрд╛ : рдЕрдзрд┐рдХрддрдо ']] ix рдЫреЛрдбрд╝ рджрд┐рдпрд╛ : ix = "" рдХрд░рддреЗ рд╣реИрдВ .. BMOr ( bmdest , $ name (@ vbmsrc @ ( ix )))
рдЫреЛрдбрд╝рдирд╛
}
/// рдЗрд╕реА рддрд░рд╣, рдорд╛рди рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдиреНрдпреВрдирддрдо рдХреЗ рдмрд░рд╛рдмрд░ рдФрд░ рдЕрдзрд┐рдХрддрдо рд╕реЗ рдХрдо
рд╡рд┐рдзрд┐ BMGeLt ( bmdest % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , vbmsrc % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , рдорд┐рдирдЯ % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , рдЕрдзрд┐рдХрддрдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ )
{
рдорд╛рд░ @ bmdest рдорд░реНрдЬ @ bmdest = @ vbmsrc @ ( рдиреНрдпреВрдирддрдо ) рд╕реЗрдЯ ix = рдорд┐рдирдЯ
рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП ix = $ рдСрд░реНрдбрд░ (@ vbmsrc @ ( ix )) рдЫреЛрдбрд╝ рджрд┐рдпрд╛ : рдЕрдзрд┐рдХрддрдо ']] ix рдЫреЛрдбрд╝ рджрд┐рдпрд╛ : ix = "" рдХрд░рддреЗ рд╣реИрдВ .. BMOr ( bmdest , $ name (@ vbmsrc @ ( ix )))
рдЫреЛрдбрд╝рдирд╛
}
/// рд╕рдорд╛рди рд░реВрдк рд╕реЗ, рдиреНрдпреВрдирддрдо рд╕реЗ рдЕрдзрд┐рдХ рдФрд░ рдЕрдзрд┐рдХрддрдо рдХреЗ рдмрд░рд╛рдмрд░ рдпрд╛ рдЙрд╕рд╕реЗ рдХрдо рдорд╛рди
рд╡рд┐рдзрд┐ BMGtLe ( bmdest % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , vbmsrc % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , рдорд┐рдирдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдиреНрдпреВрдирддрдо , % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдзрд┐рдХрддрдо )
{
рдорд╛рд░ @ bmdest рд╕реЗрдЯ ix = рдорд┐рдирдЯ
рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП ix = $ рдСрд░реНрдбрд░ (@ vbmsrc @ ( ix )) рдЫреЛрдбрд╝ рджрд┐рдпрд╛ : ix ]] рдЕрдзрд┐рдХрддрдо рдЫреЛрдбрд╝ рджрд┐рдпрд╛ : ix = "" рдХрд░рддреЗ рд╣реИрдВ .. BMOr ( bmdest , $ name (@ vbmsrc @ ( ix ))
рдЫреЛрдбрд╝рдирд╛
}
/// рдСрдкрд░реЗрд╢рдВрд╕ рдмрд┐рдЯ-рд╕реНрд▓реАрдХ рдбреЗрдЯрд╛ рдкрд░
/// рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рдХреЛ рдПрдХ рдкрд╛рда рдмрд┐рдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИ
/// {рд╕рд╛рдЗрди, 1,2,4, ..., 2 ** рдПрди}
ClassMethod CvtToBin ( рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ% рдкреВрд░реНрдгрд╛рдВрдХ ) % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ
{
рд╕реЗрдЯ рдорд╛рди = $ fnumber (+ рдорд╛рди , "" , 0), Res = ( рдорд╛рди <0)
рдкрдж рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП : ' рдорд╛рди рд╕реЗрдЯ рд░реЗрд╕ = рд░реЗрд╕ _ ( рдорд╛рди # 2), рдорд╛рди = рдорд╛рди \ 2
рд░реЗрдЬ рдЫреЛрдбрд╝реЛ
}
/// $ рдкреВрд░реНрдгрд╛рдВрдХ рдмрд┐рдЯ рд╕реВрдЪреА (рд╕рдВрдХреЗрдд, 1,2,4, ... 2 ** рдПрди) рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ
ClassMethod CvtFromSlice ( % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЯреБрдХрдбрд╝рд╛ ) % рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ
{
рд╕реЗрдЯ Res = 0
рдХреЗ рд▓рд┐рдП рдореИрдВ = $ рд╕реВрдЪреА ( рдЯреБрдХрдбрд╝рд╛ ): - рез: реи рд╕реЗрдЯ рд░реЗрд╕ = рд░реЗрд╕ + рд░реЗрд╕ рд╕реЗрдЯ рд░реЗрд╕ = рд░реЗрд╕ + $ рд▓рд┐рд╕реНрдЯреЗрдЯ ( рдЯреБрдХрдбрд╝рд╛ , рдореИрдВ , реж)
$ рдЪреБрдирд┐рдВрджрд╛ рдЫреЛрдбрд╝реЗрдВ ( $ рд╢реНрд░реЛрддрд╛ ( рдЯреБрдХрдбрд╝рд╛ ): - рд░реЗрд╕ , 1: рд░реЗрд╕ )
}
/// рдмрд┐рдЯреНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд┐рдЯреНрд╕ рдХреЛ рд╕реВрдЪреА рдореЗрдВ рдбрд╛рд▓ рджреЗрддрд╛ рд╣реИ ($ lb ())
рд╡рд┐рдзрд┐ GetSlice ( %% рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ vbs , % рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд┐рддрд┐ ) % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ
{
рд╕реЗрдЯ рдЙрдк = pos \ .. #MAXBITLENGTH , ix = pos -1 # .. #MAXBITLENGTH +1
i = 1: 1 рдХреЗ рд▓рд┐рдП: $ рдСрд░реНрдбрд░ (@ vbs @ ( "" ), - 1) рд╕реЗрдЯ $ рд╕реВрдЪреА ( рдЯреБрдХрдбрд╝рд╛ , i ) = $ рдмрд┐рдЯ ( $ get (@ vbs @ ( i , sub )), ix )
рдЯреБрдХрдбрд╝рд╛ рдЫреЛрдбрд╝ рджреЛ
}
/// рд╕реНрдерд╛рди bmdest рдмрд┐рдЯ рд╕рд░рдгреА рдореЗрдВ vbs рдмрд┐рдЯ-рд╕реНрд▓рд╛рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рдПрдХ рдирдореВрдирд╛,
/// рдЬрд╣рд╛рдВ рдкреИрд░рд╛рдореАрдЯрд░ рд╡реИрд▓реНрдпреВ рд╡реИрд▓ рд╣реИ
рд╡рд┐рдзрд┐ BSEq ( bmdest as % String , vbs as % String , val as % рдкреВрд░реНрдгрд╛рдВрдХ )
{
set bswork = .. GetNewTMP () рд╕реЗрдЯ vbit = .. CvtToBin ( val )
@ bmdest рдорд░реНрдЬ @ bmdest = @ (.. рдмреАрдПрдордЬреАрдПрд▓рдУрдмреА ) @ ( " рдПрдХреНрд╕реНрдЯрд┐рд╕реНрдЯ " ) рдХреЛ рдорд╛рд░реЗрдВ
рд╕реЗрдЯ рдХреА рдЕрдзрд┐рдХрддрдо рд╕реАрдорд╛ = $ рдСрд░реНрдбрд░ (@ vbs @ ( "" ), - рез) рд╕реЗрдЯ : рдЕрдзрд┐рдХрддрдо < $ рд▓рдВрдмрд╛рдИ ( vbit ) рдЕрдзрд┐рдХрддрдо рд╕реАрдорд╛ = $ рд▓рдВрдмрд╛рдИ ( vbit )
ix = 1: 1 рдХреЗ рд▓рд┐рдП: рдЕрдзрд┐рдХрддрдо рдорд╛рд░ @ bswork рдорд░реНрдЬ @ bswork = @ vbs @ ( ix ) рдХрд░рддреЗ рд╣реИрдВ : ' $ extract ( vbit , ix ) .. BMNot ( bswork ) do .. BMAnd ( bmdest , bswork )
рдорд╛рд░ @ bswork рдЫреЛрдбрд╝ рджрд┐рдпрд╛
}
/// рд╕реНрдерд╛рди bmdest рдмрд┐рдЯ рд╕рд░рдгреА рдореЗрдВ vbs рдмрд┐рдЯ-рд╕реНрд▓рд╛рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рдПрдХ рдирдореВрдирд╛,
/// рдЬрд╣рд╛рдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорд╛рди рд╡реИрд▓ рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдЙрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ
рд╡рд┐рдзрд┐ BSGe ( bmdest % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , vbs % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , рд╡реИрд▓ %% рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ )
{
do .. BSLt ( bmdest , vbs , val ), .. BMNot ( bmdest ) рдиреЗ рдкрдж рдЫреЛрдбрд╝ рджрд┐рдпрд╛
}
/// рд╕реНрдерд╛рди bmdest рдмрд┐рдЯ рд╕рд░рдгреА рдореЗрдВ vbs рдмрд┐рдЯ-рд╕реНрд▓рд╛рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рдПрдХ рдирдореВрдирд╛,
/// рдЬрд╣рд╛рдВ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рд╡реИрд▓ рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ
рд╡рд┐рдзрд┐ BSNe ( bmdest % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , vbs % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , рд╡реИрд▓ %% рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ )
{
рдХрд░рддреЗ рд╣реИрдВ .. BSEq ( bmdest , vbs , val ), .. рдмреАрдПрдордиреЙрдЯ ( bmdest )
рдЫреЛрдбрд╝рдирд╛
}
/// рд╕реНрдерд╛рди bmdest рдмрд┐рдЯ рд╕рд░рдгреА рдореЗрдВ vbs рдмрд┐рдЯ-рд╕реНрд▓рд╛рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рдПрдХ рдирдореВрдирд╛,
/// рдЬрд╣рд╛рдВ рдкреИрд░рд╛рдореАрдЯрд░ рд╡реИрд▓реНрдпреВ рд╡реИрд▓реНрдпреВ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ
///
рд╡рд┐рдзрд┐ BSGt ( bmdest % String , vbs as % String , val as % Integer )
{
do .. BSLe ( bmdest , vbs , val ), .. BMNot ( bmdest ) рдиреЗ рдкрдж рдЫреЛрдбрд╝ рджрд┐рдпрд╛
}
/// рд╕реНрдерд╛рди bmdest рдмрд┐рдЯ рд╕рд░рдгреА рдореЗрдВ vbs рдмрд┐рдЯ-рд╕реНрд▓рд╛рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рдПрдХ рдирдореВрдирд╛,
/// рдЬрд╣рд╛рдБ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЪрд┐рд╣реНрди рдЪрд┐рдиреНрд╣ рд╣реИ (рд╢реВрдиреНрдп рдХреЛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)
рд╡рд┐рдзрд┐ BSSign ( bmdest % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , vbs % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ,% рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░реЗрдВ )
{
рд╕реЗрдЯ рдХрд░реЗрдВ bswork = .. GetNewTMP () @ bmdest рдХреЛ рдорд╛рд░реЗрдВ
рдорд░реНрдЬ @ bmdest = @ (.. BMGLOB ) @ ( " EXIST " ), @ bswork = @ vbs @ (1)
do : $ get ( рд╕рд╛рдЗрди ) '<0 .. BMNot ( bswork ) do .. BMAnd ( bmdest , bswork )
рдорд╛рд░ @ bswork рдЫреЛрдбрд╝ рджрд┐рдпрд╛
}
/// рд╕реНрдерд╛рди bmdest рдмрд┐рдЯ рд╕рд░рдгреА рдореЗрдВ vbs рдмрд┐рдЯ-рд╕реНрд▓рд╛рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рдПрдХ рдирдореВрдирд╛,
/// рдЬрд╣рд╛рдВ рд╡реИрд▓реНрдпреВ рд╡реИрд▓реНрдпреВ рд╡реИрд▓реНрдпреВ рд╕реЗ рдХрдо рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реИ
рд╡рд┐рдзрд┐ BSLe ( bmdest % String , vbs as % String , val as % рдкреВрд░реНрдгрд╛рдВрдХ )
{
рд╕реЗрдЯ tmpLe = .. GetNewTMP ()
do .. BSLtAbs ( bmdest , vbs , val ), .. BSSign ( tmpLe , vbs , -1)
рдЕрдЧрд░ рд╡реИрд▓ '<0 do .. BMOr ( bmdest , tmpLe ), .. BSEq ( tmpLe , vbs , рд╡реИрд▓ ), .. BMOr ( bmdest , tmpLe ) рдЕрдЧрд░ 1
рд╡рд░рдирд╛ .. рдмреАрдПрдордиреЙрдЯ ( рдмреАрдПрдордбреАрдИрдПрд╕рдЯреА ), .. рдмреАрдПрдордПрдПрдордбреА ( рдмреАрдПрдордбреАрдПрд╕рдЯреА , рдЯреАрдПрдордкреАрдПрд▓рдИ )
@ tmpLe рдХреЛ рдорд╛рд░ рдбрд╛рд▓реЛ
}
/// рд╕реНрдерд╛рди bmdest рдмрд┐рдЯ рд╕рд░рдгреА рдореЗрдВ vbs рдмрд┐рдЯ-рд╕реНрд▓рд╛рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рдПрдХ рдирдореВрдирд╛,
/// рдЬрд╣рд╛рдВ рдкреИрд░рд╛рдореАрдЯрд░ рд╡реИрд▓реНрдпреВ рд╡реИрд▓ рд╕реЗ рдХрдо рд╣реИ
рд╡рд┐рдзрд┐ BSLt ( bmdest % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ , vbs % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ,%% рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реИрд▓ )
{
рд╕реЗрдЯ tmpLt = .. GetNewTMP ()
do .. BSLtAbs ( bmdest , vbs , val ), .. BSSign ( tmpLt , vbs , -1)
рдЕрдЧрд░ рд╡реИрд▓ '<0 do .. BMOr ( bmdest , tmpLt ) рдЕрдЧрд░ 1
ELSE do .. BMNot ( bmdest ), .. BMAnd ( bmdest , tmpLt ), .. BSNe ( tmpLt , vbs , val ), .. BMAnd ( bmdest , tmpLt )
@ tmpLt рдХреЛ рдорд╛рд░ рдбрд╛рд▓реЛ
}
/// рд╕реНрдерд╛рди bmdest рдмрд┐рдЯ рд╕рд░рдгреА рдореЗрдВ vbs рдмрд┐рдЯ-рд╕реНрд▓рд╛рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рдПрдХ рдирдореВрдирд╛,
/// рдЬрд╣рд╛рдВ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди val1 рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реИ рдФрд░ val2 рдХреЗ рдмрд░рд╛рдмрд░ рдпрд╛ рдЙрд╕рд╕реЗ рдХрдо рд╣реИ
рд╡рд┐рдзрд┐ BSGeLe ( bmdest as % String , vbs as % String , val1 as % рдкреВрд░реНрдгрд╛рдВрдХ , val2 as % рдкреВрд░реНрдгрд╛рдВрдХ )
{
tmpGeLe = .. GetNewTMP () рд╕реЗрдЯ рдХрд░реЗрдВ
do .. BSGe ( bmdest , vbs , val1 ), .. BSLe ( tmpGeLe , vbs , val2 ), .. BMAnd ( bmdest , tmpGeLe )
@ tmpGeLe рдХреЛ рдорд╛рд░ рдбрд╛рд▓реЛ
}
/// vbs рдмрд┐рдЯ-рд╕реНрд▓рд╛рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ bmdest рдмрд┐рдЯрдореИрдк рдореЗрдВ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ,
/// рдЬрд╣рд╛рдВ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди val1 рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реИ рдФрд░ val2 рд╕реЗ рдХрдо рд╣реИ
рд╡рд┐рдзрд┐ BSGeLt ( bmdest as % String , vbs as % рд╕реНрдЯреНрд░рд┐рдВрдЧ , val1 as % рдкреВрд░реНрдгрд╛рдВрдХ , val2 as % рдкреВрд░реНрдгрд╛рдВрдХ )
{
рд╕реЗрдЯ tmpGeLt = .. GetNewTMP ()
do .. BSGe ( bmdest , vbs , val1 ), .. BSLt ( tmpGeLt , vbs , val2 ), .. BMAnd ( bmdest , tmpGeLt )
@ tmpGeLt рдХреЛ рдорд╛рд░ рдбрд╛рд▓реЛ
}
/// рд╕реНрдерд╛рди bmdest рдмрд┐рдЯ рд╕рд░рдгреА рдореЗрдВ vbs рдмрд┐рдЯ-рд╕реНрд▓рд╛рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рдПрдХ рдирдореВрдирд╛,
/// рдЬрд╣рд╛рдВ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди val1 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ рдФрд░ val2 рд╕реЗ рдХрдо рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реИ
рд╡рд┐рдзрд┐ BSGtLe ( bmdest as % String , vbs as % String , val1 as % рдкреВрд░реНрдгрд╛рдВрдХ , val2 as % рдкреВрд░реНрдгрд╛рдВрдХ )
{
рд╕реЗрдЯ tmpGtLe = .. GetNewTMP ()
do .. BSGt ( bmdest , vbs , val1 ), .. BSLe ( tmpGtLe , vbs , val2 ), .. BMAnd ( bmdest , tmpGtLe )
@ tmpGtLe рдХреЛ рдорд╛рд░ рдбрд╛рд▓реЛ
}
/// vbs рдмрд┐рдЯ-рд╕реНрд▓рд╛рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ bmdest рдмрд┐рдЯрдореИрдк рдореЗрдВ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ,
/// рдЬрд╣рд╛рдВ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди val1 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ рдФрд░ val2 рд╕реЗ рдХрдо рд╣реИ
рд╡рд┐рдзрд┐ BSGtLt ( bmdest as % String , vbs as % рд╕реНрдЯреНрд░рд┐рдВрдЧ , val1 as % рдкреВрд░реНрдгрд╛рдВрдХ , val2 as % рдкреВрд░реНрдгрд╛рдВрдХ )
{
рд╕реЗрдЯ tmpGtLt = .. GetNewTMP ()
do .. BSGt ( bmdest , vbs , val1 ), .. BSLt ( tmpGtLt , vbs , val2 ), .. BMAnd ( bmdest , tmpGtLt )
@ tmpGtLt рдХреЛ рдорд╛рд░ рдбрд╛рд▓реЛ
}
/// vbs рдмрд┐рдЯ-рд╕реНрд▓рд╛рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ bmdest рдмрд┐рдЯрдореИрдк рдореЗрдВ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ,
/// рдЬрд╣рд╛рдВ рдкреВрд░реНрдг рдорд╛рди рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рд╡реИрд▓ рд╕реЗ рдХрдо рд╣реИ
рд╡рд┐рдзрд┐ BSLtAbs ( bmdest as % String , vbs as % String , val as % рдкреВрд░реНрдгрд╛рдВрдХ )
{
set bswork = .. GetNewTMP (), test = .. GetNewTMP ()
рдорд╛рд░ @ bmdest рд╕реЗрдЯ vbit = .. CvtToBin ( рд╡реИрд▓ ), ixmax = $ рдСрд░реНрдбрд░ (@ vbs @ ( "" ), - 1)
рдорд╛рд░ @ рдЯреЗрд╕реНрдЯ рдорд░реНрдЬ @ рдЯреЗрд╕реНрдЯ = @ (.. рдмреАрдПрдордЬреАрдПрд▓рдУрдмреА ) @ ( " рдПрдХреНрдЬрд┐рд╕реНрдЯ " )
рдЕрдЧрд░ ixmax < $ рд▓рдВрдмрд╛рдИ ( vbit ) {
рдорд░реНрдЬ @ bmdest = @ рдкрд░реАрдХреНрд╖рдг
} {
ix = ixmax рдХреЗ рд▓рд┐рдП : -1: 2 {
рдорд╛рд░ @ bswork рдорд░реНрдЬ @ bswork = @ vbs @ ( ix )
рдХрд░рддреЗ рд╣реИрдВ .. рдмреАрдПрдордиреЛрдЯ ( рдмреЛрд╕реНрдХреЛрд░ ), .. рдмреАрдПрдордПрдПрдирдбреА ( рдмреЛрд╕реНрдХреЛрд░ , рдЯреЗрд╕реНрдЯ )
do : $ рдЕрд░реНрдХ ( vbit , ix ) .. BMOr ( bmdest , bswork ), .. BMNot ( bswork )
рдХрд░реЛ .. рдмреАрдПрдордПрдПрдирдбреА ( рдкрд░реАрдХреНрд╖рдг , рдмреЛрд╕реНрдХреЛрд░ )
}
}
@ @ рдорд╛рд░ рдбрд╛рд▓реЛ , @ bswork рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛
}
/// рд╕рдореВрд╣рдмрджреНрдзрддрд╛ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ
/// рдЕрдзрд┐рдХрддрдо рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ (рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде
/// bsmin '= 0 - рдиреНрдпреВрдирддрдо) vbs рдмрд┐рдЯ-рд╕реНрд▓рд╛рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рдмрд┐рдЯрдореИрдк рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП
рд╡рд┐рдзрд┐ BSMax ( % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ vbs , % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд┐рдЯрдореИрдк , % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ bsmin ) % рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ
{
рд╕реЗрдЯ bsmin = '' $ get ( bsmin ), bswork = .. GetNewTMP ()
рд╕реЗрдЯ ResBSM = .. GetNewTMP (), tmpBSM = .. GetNewTMP ()
рдорд░реНрдЬ @ resBSM = @ vbs @ (1) рдХрд░рддреЗ рд╣реИрдВ : ' bsmin .. BMNot ( resBSM ) рдХрд░рддреЗ рд╣реИрдВ .. BMAnd ( resBSM , bitmap )
рдЕрдЧрд░ .. BMCount ( resBSM ) рдорд┐рдирдЯ = 0 рд╕реЗрдЯ рдХрд░реЗрдВ
ELSE рд╕реЗрдЯ рдорд┐рдирдЯ = 1 рдХрд┐рд▓ @ resBSM рдорд░реНрдЬ @ resBSM = @ vbs @ (1) рдХрд░рддреЗ рд╣реИрдВ : bsmin .. BMNot ( resBSM ) рдХрд░рдирд╛ .. BMAnd ( resBSM , bitmap )
ix рдХреЗ рд▓рд┐рдП = $ рдСрд░реНрдбрд░ (@ vbs @ ( "" ), - рез): - рез: реи {
@ tmpBSM , @ bswork рдорд░реНрдЬ @ tmpBSM = @ resBSM , @ bswork = @ vbs @ ( ix ) рдХреЛ рдорд╛рд░реЗрдВ
do : min .. BMNot ( bswork ) do .. BMAnd ( tmpBSM , bswork )
if .. BMCount ( tmpBSM ) @ resBSM рдорд░реНрдЬ @ resBSM = @ tmpBSM рдорд╛рд░рддреЗ рд╣реИрдВ
}
рд╕реЗрдЯ рдкреЛрдЬрд╝ = .. BMOrder ( resBSM , 0) рдЫреЛрдбрд╝ рджрд┐рдпрд╛ : ' рдкреЙрд╕ 0
рд╕реЗрдЯ рд╡реИрд▓ = .. CvtFromSlice (.. GetSlice ( vbs , pos ))
@ bswork , @ resBSM , @ tmpBSM рдХреЛ рдЫреЛрдбрд╝реЛ рд╡реИрд▓ рдХреЛ рдорд╛рд░реЛ
}
рд╡рд┐рдзрд┐ BSMin ( % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ vbs , % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд┐рдЯрдореИрдк ) % рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ
{
рдЫреЛрдбрд╝ рджрд┐рдпрд╛ .. BSMax ( vbs , рдмрд┐рдЯрдореИрдк , 1)
}
/// рдмрд┐рдЯреНрд╕-рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рдмрд┐рдЯрдореИрдк рдирдореВрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдиреЛрдВ рдХрд╛ рдпреЛрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рд╡рд┐рдзрд┐ BSSum ( % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ vbs , % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд┐рдЯрдореИрдк ) % рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ
{
set bswork = .. GetNewTMP (), resBSSum = .. GetNewTMP (), tmpbSSum = .. GetNewTMP ()
рдорд░реНрдЬ @ resBSSum = @ vbs @ (1) рдХрд░рддреЗ рд╣реИрдВ .. BMNot ( resBSSum ), .. BMAnd ( resBSSum , рдмрд┐рдЯрдореИрдк ) рд╕реЗрдЯ рд╕реНрд▓рд╛рдЗрд╕ = ""
ix = 2: 1 рдХреЗ рд▓рд┐рдП: $ рдЖрджреЗрд╢ (@ vbs @ ( "" ), - 1) рдХрд┐рд▓ @ tmpBSSum рдорд░реНрдЬ @ tmpBSSum = @ vbs @ ( ix ) рдХрд░рддреЗ рд╣реИрдВ .. BMAnd ( tmpbum , resBSSum ) $ рд╕реВрдЪреА ( рдЯреБрдХрдбрд╝рд╛ , ix ) рд╕реЗрдЯ рдХрд░реЗрдВ ) = .. BMCount ( tmpbSSum )
рд╕реЗрдЯ рд╡реИрд▓ = .. CvtFromSlice ( рдЯреБрдХрдбрд╝рд╛ )
рдорд╛рд░ @ resBSSum рдорд░реНрдЬ @ resBSSum = @ vbs @ (1) рдХрд░рддреЗ рд╣реИрдВ .. BMAnd ( resBSSum , рдмрд┐рдЯрдореИрдк ) рд╕реЗрдЯ рд╕реНрд▓рд╛рдЗрд╕ = ""
ix = 2: 1 рдХреЗ рд▓рд┐рдП: $ рдЖрджреЗрд╢ (@ vbs @ ( "" ), - 1) рдХрд┐рд▓ @ tmpBSSum рдорд░реНрдЬ @ tmpBSSum = @ vbs @ ( ix ) рдХрд░рддреЗ рд╣реИрдВ .. BMAnd ( tmpbum , resBSSum ) $ рд╕реВрдЪреА ( рдЯреБрдХрдбрд╝рд╛ , ix ) рд╕реЗрдЯ рдХрд░реЗрдВ ) = .. BMCount ( tmpbSSum )
рд╕реЗрдЯ рд╡реИрд▓ = рд╡реИрд▓ - .. CvtFromSlice ( рдЯреБрдХрдбрд╝рд╛ )
@ @ bswork , @ resBSSum , @ tmpBSSum рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ , рд╡реИрд▓ рдХреЛ рдорд╛рд░реЗрдВ
}
/// рдмрд┐рдЯрдореИрдкреНрд╕ рдФрд░ рдмрд┐рдЯ-рд╕реНрд▓рд╛рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рднрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ
///
/// рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдмрд┐рдЯ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ
/// рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рджрд┐рдпрд╛
/// рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯреЗрдХреНрд╕рд┐рд╕реНрдЯ = 1 рдХреЗ рд╕рд╛рде рдмрд┐рдЯ рдХреЛ рднреА рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ
рдореМрдЬреВрджрд╛ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХрд╛ /// рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕ (рд╕рд╣реА рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ)
/// BMNot () рд╡рд┐рдзрд┐ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди
рд╡рд┐рдзрд┐ рд╕реЗрдЯрдмрд┐рдЯ рдореИрдк ( % рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ , рд╕рдВрдкрддреНрддрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ , % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдореВрд▓реНрдп , % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯреЗрдХреНрд╕рд┐рд╕реНрдЯ )
{
рд╕реЗрдЯ idf0 = idfact -1 \ .. #MAXBITLENGTH , idf1 = idfact -1 # .. #MAXBITLENGTH +1
рд╕реЗрдЯ : $ get ( рд╕реЗрдЯрдЯреЗрдХреНрд╕рд┐рд╕реНрдЯ ) $ рдмрд┐рдЯ (@ (.. BMGLOB ) @ ( " рдПрдХреНрд╕реНрдЯрд┐рд╕реНрдЯ " , idf0 ), idf1 ) = рез
$ рдмрд┐рдЯ рд╕реЗрдЯ рдХрд░реЗрдВ (@ (.. BMGLOB ) @ ( "I" , рд╕рдВрдкрддреНрддрд┐ , рдореВрд▓реНрдп , idf0 ), idf1 ) 1
рдЫреЛрдбрд╝рдирд╛
}
/// рдмреАрдЯрд▓реНрд╕ рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдмрд┐рдЯ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ
рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рджрд┐рдП рдЧрдП рдореВрд▓реНрдп рдХрд╛ ///ред
/// рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯреЗрдХреНрд╕рд┐рд╕реНрдЯ - рд╕реЗрдЯрдмрд┐рдЯ рдореИрдк рдХреЗ рд╕рдорд╛рди ()
рд╡рд┐рдзрд┐ рд╕реЗрдЯрдмреАрдЯреНрд▓рд┐рд╕ ( рдЖрдИрдбреА % рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрдХрд╛рд░ , рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ% рд╕реНрдЯреНрд░рд┐рдВрдЧ , рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ% рдкреВрд░реНрдгрд╛рдВрдХ , рд╕реЗрдЯрдЯреЗрдХреНрд╕рд┐рд╕реНрдЯ % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ )
{
рд╕реЗрдЯ idf0 = idfact -1 \ .. #MAXBITLENGTH , idf1 = idfact -1 # .. #MAXBITLENGTH +1
рд╕реЗрдЯ : $ get ( рд╕реЗрдЯрдЯреЗрдХреНрд╕рд┐рд╕реНрдЯ ) $ рдмрд┐рдЯ (@ (.. BMGLOB ) @ ( " рдПрдХреНрд╕реНрдЯрд┐рд╕реНрдЯ " , idf0 ), idf1 ) = рез
рд╕реЗрдЯ v = .. CvtToBin (+ рдорд╛рди )
ix = 1: 1: $ рд▓рдВрдмрд╛рдИ ( v ) рд╕реЗрдЯ : $ рдПрдХреНрд╕рдЯреНрд░реЗрдХреНрдЯ ( v , ix ) $ рдмрд┐рдЯ (@ (.. BMGLOB ) @ ( "S" , рд╕рдВрдкрддреНрддрд┐ , ix , idf0 ), idf1 ) = 1
рдЫреЛрдбрд╝рдирд╛
}
/// рдЗрдВрдбреЗрдХреНрд╕ рдЧреНрд▓реЛрдмрд▓ рд╡рд╛рд▓реЗ рд╕рдмрдиреЙрдб рдХрд╛ рдирд╛рдо рджреЗрддрд╛ рд╣реИ
/// рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕ (рдпрджрд┐ рд╕реНрд▓рд╛рдЗрд╕ = 0 рдпрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ) рдпрд╛ рдмрд┐рдЯрд╕реНрд▓рд╛рдЗрд╕ (рдЬреАрдПрдЪрдмреА рд╕реНрд▓рд╛рдЗрд╕ '= 0)
/// рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдПред рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рдЦрд╛рд▓реА рд╣реИ рдпрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ -
/// рддреЛ рдореМрдЬреВрджрд╛ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХрд╛ рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕
рд╡рд┐рдзрд┐ GetBitMapName ( % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ , % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд▓рд╛рдЗрд╕ ) % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ
{
рдЫреЛрдбрд╝ рджрд┐рдпрд╛ : $ get ( рд╕рдВрдкрддреНрддрд┐ ) = "" $ рдирд╛рдо (@ (.. BMGLOB ) @ ( " рдПрдХреНрд╕реНрдЯрд┐рд╕реНрдЯ " ))
$ рдирд╛рдо рдЫреЛрдбрд╝реЗрдВ (@ (.. BMGLOB ) @ ( $ рдЪрдпрди (+ $ get ( рд╕реНрд▓рд╛рдЗрд╕ ): "S" , 1: "I" ), рд╕рдВрдкрддреНрддрд┐ )
}
/// рдбреЗрдореЛ рднрд░рдиреЗ рдФрд░ рдЪрдпрди
///
рдХреНрд▓рд╛рд╕рдореИрдереЛрдб рдкреЙрдкреНрдпреБрд▓реЗрдЯ ( % рд╕реНрдЯреНрд░рд┐рдВрдЧ = 10000 рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд┐рдиреЗрдВ )
{
рд╕реЗрдЯ ix = .. % рдирдпрд╛ ()
ix рд╕реЗрдЯ рдХрд░реЗрдВ ред BMGLOB = $ рдирд╛рдо (^ BMI)
set count = $ get ( рдЧрд┐рдирддреА , 10000), m = 0
рд╕реЗрдЯ рдирд╛рдо = $ рд╕реВрдЪреА ( "рд╕рд╛рдВрддрд╛ рдХреНрд▓реЙрдЬрд╝" , "рдХреНрд░реЛрдХреЛрдбрд╛рдЗрд▓" , "рд╕рд┐рдореНрдмрд╛" )
рд╕реЗрдЯ рд░рдВрдЧ = $ рд╕реВрдЪреА ( "рд╕рд┐рдпрд╛рди" , "рдореИрдЬреЗрдВрдЯрд╛" , "рдпреЗрд▓реЛ" , "рдмреНрд▓реИрдХ" )
рдЕрдЧрд░ $ рд╕реЙрд░реНрдЯрдмрдЧрд┐рди (^ рдмреАрдПрдордЖрдИ)
рдореБрд╣рд╛рд╡рд░реЗ рдХреЗ рд▓рд┐рдП = 1: 1: рдЧрд┐рдирддреА {
рд╕реЗрдЯ рдирд╛рдо = $ рд╕реВрдЪреА ( рдирд╛рдо , 1 + $ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ ( $ рд╕реВрдЪреА рд╕реВрдЪреА ( рдирд╛рдо )))
рд╕реЗрдЯ рд░рдВрдЧ = $ рд╕реВрдЪреА ( рд░рдВрдЧ , 1 + $ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ ( $ рд╕реВрдЪреА ) ( рд░рдВрдЧ )
рд╕реЗрдЯ рд▓рдВрдмрд╛рдИ = 10 + $ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ (90)
рд╕реЗрдЯ рд╡рдЬрди = (10+ $ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ (40)) * 100
; рд░рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рдПрдВ
ix рдХрд░реЛ ред рд╕реЗрдЯрдмрд┐рдЯ рдореИрдк ( рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ , "рд╕реА" , рд░рдВрдЧ , 1)
; рд╡рдЬрди рдФрд░ рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП рд╣рдо рдмреАрдЯрд▓ рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ
ix рдХрд░реЛ ред рд╕реЗрдЯрдмреАрдЯреНрд▓рд┐рд╕ ( рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ , "рдПрд▓" , рд▓рдВрдмрд╛рдИ )
ix рдХрд░реЛ ред рд╕реЗрдЯрдмрд┐рдЯреНрд▓рд┐рд╕ ( рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ , "рдбрдмреНрд▓реНрдпреВ" , рд╡рдЬрди )
; рдкрд░реАрдХреНрд╖рдг рдирдореВрдиреЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ), рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ
; 45-70 рд╕реЗрдореА рд▓рдВрдмреЗ рдХрд╛рд▓реЗ рдФрд░ рдкреАрд▓реЗ рдордЧрд░рдордЪреНрдЫреЛрдВ рдХрд╛ рдХреБрд▓ рд╡рдЬрди
; рд╕рдореНрдорд┐рд▓рд┐рдд
рд╕реЗрдЯ : (( рд░рдВрдЧ = "рдХрд╛рд▓рд╛" )! ( рд░рдВрдЧ = "рдкреАрд▓рд╛" )) рдФрд░ ( рд▓рдВрдмрд╛рдИ '<45) рдФрд░ ( рд▓рдВрдмрд╛рдИ '> 70) m = m + рд╡рдЬрди
}
рдпрджрд┐ $ рд╕реЙрд░реНрдЯ (^ рдмреАрдПрдордЖрдИ)
m _ "рдЧреНрд░рд╛рдореЛ рдХреБрд▓" рд▓рд┐рдЦреЗрдВ,!
ix рдорд╛рд░рдирд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛
}
/// рдкрд░реАрдХреНрд╖рдг рдирдореВрдирд╛
ClassMethod TestGetData ()
{
рд╕реЗрдЯ ix = .. % рдирдпрд╛ ()
ix рд╕реЗрдЯ рдХрд░реЗрдВ ред BMGLOB = $ рдирд╛рдо (^ BMI)
рд╕реЗрдЯ b = .. GetNewTMP (), b1 = .. GetNewTMP ()
ix рдХрд░реЛ ред BMEq ( b , ix ред GetBitMapName ( "C" ), "рдмреНрд▓реИрдХ"
ix рдХрд░реЛ ред BMEq ( b1 , ix ред GetBitMapName ( "C" ), "рдпреЗрд▓реЛ" )
ix рдХрд░реЛ ред рдмреАрдПрдордУрдЖрд░ ( рдмреА , рдмреА 1 )
ix рдХрд░реЛ ред BSGeLe ( b1 , ix ред GetBitMapName ( "L" , 1), 45.70)
ix рдХрд░реЛ ред рдмреАрдПрдордПрдВрдб ( рдмреА , рдмреА 1 )
set count = ix ред BMCount ( b )
рдЧрд┐рдирддреА _ "рдЖрдЗрдЯрдо рдЪрдпрдирд┐рдд" рд▓рд┐рдЦреЗрдВ;
; рдЪрдпрдирд┐рдд рдХрд╛ рдХреБрд▓ рд╡рдЬрди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ
ix рд▓рд┐рдЦреЗрдВ ред BSSum ( ix ред GetBitMapName ( "W" , 1), b ) _ "рдХреБрд▓ рдЧреНрд░рд╛рдо"!
рдХрд░реЛ .. KillAllTMP ()
ix рдорд╛рд░рдирд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛
}
}
рд╕рдВрд▓рдЧреНрди рдХреЛрдб рдореЗрдВ рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬреЛрдбрд╝рддреЛрдбрд╝реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реБрдП, рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рд░реВрдЯреАрдиреЛрдВ рдореЗрдВ рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рдмрд┐рдЯрдХреНрд▓реИрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рднрдВрдбрд╛рд░рдг рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдореЛ рд╡рд┐рдзрд┐ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рд╕рдореВрд╣реАрдХрд░рдг рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдореВрд▓реНрдп - рд░рд╛рд╢рд┐ - рдмрд╛рдж рдХреЗ рдкрд░реАрдХреНрд╖рдг рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ:
do ## рд╡рд░реНрдЧ ( User.BitMapSlice )ред рдЖрдмрд╛рдж (1,000,000) ; рдорд┐рд▓рд┐рдпрди рд░рд┐рдХреЙрд░реНрдбрдФрд░ рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐, рдЬрд┐рд╕рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╣реА рд╕рдореВрд╣реАрдХрд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ:
do ## рд╡рд░реНрдЧ ( User.BitMapSlice )ред рдЯреЗрд╕реНрдЯрдЧреЗрдЯрдбрд╛рдЯрд╛ ()рдЖрдк рдкрд░рд┐рдгрд╛рдо рдФрд░ рдЙрд╕ рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП рд╕рдордп рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд COS рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдЖрджреА рд╣реИрдВ, рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ Cach├й Studio, рдЬреЛ рд╕рдВрд╕реНрдХрд░рдг 5.2 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЖрдкрдХреЛ
рдЖрд╕рд╛рдиреА рд╕реЗ рдЪрдпрдирд┐рдд рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рдореЗрдВ
рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ -
Ctrl-Shift-E рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд -
Ctrl-E ред
рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ, рдПрдХ рд╕реВрдХреНрд╖реНрдорддрд╛ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред Ache рдХреИрд╢реЗрдЯреЗрдореНрдк рдпрд╛ es рдореЗрдЯреЗрдореНрдк рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЧреНрд▓реЛрдмрд▓реНрд╕ рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордзреНрдпрд╡рд░реНрддреА рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред
рдРрд╕реЗ рдЧреНрд▓реЛрдмрд▓реНрд╕ рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ CACHETEMP рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╡реЗ рд▓реЙрдЧ рдирд╣реАрдВ рд╣реИрдВ , рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд╕рд╛рде рднреА рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рд╣реИред рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдЕрдиреНрдп рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рднреА рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА 16-рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдореЗрдореЛрд░реА рд╕реАрдорд╛ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛редрдЗрдЯреИрд▓рд┐рдХреНрд╕ рдореЗрдВ рдЬреЛрд░ рдХреИрдЪ рдбреАрдмреАрдПрдордПрд╕ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ:- рдмрдбрд╝реЗ рд╕реНрдерд╛рдиреАрдп рдПрд░реЗ
- рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдореЗрдореЛрд░реА
- рдЕрд╕реАрдорд┐рдд рд╕реНрдерд╛рдиреАрдп рд╕рд░рдгрд┐рдпрд╛рдБ
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХреЛрдб рджреАрдкрд╕реА рдЙрддреНрдкрд╛рдж рдХреА рдкреНрд░рд╕реНрддреБрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ InterSystems рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХреЗ Ortofact рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдореЗрдВ MacovaSoft рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред