Annotation of ports/graphics/cuneiform/patches/patch-cuneiform_src_Kern_rbal_src_statsearchbl_cpp, Revision 1.1
1.1 ! yason 1: $OpenBSD$
! 2: --- cuneiform_src/Kern/rbal/src/statsearchbl.cpp.orig Sat Jul 3 17:55:39 2010
! 3: +++ cuneiform_src/Kern/rbal/src/statsearchbl.cpp Wed Jul 7 13:28:21 2010
! 4: @@ -56,27 +56,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
! 5:
! 6: // StatSearchBL.cpp : implementation file
! 7: //
! 8: +#include <malloc.h>
! 9: #include <memory.h>
! 10: /*#include <windows.h>
! 11: #include <Winbase.h>*/
! 12: -#include <string.h>
! 13: #include <stdlib.h>
! 14: +#include <string.h>
! 15:
! 16: -#if defined(__APPLE__) && defined(__MACH__)
! 17: -#include <malloc/malloc.h>
! 18: -#define malloc_usable_size(a) malloc_size(a)
! 19: -
! 20: -#elif defined(__FreeBSD__)
! 21: -#include <malloc_np.h>
! 22: -
! 23: -#elif defined(WIN32)
! 24: -#include <malloc.h>
! 25: -#define malloc_usable_size(a) _msize(a)
! 26: -
! 27: -#else
! 28: -#include <malloc.h>
! 29: -#endif
! 30: -
! 31: //#include "puma.h"
! 32: #include "dpuma.h"
! 33: #include "statsearchbl.h"
! 34: @@ -94,15 +80,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
! 35:
! 36: int16_t minrow;
! 37:
! 38: -void stat_def_b3_b4(CSTR_line line, CSTR_attr *p_attr,
! 39: - int16_t *p_Y2Arr, int16_t *p_FreqY2Arr, int16_t *Ns3, int16_t *Ns4)
! 40: +void stat_def_b3_b4(CSTR_line line, CSTR_attr *p_attr, int16_t sz_Y2Arr, int16_t *p_Y2Arr,
! 41: + int16_t sz_FreqY2Arr, int16_t *p_FreqY2Arr, int16_t *Ns3, int16_t *Ns4)
! 42: {
! 43: if(line == 0 || p_attr == NULL || p_Y2Arr == NULL || p_FreqY2Arr == NULL) return;
! 44:
! 45: ROW_STRUCT row_str;
! 46:
! 47: - int16_t sz_FreqY2Arr = malloc_usable_size(p_FreqY2Arr) / sizeof(int16_t);
! 48: - int16_t sz_Y2Arr = malloc_usable_size(p_Y2Arr) / sizeof(int16_t);
! 49: // if(p_attr->number == 39) DebugBreak();// && p_attr->language == 0
! 50:
! 51: //главный максимум
! 52: @@ -113,7 +97,7 @@ void stat_def_b3_b4(CSTR_line line, CSTR_attr *p_attr,
! 53: row_str.ValGM = p_FreqY2Arr[max_FreqY2Arr];
! 54:
! 55: //правый максимум (относительно главного максимума)
! 56: - int16_t right_diff = stat_Right_diff_from_max(p_FreqY2Arr, max_FreqY2Arr);
! 57: + int16_t right_diff = stat_Right_diff_from_max(sz_FreqY2Arr, p_FreqY2Arr, max_FreqY2Arr);
! 58:
! 59: right_diff = MAX(3, right_diff);
! 60:
! 61: @@ -1232,15 +1216,16 @@ Bool stat_interp_bsl_by_b4(CSTR_line line, int16_t ln_
! 62: return TRUE;
! 63: }
! 64:
! 65: -void stat_def_b1_b2(CSTR_line line, CSTR_attr *p_attr, int16_t *p_Y1Arr,
! 66: - int16_t *p_Y2Arr, int16_t *p_FreqY1Arr, int16_t *Ns1, int16_t *Ns2)
! 67: +void stat_def_b1_b2(CSTR_line line, CSTR_attr *p_attr,
! 68: + int16_t sz_Y1Arr, int16_t *p_Y1Arr,
! 69: + int16_t sz_Y2Arr, int16_t *p_Y2Arr,
! 70: + int16_t sz_FreqY1Arr, int16_t *p_FreqY1Arr,
! 71: + int16_t *Ns1, int16_t *Ns2)
! 72: {
! 73: if(line == 0 || p_attr == NULL || p_Y1Arr == NULL ||p_Y2Arr == NULL || p_FreqY1Arr == NULL) return;
! 74:
! 75: ROW_STRUCT row_str;
! 76:
! 77: - int16_t sz_FreqY1Arr = malloc_usable_size(p_FreqY1Arr) / sizeof(int16_t);
! 78: - int16_t sz_Y1Arr = malloc_usable_size(p_Y1Arr) / sizeof(int16_t);
! 79: int16_t min_Y1Arr = p_Y1Arr[stat_index_GlobMin(p_Y1Arr, sz_Y1Arr)];
! 80:
! 81: // if(p_attr->number == 161) DebugBreak(); // && p_attr->language == 0
! 82: @@ -1303,7 +1288,7 @@ void stat_def_b1_b2(CSTR_line line, CSTR_attr *p_attr,
! 83: }
! 84:
! 85: //правый максимум
! 86: - int16_t right_diff = stat_Right_diff_from_max(p_FreqY1Arr, max_FreqY1Arr);
! 87: + int16_t right_diff = stat_Right_diff_from_max(sz_FreqY1Arr, p_FreqY1Arr, max_FreqY1Arr);
! 88: right_diff = MAX(right_diff, 3);
! 89:
! 90: int16_t rightMax_FreqY1Arr = stat_index_RightLocMax(p_FreqY1Arr, sz_FreqY1Arr, max_FreqY1Arr + right_diff);
! 91: @@ -1420,13 +1405,10 @@ int16_t stat_LineLength(CSTR_line line)
! 92: return i;
! 93: }
! 94:
! 95: -void stat_FormArrays(CSTR_line line, int16_t row, int16_t *p_Y1Array, int16_t *p_Y2Array)
! 96: +void stat_FormArrays(CSTR_line line, int16_t row, int16_t sz_Y1Array, int16_t *p_Y1Array,
! 97: + int16_t sz_Y2Array, int16_t *p_Y2Array)
! 98: {
! 99: if(p_Y1Array == NULL || p_Y2Array == NULL) return;
! 100: -
! 101: - int16_t sz_Y1Array = malloc_usable_size(p_Y1Array) / sizeof(int16_t);
! 102: - int16_t sz_Y2Array = malloc_usable_size(p_Y2Array) / sizeof(int16_t);
! 103: -
! 104: if(sz_Y1Array == 0 || sz_Y2Array == 0) return;
! 105:
! 106: CSTR_attr line_attr;
! 107: @@ -1485,28 +1467,24 @@ void stat_FormArrays(CSTR_line line, int16_t row, int1
! 108: void StatSearchBL(CSTR_line line, CSTR_attr *p_attr,
! 109: int16_t *Ns1, int16_t *Ns2, int16_t *Ns3, int16_t *Ns4)
! 110: {
! 111: - int16_t n = stat_LineLength(line); //malloc_usable_size(pY1Array) / sizeof(int16_t) - размерность pY1Array и pY2Array
! 112: - int16_t *pY1Array = (int16_t *) malloc(sizeof(int16_t) * n);
! 113: - int16_t *pY2Array = (int16_t *) malloc(sizeof(int16_t) * n);
! 114: + int16_t n = stat_LineLength(line);
! 115: + int16_t *pY1Array = (int16_t *)calloc(n, sizeof(int16_t));
! 116: + int16_t *pY2Array = (int16_t *)calloc(n, sizeof(int16_t));
! 117:
! 118: if(pY2Array == NULL || pY1Array == NULL)
! 119: {
! 120: - p_attr = (CSTR_attr *) NULL;
! 121: + free(pY1Array);
! 122: + free(pY2Array);
! 123: return;
! 124: }
! 125:
! 126: // DebugBreak();
! 127: - stat_FormArrays(line, p_attr->row, pY1Array, pY2Array);
! 128: + stat_FormArrays(line, p_attr->row, n, pY1Array, n, pY2Array);
! 129:
! 130: - if(pY1Array == NULL || pY2Array == NULL)
! 131: - {
! 132: - p_attr = (CSTR_attr *) NULL;
! 133: - return;
! 134: - }
! 135: -
! 136: //значения гистограммы
! 137: - int16_t *pFrequencyY1Array = stat_gistoGramma(pY1Array, n);
! 138: - int16_t *pFrequencyY2Array = stat_gistoGramma(pY2Array, n);
! 139: + int16_t nfreq1 = n, nfreq2 = n;
! 140: + int16_t *pFrequencyY1Array = stat_gistoGramma(pY1Array, &nfreq1);
! 141: + int16_t *pFrequencyY2Array = stat_gistoGramma(pY2Array, &nfreq2);
! 142:
! 143: if(pFrequencyY1Array != NULL && pFrequencyY2Array != NULL)
! 144: {
! 145: @@ -1517,29 +1495,31 @@ void StatSearchBL(CSTR_line line, CSTR_attr *p_attr,
! 146: if(line == 0 || p_attr->number == 0 || p_attr->number > CSTR_GetMaxNumber())
! 147: {
! 148: p_attr = (CSTR_attr *) NULL;
! 149: - return;
! 150: + goto cleanup;
! 151: }
! 152:
! 153: //собственно поиск БЛ
! 154: - stat_def_b3_b4(line, p_attr, pY2Array, pFrequencyY2Array, Ns3, Ns4);
! 155: - stat_def_b1_b2(line, p_attr, pY1Array,
! 156: - pY2Array, pFrequencyY1Array, Ns1, Ns2);
! 157: + stat_def_b3_b4(line, p_attr, n, pY2Array, nfreq2, pFrequencyY2Array,
! 158: + Ns3, Ns4);
! 159: + stat_def_b1_b2(line, p_attr, n, pY1Array, n, pY2Array,
! 160: + nfreq1, pFrequencyY1Array, Ns1, Ns2);
! 161: stat_def_imaginary_bl(p_attr, Ns1, Ns2, Ns4);
! 162: }
! 163: else
! 164: {
! 165: p_attr = (CSTR_attr *) NULL;
! 166: - return;
! 167: + goto cleanup;
! 168: }
! 169:
! 170: free(pFrequencyY1Array);
! 171: - free(pY1Array);
! 172: -
! 173: free(pFrequencyY2Array);
! 174: - free(pY2Array);
! 175: }
! 176: else
! 177: p_attr = (CSTR_attr *) NULL;
! 178: +
! 179: +cleanup:
! 180: + free(pY1Array);
! 181: + free(pY2Array);
! 182: }
! 183:
! 184: int16_t stat_Hypothesis(int32_t line_number, int16_t diff_b3_bsl)
! 185: @@ -1550,7 +1530,8 @@ int16_t stat_Hypothesis(int32_t line_number, int16_t d
! 186: {
! 187: int32_t line_start = MAX(1, line_number - LNCNST);
! 188:
! 189: - CSTR_attr *pCSTR_attrArray = (CSTR_attr *)malloc((line_number - line_start) * sizeof(CSTR_attr));
! 190: + CSTR_attr *pCSTR_attrArray = (CSTR_attr *)calloc(line_number - line_start,
! 191: + sizeof(CSTR_attr));
! 192:
! 193: if(pCSTR_attrArray != NULL)
! 194: {
! 195: @@ -1586,10 +1567,8 @@ Bool stat_FormCSTR_attrArray(int32_t line_start, int32
! 196: {
! 197: if(line_stop > CSTR_GetMaxNumber() || pCSTR_attrArray == NULL) return FALSE;
! 198:
! 199: - int16_t sz = malloc_usable_size(pCSTR_attrArray) / sizeof(CSTR_attr);
! 200: - if(sz < line_stop - line_start) return FALSE;
! 201: -
! 202: - for(int32_t l = 0; l < line_stop - line_start; l++)
! 203: + int16_t sz = line_stop - line_start;
! 204: + for(int32_t l = 0; l < sz; l++)
! 205: {
! 206: CSTR_attr m_attr;
! 207:
! 208: @@ -1675,8 +1654,7 @@ int16_t stat_Mode_diff_b2_b1(int32_t line_number, int1
! 209:
! 210: if(pCSTR_attrArray != NULL)
! 211: {
! 212: - int16_t *p_diff = (int16_t *)malloc((line_number - line_start) * sizeof(int16_t));
! 213: -
! 214: + int16_t *p_diff = (int16_t *)calloc(line_number - line_start, sizeof(int16_t));
! 215: if(p_diff != NULL)
! 216: {
! 217: Bool bRet = stat_FormCSTR_attrArray(line_start, line_number, pCSTR_attrArray);
! 218: @@ -1701,10 +1679,10 @@ int16_t stat_Mode_diff_b2_b1(int32_t line_number, int1
! 219: if(jCount !=0)
! 220: {
! 221: p_diff = (int16_t *) realloc(p_diff, jCount * sizeof(int16_t));
! 222: - int16_t *pFrequencyArray = stat_gistoGramma(p_diff, jCount);
! 223: + int16_t szFrequencyArray = jCount;
! 224: + int16_t *pFrequencyArray = stat_gistoGramma(p_diff, &szFrequencyArray);
! 225: if(pFrequencyArray != NULL)
! 226: {
! 227: - int16_t szFrequencyArray = malloc_usable_size(pFrequencyArray) / sizeof(int16_t);
! 228: int16_t minArray = p_diff[stat_index_GlobMin(p_diff,jCount)];
! 229: int16_t maxFrequencyArray = stat_index_GlobMax(pFrequencyArray,szFrequencyArray, G);
! 230: if(szFrequencyArray != 0) free(pFrequencyArray);
! 231: @@ -1758,9 +1736,8 @@ int16_t stat_Left_diff_from_max(int16_t *p_FrequencyAr
! 232: return jret;
! 233: }
! 234:
! 235: -int16_t stat_Right_diff_from_max(int16_t *p_FrequencyArray, int16_t max_FrequencyArray)
! 236: +int16_t stat_Right_diff_from_max(int16_t sz, int16_t *p_FrequencyArray, int16_t max_FrequencyArray)
! 237: {
! 238: - int16_t sz = malloc_usable_size(p_FrequencyArray) / sizeof(int16_t);
! 239: int16_t jret = sz - max_FrequencyArray + 1;
! 240: int16_t derivative = 0;
! 241: int16_t i;
! 242: @@ -1804,7 +1781,7 @@ int16_t stat_Mode_diff_b3_b4(int32_t line_number, int1
! 243:
! 244: if(pCSTR_attrArray != NULL)
! 245: {
! 246: - int16_t *p_diff = (int16_t *)malloc((line_number - line_start) * sizeof(int16_t));
! 247: + int16_t *p_diff = (int16_t *)calloc(line_number - line_start, sizeof(int16_t));
! 248:
! 249: if(p_diff != NULL)
! 250: {
! 251: @@ -1830,10 +1807,10 @@ int16_t stat_Mode_diff_b3_b4(int32_t line_number, int1
! 252: if(jCount !=0)
! 253: {
! 254: p_diff = (int16_t *) realloc(p_diff, jCount * sizeof(int16_t));
! 255: - int16_t *pFrequencyArray = stat_gistoGramma(p_diff, jCount);
! 256: + int16_t szFrequencyArray = jCount;
! 257: + int16_t *pFrequencyArray = stat_gistoGramma(p_diff, &szFrequencyArray);
! 258: if(pFrequencyArray != NULL)
! 259: {
! 260: - int16_t szFrequencyArray = malloc_usable_size(pFrequencyArray) / sizeof(int16_t);
! 261: int16_t minArray = p_diff[stat_index_GlobMin(p_diff,jCount)];
! 262: int16_t maxFrequencyArray = stat_index_GlobMax(pFrequencyArray,szFrequencyArray, G);
! 263: if(szFrequencyArray != 0) free(pFrequencyArray);
! 264: @@ -1868,7 +1845,7 @@ int16_t stat_Mode_diff_b2_b3(int32_t line_number, int1
! 265:
! 266: if(pCSTR_attrArray != NULL)
! 267: {
! 268: - int16_t *p_diff = (int16_t *)malloc((line_number - line_start) * sizeof(int16_t));
! 269: + int16_t *p_diff = (int16_t *)calloc(line_number - line_start, sizeof(int16_t));
! 270:
! 271: if(p_diff != NULL)
! 272: {
! 273: @@ -1899,10 +1876,10 @@ int16_t stat_Mode_diff_b2_b3(int32_t line_number, int1
! 274: if(jCount !=0)
! 275: {
! 276: p_diff = (int16_t *) realloc(p_diff, jCount * sizeof(int16_t));
! 277: - int16_t *pFrequencyArray = stat_gistoGramma(p_diff, jCount);
! 278: + int16_t szFrequencyArray = jCount;
! 279: + int16_t *pFrequencyArray = stat_gistoGramma(p_diff, &szFrequencyArray);
! 280: if(pFrequencyArray != NULL)
! 281: {
! 282: - int16_t szFrequencyArray = malloc_usable_size(pFrequencyArray) / sizeof(int16_t);
! 283: int16_t minArray = p_diff[stat_index_GlobMin(p_diff,jCount)];
! 284: int16_t maxFrequencyArray = stat_index_GlobMax(pFrequencyArray,szFrequencyArray, G);
! 285: if(szFrequencyArray != 0) free(pFrequencyArray);
CVSweb