Локальные переменные для визуальных утверждений NatvisC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Локальные переменные для визуальных утверждений Natvis

Сообщение Anonymous »

Я сейчас пишу визуализатор для типа даты в Natvis. Тип даты хранит секунды с 1970 года обычным путем Unix, но вы получаю год, месяц и день месяца, чрезвычайно длинный, если не использовать временные переменные. Я хотел бы иметь возможность хранить рабочие переменные, чтобы оценить визуализатор в здравом смысле. Возможно ли это?struct SLowResAbsoluteTime
{
SLowResAbsoluteTime() : mTime(0) { calcDOE(); }
SLowResAbsoluteTime(int year, SDate::EMonth m, SDate::EDayOfWeek day, UINT8 hour, UINT8 minute, UINT8 seconds);
SLowResAbsoluteTime(const SDate &date);
SLowResAbsoluteTime(unsigned long long time) : mTime(time) { calcDOE(); }
SLowResAbsoluteTime(const SLowResAbsoluteTime &other) : mTime(other.mTime) { calcDOE(); }

SDate getDate() const; //calculate date object from given time
UINT32 getHour() const;
UINT32 getMinutes() const;
UINT32 getSeconds() const;

bool operator < (const SLowResAbsoluteTime &other) const { return mTime < other.mTime; }
bool operator > (const SLowResAbsoluteTime &other) const { return mTime > other.mTime; }
bool operator = other.mTime; }
bool operator == (const SLowResAbsoluteTime &other) const { return mTime == other.mTime; }
bool operator != (const SLowResAbsoluteTime &other) const { return mTime != other.mTime; }
SLowResAbsoluteTime operator -(const SLowResAbsoluteTime &time) const { return SLowResAbsoluteTime(mTime - time.mTime); }
SLowResAbsoluteTime operator +(const SLowResAbsoluteTime &time) const { return SLowResAbsoluteTime(mTime + time.mTime); }
const SLowResAbsoluteTime &operator -=(const SLowResAbsoluteTime &time) { mTime -= time.mTime; return *this; }
const SLowResAbsoluteTime &operator +=(const SLowResAbsoluteTime &time) { mTime += time.mTime; return *this; }
unsigned long long mTime;
void invalidate() { mTime = -1; }
bool isValid() const {return mTime != UINT64(-1); }
operator unsigned long() const { return (long)mTime; }
void calcDOE();
#ifdef USING_DEBUG_TIMER_DOE
struct { UINT16 y; UINT8 m; UINT8 d; } mDOE;
#endif
};
< /code>

Обратите внимание на раздел 'using_debug_timer_doe'. Это рассчитывается так: < /p>

void SLowResAbsoluteTime::calcDOE()
{
#ifdef USING_DEBUG_TIMER_DOE
int ts = mTime / (60 * 60 * 24);
int z = ts + 719468;
int doe = (z - ((z >= 0 ? z : z - 146096) / 146097) * 146097);
int yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365; // [0, 399]
int era = (z >= 0 ? z : z - 146096) / 146097;
int y = (yoe) + era * 400;
int doy = doe - (365 * yoe + yoe / 4 - yoe / 100); // [0, 365]
int mp = (5 * doy + 2) / 153; // [0, 11]
int d = doy - (153 * mp + 2) / 5 + 1; // [1, 31]
int m = mp + (mp < 10 ? 3 : -9); // [1, 12]
mDOE.y = y + (m

и natvis для визуализации это: < /p>



{{time = { (mTime / (60 * 60)) % 24 }:{(mTime / 60) % 60}:{mTime % 60} } day-1970: {mTime / (60 * 60 * 24)} }


(int)mDOE.m
(int)mDOE.d-->
mTime




Подробнее здесь: https://stackoverflow.com/questions/613 ... statements
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»