| 1 |
/*************************************************************************** |
/* SPDX-License-Identifier: GPL-3.0-or-later */ |
| 2 |
article_view_log.c - description |
/* |
| 3 |
------------------- |
* article_view_log |
| 4 |
Copyright : (C) 2004-2025 by Leaflet |
* - data persistence and query of article view log |
| 5 |
Email : leaflet@leafok.com |
* |
| 6 |
***************************************************************************/ |
* Copyright (C) 2004-2025 Leaflet <leaflet@leafok.com> |
| 7 |
|
*/ |
|
/*************************************************************************** |
|
|
* * |
|
|
* This program is free software; you can redistribute it and/or modify * |
|
|
* it under the terms of the GNU General Public License as published by * |
|
|
* the Free Software Foundation; either version 3 of the License, or * |
|
|
* (at your option) any later version. * |
|
|
* * |
|
|
***************************************************************************/ |
|
| 8 |
|
|
| 9 |
#include "article_view_log.h" |
#include "article_view_log.h" |
| 10 |
#include "common.h" |
#include "common.h" |
| 177 |
int32_t *aid_new; |
int32_t *aid_new; |
| 178 |
int aid_new_cnt; |
int aid_new_cnt; |
| 179 |
int i, j, k; |
int i, j, k; |
| 180 |
|
int len; |
| 181 |
|
|
| 182 |
if (p_view_log == NULL) |
if (p_view_log == NULL) |
| 183 |
{ |
{ |
| 218 |
} |
} |
| 219 |
} |
} |
| 220 |
|
|
| 221 |
memcpy(aid_new + k, p_view_log->aid_base + i, sizeof(int32_t) * (size_t)(p_view_log->aid_base_cnt - i)); |
len = p_view_log->aid_base_cnt - i; |
| 222 |
k += (p_view_log->aid_base_cnt - i); |
if (len > 0) |
| 223 |
memcpy(aid_new + k, p_view_log->aid_inc + j, sizeof(int32_t) * (size_t)(p_view_log->aid_inc_cnt - j)); |
{ |
| 224 |
k += (p_view_log->aid_inc_cnt - j); |
memcpy(aid_new + k, p_view_log->aid_base + i, |
| 225 |
|
sizeof(int32_t) * (size_t)len); |
| 226 |
|
k += len; |
| 227 |
|
} |
| 228 |
|
len = p_view_log->aid_inc_cnt - j; |
| 229 |
|
if (len > 0) |
| 230 |
|
{ |
| 231 |
|
memcpy(aid_new + k, p_view_log->aid_inc + j, |
| 232 |
|
sizeof(int32_t) * (size_t)len); |
| 233 |
|
k += len; |
| 234 |
|
} |
| 235 |
|
|
| 236 |
free(p_view_log->aid_base); |
free(p_view_log->aid_base); |
| 237 |
p_view_log->aid_base = aid_new; |
p_view_log->aid_base = aid_new; |
| 270 |
mid = (left + right) / 2; |
mid = (left + right) / 2; |
| 271 |
if (aid < (i == 0 ? p_view_log->aid_base[mid] : p_view_log->aid_inc[mid])) |
if (aid < (i == 0 ? p_view_log->aid_base[mid] : p_view_log->aid_inc[mid])) |
| 272 |
{ |
{ |
| 273 |
right = mid; |
right = mid - 1; |
| 274 |
} |
} |
| 275 |
else if (aid > (i == 0 ? p_view_log->aid_base[mid] : p_view_log->aid_inc[mid])) |
else if (aid > (i == 0 ? p_view_log->aid_base[mid] : p_view_log->aid_inc[mid])) |
| 276 |
{ |
{ |
| 319 |
mid = (left + right) / 2; |
mid = (left + right) / 2; |
| 320 |
if (aid < (i == 0 ? p_view_log->aid_base[mid] : p_view_log->aid_inc[mid])) |
if (aid < (i == 0 ? p_view_log->aid_base[mid] : p_view_log->aid_inc[mid])) |
| 321 |
{ |
{ |
| 322 |
right = mid; |
right = mid - 1; |
| 323 |
} |
} |
| 324 |
else if (aid > (i == 0 ? p_view_log->aid_base[mid] : p_view_log->aid_inc[mid])) |
else if (aid > (i == 0 ? p_view_log->aid_base[mid] : p_view_log->aid_inc[mid])) |
| 325 |
{ |
{ |
| 363 |
right = left + 1; |
right = left + 1; |
| 364 |
} |
} |
| 365 |
|
|
| 366 |
// for (i = p_view_log->aid_inc_cnt - 1; i >= right; i--) |
if (p_view_log->aid_inc_cnt > right) |
| 367 |
// { |
{ |
| 368 |
// p_view_log->aid_inc[i + 1] = p_view_log->aid_inc[i]; |
memmove(p_view_log->aid_inc + right + 1, |
| 369 |
// } |
p_view_log->aid_inc + right, |
| 370 |
memmove(p_view_log->aid_inc + right + 1, p_view_log->aid_inc + right, |
sizeof(int32_t) * (size_t)(p_view_log->aid_inc_cnt - right)); |
| 371 |
sizeof(int32_t) * (size_t)(p_view_log->aid_inc_cnt - right)); |
} |
| 372 |
|
|
| 373 |
p_view_log->aid_inc[right] = aid; |
p_view_log->aid_inc[right] = aid; |
| 374 |
(p_view_log->aid_inc_cnt)++; |
(p_view_log->aid_inc_cnt)++; |