Cleanup: ID usercount: moar checks and factorization. No change in behavior expected.

This commit is contained in:
Bastien Montagne 2015-11-10 16:20:28 +01:00
parent 3b38fd6bf9
commit d9c89f175f
2 changed files with 11 additions and 4 deletions

View File

@ -163,8 +163,13 @@ void id_lib_extern(ID *id)
void id_us_ensure_real(ID *id)
{
if (id) {
if (ID_REAL_USERS(id) <= 0) {
id->us = MAX2(id->us, 0) + 1;
const int limit = ID_FAKE_USERS(id);
if (id->us <= limit) {
if (id->us < limit) {
printf("ID user count error: %s (from '%s')\n", id->name, id->lib ? id->lib->filepath : "[Main]");
BLI_assert(0);
}
id->us = limit + 1;
}
}
}
@ -172,6 +177,7 @@ void id_us_ensure_real(ID *id)
void id_us_plus(ID *id)
{
if (id) {
BLI_assert(id->us >= 0);
id->us++;
if (id->flag & LIB_INDIRECT) {
id->flag -= LIB_INDIRECT;
@ -184,7 +190,7 @@ void id_us_plus(ID *id)
void id_us_min(ID *id)
{
if (id) {
const int limit = (id->flag & LIB_FAKEUSER) ? 1 : 0;
const int limit = ID_FAKE_USERS(id);
if (id->us <= limit) {
printf("ID user decrement error: %s (from '%s')\n", id->name, id->lib ? id->lib->filepath : "[Main]");
BLI_assert(0);

View File

@ -254,7 +254,8 @@ typedef struct PreviewImage {
/* fluidsim Ipo */
#define ID_FLUIDSIM MAKE_ID2('F', 'S')
#define ID_REAL_USERS(id) (((ID *)id)->us - ((((ID *)id)->flag & LIB_FAKEUSER) ? 1 : 0))
#define ID_FAKE_USERS(id) ((((ID *)id)->flag & LIB_FAKEUSER) ? 1 : 0)
#define ID_REAL_USERS(id) (((ID *)id)->us - ID_FAKE_USERS(id))
#define ID_CHECK_UNDO(id) ((GS((id)->name) != ID_SCR) && (GS((id)->name) != ID_WM))