pike.git / lib / modules / Array.pmod

version» Context lines:

pike.git/lib/modules/Array.pmod:452:   // " x=%d l=%d:%d r=%d:%d \n",@res[-1],x,l,lpos,r,rpos));       rpos+=x;    lpos+=x;    n+=x;    }       return transpose(res);   }    - // sort with care of numerical sort: - // "abc4def" before "abc30def" -  - int dwim_sort_func(string a0,string b0) + //! sort with care of numerical sort: + //! @tt{"abc4def"@} before @tt{"abc30def"@}. + int dwim_sort_func(string a, string b)   { -  +  if (a==b) return 0; +     string a2="",b2="";    int a1,b1; -  sscanf(a0,"%s%d%s",a0,a1,a2); -  sscanf(b0,"%s%d%s",b0,b1,b2); -  if (a0>b0) return 1; -  if (a0<b0) return 0; +  sscanf(a, "%s%d%s", a, a1, a2); +  sscanf(b, "%s%d%s", b, b1, b2); +  if (a > b) return 1; +  if (a < b) return 0;    if (a1>b1) return 1;    if (a1<b1) return 0;    if (a2==b2) return 0;    return dwim_sort_func(a2,b2);   }    - // sort with no notice of contents in paranthesis, - // no care of case either -  + //! sort with no notice of contents in paranthesis, + //! no care of case either   int lyskom_sort_func(string a,string b)   {    string a0=a,b0=b;    a=replace(lower_case(a),"][\\}{|"/1,"åäöåäö"/1);    b=replace(lower_case(b),"][\\}{|"/1,"åäöåäö"/1);       while (sscanf(a0=a,"%*[ \t](%*[^)])%*[ \t]%s",a)==4 && a0!=a);    while (sscanf(b0=b,"%*[ \t](%*[^)])%*[ \t]%s",b)==4 && b0!=b);    a0=b0="";    sscanf(a,"%[^ \t]%*[ \t](%*[^)])%*[ \t]%s",a,a0);    sscanf(b,"%[^ \t]%*[ \t](%*[^)])%*[ \t]%s",b,b0);    if (a>b) return 1;    if (a<b) return 0;    if (a0==b0) return 0;    return lyskom_sort_func(a0,b0);   }    -  + //! Flatten a multi-dimensional array to a one-dimensional array.   array flatten(array a)   {    array ret=({});    foreach(a, mixed b) ret+=arrayp(b)?flatten([array]b):({b});    return ret;   }    -  + //! Sum the elements of an array   mixed sum(array a)   {   // 1000 is a safe stack limit    if (sizeof(a)<1000)    return `+(@a);    else    {    mixed mem=`+(@a[..999]);    int j=1000;    array v;    while (sizeof(v=a[j..j+999]))    mem=`+(mem,@v),j+=1000;    return mem;    }   }