فهرست منبع

zmiana funkcji na template

a.binder 9 سال پیش
والد
کامیت
1e7a8c0233
2فایلهای تغییر یافته به همراه66 افزوده شده و 5 حذف شده
  1. 52 0
      SE/dev/php-cli/PE_wariant_bit_table.xsl
  2. 14 5
      SE/dev/php-cli/edge_paths_with_PE_controll.xsl

+ 52 - 0
SE/dev/php-cli/PE_wariant_bit_table.xsl

@@ -66,6 +66,58 @@
     </xsl:function>
     
     
+    <xsl:template  name="bp:next_bit_max">
+        <xsl:param name="variant" required="yes"/>
+        <xsl:param name="bit_limit" required="yes"/> <!-- like 6 -->
+        <xsl:param name="max_possible_bit" required="yes"/><!-- like 1111111 -->
+        <xsl:param name="loop" required="no"/>
+        <!--<xsl:message>#80 f. v:<xsl:value-of select="$variant"/>;$bit_limit=<xsl:value-of select="$bit_limit"/>;$max_possible_bit=<xsl:value-of select="$max_possible_bit"/>; $loop=<xsl:value-of select="$loop"/>;</xsl:message>-->
+        <xsl:variable name="variant" select="number($variant) + 1"/><!-- dodajemy 1 aby sprawdzic jak wyglada -->
+        <xsl:variable name="curr_bit" select="bp:decimalToBit($variant)"/>
+        <xsl:variable name="digits">
+            <xsl:for-each select="1 to string-length($curr_bit)">
+                <xsl:if test="substring($curr_bit,.,1) = '1'">
+                    <xsl:value-of select="number(1)"/>
+                </xsl:if>
+            </xsl:for-each>
+        </xsl:variable>
+        <xsl:variable name="cur_bit_len" select=" string-length($digits)"/>
+        <xsl:choose>
+            <xsl:when test=" string-length($max_possible_bit)&gt; string-length($curr_bit)">
+                <xsl:value-of select=" $variant - 1 "/>
+            </xsl:when>
+            
+            <xsl:when test="number($loop) &gt; 5000012">
+                <!--<xsl:message>#91 loop:<xsl:value-of select="$loop"/>; hit returning $variant=<xsl:value-of select="$variant"/>; $curr_bit=<xsl:value-of select="$curr_bit"/>;</xsl:message>-->
+                <xsl:value-of select="$variant"/>
+            </xsl:when>
+            <xsl:when test="$curr_bit = $max_possible_bit">
+                <!--<xsl:message>#90 brak kolejnych wariantow $variant=<xsl:value-of select="$variant"/>;$bit_limit=<xsl:value-of select="$bit_limit"/>; $curr_bit=<xsl:value-of select="$curr_bit"/></xsl:message>-->
+                <xsl:value-of select="$variant"/>
+            </xsl:when>
+            <xsl:when test="number($cur_bit_len) &lt;=  number($bit_limit)">
+                <!--<xsl:variable name="next_bit" select="bp:decimalToBit($variant+1)"/>-->
+                <!--<xsl:message>#104 next <xsl:value-of select="$variant"/></xsl:message>-->
+                <xsl:value-of select="$variant"/>
+            </xsl:when>
+            
+            <xsl:when test="number($cur_bit_len) &gt;  number($bit_limit)">
+                <!--<xsl:variable name="next_bit" select="bp:decimalToBit($variant+1)"/>-->
+                <!--<xsl:message>#104 next <xsl:value-of select="$variant"/></xsl:message>-->
+                <xsl:call-template name="bp:next_bit_max">
+                    <xsl:with-param name="variant" select="$variant"/>
+                    <xsl:with-param name="bit_limit" select="$bit_limit"/> <!-- like 6 -->
+                    <xsl:with-param name="max_possible_bit" select="$max_possible_bit"/><!-- like 1111111 -->
+                    <xsl:with-param name="loop" select="$loop"/>
+                </xsl:call-template>
+            </xsl:when>
+            <!--<xsl:otherwise>
+                <xsl:message terminate="yes">#107 f. else $variant=<xsl:value-of select="$variant"/>; $curr_bit=<xsl:value-of select="$curr_bit"/>; $digits=<xsl:value-of select="$digits"/>;</xsl:message>
+                <xsl:value-of select="$variant"/></xsl:otherwise>-->
+        </xsl:choose>
+    </xsl:template>
+    
+    
     <xsl:function name="bp:next_bit_max">
        <!-- for ($i = 1; $i < 1024; $i++) {
                 $bin = decbin($i);

+ 14 - 5
SE/dev/php-cli/edge_paths_with_PE_controll.xsl

@@ -290,14 +290,13 @@
                 <xsl:variable name="elements_cnt" select="count($EconomicDistanceCut2/EconomicDistanceCut2/distance2[number(@point_count) &gt; number(0) ])"/>
                 <xsl:variable name="cost_dist_Cnt" select="count($EconomicDistanceCut2/EconomicDistanceCut2/distance2[ ( number(@cost_dist) &gt; number($PE_Price) ) or number(@len) &gt; ( number($PE_Price) div number($Cable_Price) )  ])"/>
                 <xsl:variable name="bit_max" select="round($len  div  ( $PE_Price div $Cable_Price ) + $cost_dist_Cnt  ) + 1"/>
-                
                 <xsl:choose>
                     <xsl:when test="number($bit_max) &lt; number(15) "> <!-- do przyjecia przez procesor kombinacji-->
                         <xsl:message>#296 max_combinate_groups_elements_for_group  number($bit_max=<xsl:value-of select="$bit_max"/>) &lt; number(15)</xsl:message>
                         <xsl:choose>
-                            <xsl:when test="number($elements_cnt) &gt; 20">
+                            <xsl:when test="number($elements_cnt) &gt; 40">
                                 <xsl:message>#297 narzucam fixed liczbe 40 z uwagi na $bit_max=<xsl:value-of select="$bit_max"/> &lt; 15 ilosc max = $elements_cnt=<xsl:value-of select="$elements_cnt"/>; </xsl:message>
-                                <xsl:value-of select="20"/>
+                                <xsl:value-of select="40"/>
                             </xsl:when>
                             <xsl:otherwise>
                                 <xsl:message>#302 max_combinate_groups_elements_for_group setting to current count - number($elements_cnt=<xsl:value-of select="$elements_cnt"/>); </xsl:message>
@@ -633,8 +632,18 @@
                             <xsl:value-of select="number($variant)"/>
                         </xsl:when>
                         <xsl:when test="number($max_bit) &gt; 0">
-                            <xsl:message>#80  try to find next $bit=<xsl:value-of select="$bit"/>; $max_possible_bit=<xsl:value-of select="$max_possible_bit"/>; $max_bit <xsl:value-of select="$max_bit"/> &gt;$elements_cnt=<xsl:value-of select="$elements_cnt"/>; in $variant=<xsl:value-of select="$variant"/>;</xsl:message>
-                            <xsl:variable name="variant_found" select="bp:next_bit_max(number($variant),$max_bit,$max_possible_bit,0)"/>
+                            <xsl:if test="$variant mod 64 = 0 ">
+                                <xsl:message>#80  try to find next $bit=<xsl:value-of select="$bit"/>; $max_possible_bit=<xsl:value-of select="$max_possible_bit"/>; $max_bit <xsl:value-of select="$max_bit"/> &gt;$elements_cnt=<xsl:value-of select="$elements_cnt"/>; in $variant=<xsl:value-of select="$variant"/>;</xsl:message>
+                            </xsl:if>
+                            <!--<xsl:variable name="variant_found" select="bp:next_bit_max(number($variant),$max_bit,$max_possible_bit,0)"/>-->
+                            <xsl:variable name="variant_found">
+                                <xsl:call-template name="bp:next_bit_max">
+                                    <xsl:with-param name="variant" select="$variant"/>
+                                    <xsl:with-param name="bit_limit" select="$max_bit"/> <!-- like 6 -->
+                                    <xsl:with-param name="max_possible_bit" select="$max_possible_bit"/><!-- like 1111111 -->
+                                    <xsl:with-param name="loop" select="0"/>
+                                </xsl:call-template>
+                            </xsl:variable>
                             <xsl:value-of select="$variant_found"/>
                         </xsl:when>
                         <xsl:otherwise>