Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6b0379a

Browse files
committed
把部分堆空间换成栈空间
1 parent f78cd5e commit 6b0379a

File tree

3 files changed

+67
-67
lines changed

3 files changed

+67
-67
lines changed

src/day.cpp

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ namespace sxtwl
88

99
void Day::checkSSQ()
1010
{
11-
if (!SSQPtr->ZQ.size() || this->d0 < SSQPtr->ZQ[0] || this->d0 >= SSQPtr->ZQ[24])
11+
if (!SSQPtr.ZQ.size() || this->d0 < SSQPtr.ZQ[0] || this->d0 >= SSQPtr.ZQ[24])
1212
{
13-
SSQPtr->calcY(this->d0);
13+
SSQPtr.calcY(this->d0);
1414
}
1515
}
1616

@@ -26,20 +26,20 @@ void Day::checkLunarData()
2626
}
2727
this->checkSSQ();
2828

29-
int mk = int2((this->d0 - SSQPtr->HS[0]) / 30);
30-
if (mk < 13 && SSQPtr->HS[mk + 1] <= this->d0)
29+
int mk = int2((this->d0 - SSQPtr.HS[0]) / 30);
30+
if (mk < 13 && SSQPtr.HS[mk + 1] <= this->d0)
3131
{
3232
mk++; //农历所在月的序数
3333
}
3434

35-
//if (this.d0 == SSQPtr->HS[mk]) { //月的信息
36-
this->Lmc = SSQPtr->ym[mk]; //月名称
37-
this->Ldn = SSQPtr->dx[mk]; //月大小
38-
this->Lleap = (SSQPtr->leap != 0 && SSQPtr->leap == mk); //闰状况
35+
//if (this.d0 == SSQPtr.HS[mk]) { //月的信息
36+
this->Lmc = SSQPtr.ym[mk]; //月名称
37+
this->Ldn = SSQPtr.dx[mk]; //月大小
38+
this->Lleap = (SSQPtr.leap != 0 && SSQPtr.leap == mk); //闰状况
3939
//}
4040

4141
// 阴历所处的日
42-
this->Ldi = this->d0 - SSQPtr->HS[mk];
42+
this->Ldi = this->d0 - SSQPtr.HS[mk];
4343
}
4444

4545
void Day::checkSolarData()
@@ -70,15 +70,15 @@ void Day::checkJQData()
7070

7171
//this->checkSSQ();
7272

73-
//int qk = int2((this->d0 - SSQPtr->ZQ[0] - 7) / 15.2184);
73+
//int qk = int2((this->d0 - SSQPtr.ZQ[0] - 7) / 15.2184);
7474
//////节气的取值范围是0-23
75-
//if (qk < 23 && this->d0 >= SSQPtr->ZQ[qk + 1])
75+
//if (qk < 23 && this->d0 >= SSQPtr.ZQ[qk + 1])
7676
//{
7777
// qk++;
7878
//}
7979

8080
//this->qk = -1;
81-
//if (this->d0 == SSQPtr->ZQ[qk])
81+
//if (this->d0 == SSQPtr.ZQ[qk])
8282
//{
8383
// this->qk = qk;
8484
//}
@@ -121,7 +121,7 @@ int Day::getLunarYear(bool chineseNewYearBoundary)
121121
if (this->Lyear == 0)
122122
{
123123
this->checkSSQ();
124-
long double D = SSQPtr->ZQ[3] + (this->d0 < SSQPtr->ZQ[3] ? -365 : 0) + 365.25 * 16 - 35; //以立春为界定纪年
124+
long double D = SSQPtr.ZQ[3] + (this->d0 < SSQPtr.ZQ[3] ? -365 : 0) + 365.25 * 16 - 35; //以立春为界定纪年
125125
this->Lyear = int2(D / 365.2422 + 0.5);
126126
}
127127
return this->Lyear + 1984;
@@ -130,12 +130,12 @@ int Day::getLunarYear(bool chineseNewYearBoundary)
130130
if (this->Lyear0 == 0)
131131
{
132132
this->checkSSQ();
133-
int D = SSQPtr->HS[2]; //一般第3个月为春节
133+
int D = SSQPtr.HS[2]; //一般第3个月为春节
134134
for (int j = 0; j < 14; j++)
135135
{ //找春节
136-
if (SSQPtr->ym[j] != 2 || SSQPtr->leap == j && j)
136+
if (SSQPtr.ym[j] != 2 || SSQPtr.leap == j && j)
137137
continue;
138-
D = SSQPtr->HS[j];
138+
D = SSQPtr.HS[j];
139139
if (this->d0 < D)
140140
{
141141
D -= 365;
@@ -177,12 +177,12 @@ GZ Day::getMonthGZ()
177177
if (this->Lmonth2 == NULL)
178178
{
179179
this->checkSSQ();
180-
int mk = int2((this->d0 - SSQPtr->ZQ[0]) / 30.43685);
180+
int mk = int2((this->d0 - SSQPtr.ZQ[0]) / 30.43685);
181181
//相对大雪的月数计算,mk的取值范围0-12
182-
if (mk < 12 && this->d0 >= SSQPtr->ZQ[2 * mk + 1])
182+
if (mk < 12 && this->d0 >= SSQPtr.ZQ[2 * mk + 1])
183183
mk++;
184184
//相对于1998年12月7(大雪)的月数,900000为正数基数
185-
int D = mk + int2((SSQPtr->ZQ[12] + 390) / 365.2422) * 12 + 900000;
185+
int D = mk + int2((SSQPtr.ZQ[12] + 390) / 365.2422) * 12 + 900000;
186186
this->Lmonth2 = new GZ(D % 10, D % 12);
187187
}
188188
return *(this->Lmonth2);
@@ -308,9 +308,9 @@ uint8_t Day::getConstellation()
308308
if (this->XiZ == 0xFF)
309309
{
310310
this->checkSSQ();
311-
int mk = int2((this->d0 - SSQPtr->ZQ[0] - 15) / 30.43685);
311+
int mk = int2((this->d0 - SSQPtr.ZQ[0] - 15) / 30.43685);
312312
//星座所在月的序数,(如果j=13,ob.d0不会超过第14号中气)
313-
if (mk < 11 && this->d0 >= SSQPtr->ZQ[2 * mk + 2])
313+
if (mk < 11 && this->d0 >= SSQPtr.ZQ[2 * mk + 2])
314314
{
315315
mk++;
316316
}

src/day.h

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#include "const.h"
66
#include "SSQ.h"
77

8-
static SSQ *SSQPtr = new SSQ();
8+
static SSQ SSQPtr;
99

1010
struct GZ
1111
{
@@ -128,31 +128,31 @@ class Day
128128
public:
129129
static Day *fromSolar(int _year, uint8_t _month, int _day)
130130
{
131-
Time *t = new Time();
132-
t->h = 12, t->m = 0, t->s = 0.1;
133-
t->Y = _year;
134-
t->M = _month;
135-
t->D = _day;
136-
int d0 = int2(JD::toJD(*t)) - J2000;
131+
Time t = { 0 };
132+
t.h = 12, t.m = 0, t.s = 0.1;
133+
t.Y = _year;
134+
t.M = _month;
135+
t.D = _day;
136+
int d0 = int2(JD::toJD(t)) - J2000;
137137
return new Day(d0);
138138
}
139139

140140
static Day *fromLunar(int year, uint8_t month, int day, bool isRun = false)
141141
{
142-
Time *t = new Time();
143-
t->h = 12, t->m = 0, t->s = 0.1;
144-
t->Y = year;
145-
t->M = 1;
146-
t->D = 1;
142+
Time t = { 0 };
143+
t.h = 12, t.m = 0, t.s = 0.1;
144+
t.Y = year;
145+
t.M = 1;
146+
t.D = 1;
147147
if (month > 10)
148148
{
149-
t->Y = year + 1;
149+
t.Y = year + 1;
150150
}
151151

152-
int Bd0 = int2(JD::toJD(*t)) - J2000;
153-
if (!SSQPtr->ZQ.size() || Bd0 < SSQPtr->ZQ[0] || Bd0 >= SSQPtr->ZQ[24])
152+
int Bd0 = int2(JD::toJD(t)) - J2000;
153+
if (!SSQPtr.ZQ.size() || Bd0 < SSQPtr.ZQ[0] || Bd0 >= SSQPtr.ZQ[24])
154154
{
155-
SSQPtr->calcY(Bd0);
155+
SSQPtr.calcY(Bd0);
156156
}
157157

158158
static const int yueIndex[12] = {11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
@@ -168,11 +168,11 @@ class Day
168168
}
169169

170170
int mk = 0;
171-
int leap = SSQPtr->leap - 1;
171+
int leap = SSQPtr.leap - 1;
172172

173-
for (int i = 0; i < SSQPtr->ym.size(); ++i)
173+
for (int i = 0; i < SSQPtr.ym.size(); ++i)
174174
{
175-
int it = SSQPtr->ym[i];
175+
int it = SSQPtr.ym[i];
176176
if (leap < 0)
177177
{
178178
if (it == yue)
@@ -206,7 +206,7 @@ class Day
206206
++mk;
207207
}
208208

209-
int bdi = SSQPtr->HS[mk];
209+
int bdi = SSQPtr.HS[mk];
210210
int jd = bdi + day - 1;
211211

212212
return new Day(jd);

src/sxtwl.cpp

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -229,41 +229,41 @@ namespace sxtwl
229229
//定节气范围
230230
if (i == 1 && jiqiIndex == 23)
231231
{
232-
if (!SSQPtr->ZQ.size() || Bd0 + 360 < SSQPtr->ZQ[0] || Bd0 + 360 >= SSQPtr->ZQ[24])
232+
if (!SSQPtr.ZQ.size() || Bd0 + 360 < SSQPtr.ZQ[0] || Bd0 + 360 >= SSQPtr.ZQ[24])
233233
{
234-
SSQPtr->calcY(Bd0 + 360);
234+
SSQPtr.calcY(Bd0 + 360);
235235
}
236236
index = 1;
237237
}
238238
else
239239
{
240-
if (!SSQPtr->ZQ.size() || Bd0 < SSQPtr->ZQ[0] || Bd0 >= SSQPtr->ZQ[24])
240+
if (!SSQPtr.ZQ.size() || Bd0 < SSQPtr.ZQ[0] || Bd0 >= SSQPtr.ZQ[24])
241241
{
242-
SSQPtr->calcY(Bd0);
242+
SSQPtr.calcY(Bd0);
243243
}
244244
}
245245

246-
int mk = int2((SSQPtr->ZQ[index] - SSQPtr->ZQ[0]) / 30.43685);
246+
int mk = int2((SSQPtr.ZQ[index] - SSQPtr.ZQ[0]) / 30.43685);
247247
//相对大雪的月数计算,mk的取值范围0-12
248-
if (mk < 12 && SSQPtr->ZQ[index] >= SSQPtr->ZQ[2 * mk + 1])
248+
if (mk < 12 && SSQPtr.ZQ[index] >= SSQPtr.ZQ[2 * mk + 1])
249249
{
250250
mk++;
251251
}
252252

253-
int D = mk + int2((SSQPtr->ZQ[12] + 390) / 365.2422) * 12 + 900000; //相对于1998年12月7(大雪)的月数,900000为正数基数
253+
int D = mk + int2((SSQPtr.ZQ[12] + 390) / 365.2422) * 12 + 900000; //相对于1998年12月7(大雪)的月数,900000为正数基数
254254

255255
////纪日,2000年1月7日起算
256-
D = SSQPtr->ZQ[index] - 6 + 9000000;
256+
D = SSQPtr.ZQ[index] - 6 + 9000000;
257257

258258
if (i == 0)
259259
{
260-
startJD = SSQPtr->ZQ[index];
260+
startJD = SSQPtr.ZQ[index];
261261
startT = JD::JD2DD(startJD + J2000);
262262
startGz.tg = D % 10;
263263
startGz.dz = D % 12;
264264

265265
//获取准确节气的时间
266-
auto jd2 = SSQPtr->ZQ[0] + dt_T(SSQPtr->ZQ[0]) - (8.0 / 24.0);
266+
auto jd2 = SSQPtr.ZQ[0] + dt_T(SSQPtr.ZQ[0]) - (8.0 / 24.0);
267267
auto w = XL::S_aLon(jd2 / 36525, 3);
268268
w = int2((w - 0.13) / pi2 * 24) * pi2 / 24;
269269

@@ -276,7 +276,7 @@ namespace sxtwl
276276
D = int2(d + 0.5);
277277
auto xn = int2(w / pi2 * 24 + 24000006.01) % 24;
278278
w += pi2 / 24;
279-
if (D < SSQPtr->ZQ[i])
279+
if (D < SSQPtr.ZQ[i])
280280
continue;
281281
break;
282282
}
@@ -292,13 +292,13 @@ namespace sxtwl
292292
}
293293
else
294294
{
295-
endJD = SSQPtr->ZQ[index];
295+
endJD = SSQPtr.ZQ[index];
296296
endT = JD::JD2DD(endJD + J2000);
297297
endGz.tg = D % 10;
298298
endGz.dz = D % 12;
299299

300300
//获取准确节气的时间
301-
auto jd2 = SSQPtr->ZQ[0] + dt_T(SSQPtr->ZQ[0]) - (8.0 / 24.0);
301+
auto jd2 = SSQPtr.ZQ[0] + dt_T(SSQPtr.ZQ[0]) - (8.0 / 24.0);
302302
auto w = XL::S_aLon(jd2 / 36525, 3);
303303
w = int2((w - 0.13) / pi2 * 24) * pi2 / 24;
304304

@@ -311,7 +311,7 @@ namespace sxtwl
311311
D = int2(d + 0.5);
312312
auto xn = int2(w / pi2 * 24 + 24000006.01) % 24;
313313
w += pi2 / 24;
314-
if (D < SSQPtr->ZQ[i])
314+
if (D < SSQPtr.ZQ[i])
315315
continue;
316316
break;
317317
}
@@ -476,17 +476,17 @@ namespace sxtwl
476476
//公历月首的儒略日,中午;
477477
int Bd0 = int2(JD::toJD(t)) - J2000;
478478

479-
if (!SSQPtr->ZQ.size() || Bd0 < SSQPtr->ZQ[0] || Bd0 >= SSQPtr->ZQ[24])
479+
if (!SSQPtr.ZQ.size() || Bd0 < SSQPtr.ZQ[0] || Bd0 >= SSQPtr.ZQ[24])
480480
{
481-
SSQPtr->calcY(Bd0);
481+
SSQPtr.calcY(Bd0);
482482
}
483483

484484
//{ "十一", "十二", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十" }
485485
// static int mkIndex[] = { 11, 12, 1,2,3,4,5,6,7, 8,9,10 };
486486
static int yueIndex[] = {11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
487487

488488
//需要排除11月和12月的,这个可能属于上一个月的信息
489-
int leap = SSQPtr->leap - 1;
489+
int leap = SSQPtr.leap - 1;
490490
if (leap > 1)
491491
{
492492
return yueIndex[leap];
@@ -495,11 +495,11 @@ namespace sxtwl
495495
//看看11月和12月是否有闰
496496
t.Y = By + 1;
497497
Bd0 = int2(JD::toJD(t)) - J2000;
498-
if (!SSQPtr->ZQ.size() || Bd0 < SSQPtr->ZQ[0] || Bd0 >= SSQPtr->ZQ[24])
498+
if (!SSQPtr.ZQ.size() || Bd0 < SSQPtr.ZQ[0] || Bd0 >= SSQPtr.ZQ[24])
499499
{
500-
SSQPtr->calcY(Bd0);
500+
SSQPtr.calcY(Bd0);
501501
}
502-
leap = SSQPtr->leap - 1;
502+
leap = SSQPtr.leap - 1;
503503
if (leap > 1 || leap < 0)
504504
{
505505
return 0;
@@ -524,9 +524,9 @@ namespace sxtwl
524524
//公历月首的儒略日,中午;
525525
int Bd0 = int2(JD::toJD(t)) - J2000;
526526

527-
if (!SSQPtr->ZQ.size() || Bd0 < SSQPtr->ZQ[0] || Bd0 >= SSQPtr->ZQ[24])
527+
if (!SSQPtr.ZQ.size() || Bd0 < SSQPtr.ZQ[0] || Bd0 >= SSQPtr.ZQ[24])
528528
{
529-
SSQPtr->calcY(Bd0);
529+
SSQPtr.calcY(Bd0);
530530
}
531531

532532
//{ "十一", "十二", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十" }
@@ -545,14 +545,14 @@ namespace sxtwl
545545
}
546546

547547
int mk = 0;
548-
int leap = SSQPtr->leap - 1;
548+
int leap = SSQPtr.leap - 1;
549549

550550
if (isRun && ((leap < 0) || (leap >= 0 && month != yueIndex[leap])))
551551
{
552552
//throw CalendarException(ErrorCode_NotRun);
553553
}
554554

555-
for (auto it = SSQPtr->ym.begin(); it != SSQPtr->ym.end(); ++it)
555+
for (auto it = SSQPtr.ym.begin(); it != SSQPtr.ym.end(); ++it)
556556
{
557557

558558
if (leap < 0)
@@ -589,9 +589,9 @@ namespace sxtwl
589589
}
590590

591591
//阴历首月的儒略日
592-
int bdi = SSQPtr->HS[mk];
592+
int bdi = SSQPtr.HS[mk];
593593

594-
return SSQPtr->HS[mk + 1] - SSQPtr->HS[mk];
594+
return SSQPtr.HS[mk + 1] - SSQPtr.HS[mk];
595595
}
596596

597597
//儒略日数转公历

0 commit comments

Comments
 (0)