sxtwl_cpp/c/sxtwl_c.cpp

241 lines
4.7 KiB
C++
Raw Permalink Normal View History

2024-04-14 20:02:01 +08:00
#include "sxtwl_export.h"
#include "sxtwl.h"
EXTERN_C_BEGIN
sxtwl_Day *sxtwl_after(sxtwl_Day *day, sxtwl_Day *ret, int day_num)
{
ret->ptr = (Day *)((Day *)day->ptr)->after(day_num);
return ret;
}
sxtwl_Day *sxtwl_before(sxtwl_Day *day, sxtwl_Day *ret, int day_num)
{
ret->ptr = (Day *)((Day *)day->ptr)->before(day_num);
return ret;
}
int sxtwl_getLunarMonth(sxtwl_Day *day)
{
return ((Day *)day->ptr)->getLunarMonth();
}
int sxtwl_getLunarDay(sxtwl_Day *day)
{
return ((Day *)day->ptr)->getLunarDay();
}
int sxtwl_getLunarYear(sxtwl_Day *day, bool chineseNewYearBoundary)
{
return ((Day *)day->ptr)->getLunarYear(chineseNewYearBoundary);
}
void *sxtwl_getYearGZ(void *GZPtr, sxtwl_Day *day, bool chineseNewYearBoundary)
{
auto ret = (GZ *)GZPtr;
*ret = ((Day *)day->ptr)->getYearGZ(chineseNewYearBoundary);
return ret;
}
void *sxtwl_getMonthGZ(void *GZPtr, sxtwl_Day *day)
{
auto ret = (GZ *)GZPtr;
*ret = ((Day *)day->ptr)->getMonthGZ();
return ret;
}
void *sxtwl_getDayGZ(void *GZPtr, sxtwl_Day *day)
{
auto ret = (GZ *)GZPtr;
*ret = ((Day *)day->ptr)->getDayGZ();
return ret;
}
void *sxtwl_getHourGZ(void *GZPtr, sxtwl_Day *day, uint8_t hour, bool isZaoWanZiShi)
{
auto ret = (GZ *)GZPtr;
*ret = ((Day *)day->ptr)->getHourGZ(hour, isZaoWanZiShi);
return ret;
}
bool sxtwl_isLunarLeap(sxtwl_Day *day)
{
return ((Day *)day->ptr)->isLunarLeap();
}
int sxtwl_getSolarYear(sxtwl_Day *day)
{
return ((Day *)day->ptr)->getSolarYear();
}
uint8_t sxtwl_getSolarMonth(sxtwl_Day *day)
{
return ((Day *)day->ptr)->getSolarMonth();
}
int sxtwl_getSolarDay(sxtwl_Day *day)
{
return ((Day *)day->ptr)->getSolarDay();
}
uint8_t sxtwl_getWeek(sxtwl_Day *day)
{
return ((Day *)day->ptr)->getWeek();
}
// 处于该月的第几周
uint8_t sxtwl_getWeekIndex(sxtwl_Day *day)
{
return ((Day *)day->ptr)->getWeekIndex();
}
// 是否有节气
bool sxtwl_hasJieQi(sxtwl_Day *day)
{
return ((Day *)day->ptr)->hasJieQi();
}
// 获取节气
uint8_t sxtwl_getJieQi(sxtwl_Day *day)
{
return ((Day *)day->ptr)->getJieQi();
}
double sxtwl_getJieQiJD(sxtwl_Day *day)
{
return ((Day *)day->ptr)->getJieQiJD();
}
// 获取星座
uint8_t sxtwl_getConstellation(sxtwl_Day *day)
{
return ((Day *)day->ptr)->getConstellation();
}
sxtwl_Day *sxtwl_newDay()
{
sxtwl_Day *day = new sxtwl_Day();
day->ptr = NULL;
return day;
}
void sxtwl_freeDay(sxtwl_Day *day)
{
if (day->ptr != NULL)
{
delete ((Day *)day->ptr);
}
delete day;
}
void *sxtwl_getShiGz(void *GZPtr, uint8_t dayTg, uint8_t hour, bool isZaoWanZiShi)
{
auto ret = (GZ *)GZPtr;
*ret = sxtwl::getShiGz(dayTg, hour, isZaoWanZiShi);
return ret;
}
uint8_t sxtwl_getRunMonth(int By)
{
return sxtwl::getRunMonth(By);
}
uint8_t sxtwl_getLunarMonthNum(int By, uint8_t month, bool isRun)
{
return sxtwl::getLunarMonthNum(By, month, isRun);
}
sxtwl_Time sxtwl_JD2DD(double jd)
{
Time t = sxtwl::JD2DD(jd);
sxtwl_Time time;
time.year = t.Y;
time.month = t.M;
time.day = t.D;
time.hour = t.h;
time.min = t.m;
time.sec = t.s;
return time;
}
double sxtwl_toJD(sxtwl_Time *time)
{
Time t(time->year, time->month, time->day, time->hour, time->min, time->sec);
return sxtwl::toJD(t);
}
sxtwl_Day *sxtwl_fromSolar(sxtwl_Day *ret, int year, uint8_t month, int day)
{
ret->ptr = (void *)sxtwl::fromSolar(year, month, day);
return ret;
}
sxtwl_Day *sxtwl_fromLunar(sxtwl_Day *ret, int year, uint8_t month, int day, bool isRun)
{
ret->ptr = (void *)sxtwl::fromLunar(year, month, day, isRun);
return ret;
}
void *sxtwl_siZhu2Year(void *JdListPtr, void *yearGZ, void *yueGZ, void *riGZ, void *shiGZ, int fromYear, int toYear)
{
auto ret = (std::vector<double> *)JdListPtr;
*ret = sxtwl::siZhu2Year(*((GZ *)yearGZ), *((GZ *)yueGZ), *((GZ *)riGZ), *((GZ *)shiGZ), fromYear, toYear);
return ret;
}
void *JdList_new()
{
auto ret = new std::vector<double>();
return ret;
}
void JdList_free(void *ptr)
{
auto ret = (std::vector<double> *)ptr;
delete ret;
}
int JdList_getNum(void *ptr)
{
auto ret = (std::vector<double> *)ptr;
return ret->size();
}
double JdList_indexOf(void *ptr, int index)
{
auto ret = (std::vector<double> *)ptr;
return ret->at(index);
}
void *GZ_new(int tg, int dz)
{
return new GZ(tg, dz);
}
void GZ_free(void *ptr)
{
auto ret = (GZ *)ptr;
delete ret;
}
int GZ_getTg(void *ptr)
{
auto ret = (GZ *)ptr;
return ret->tg;
}
void GZ_setTg(void *ptr, int tg)
{
auto ret = (GZ *)ptr;
ret->tg = tg;
}
int GZ_getDz(void *ptr)
{
auto ret = (GZ *)ptr;
return ret->dz;
}
void GZ_setDz(void *ptr, int dz)
{
auto ret = (GZ *)ptr;
ret->dz = dz;
}
EXTERN_C_END