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

Skip to content

Commit 185032d

Browse files
committed
1. 去除php5的支持
2. 增加C语言支持。 3. 增加早晚子时的支持
1 parent 66180c5 commit 185032d

39 files changed

+3513
-4643
lines changed

CMakeLists.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,4 +183,9 @@ if(SXTWL_WRAPPER_GO)
183183
include_directories("./src")
184184
add_library(sxtwl_go STATIC "./export/golang/sxtwl_wrap.cxx")
185185
target_link_libraries(sxtwl_go sxtwl)
186-
endif(SXTWL_WRAPPER_GO)
186+
endif(SXTWL_WRAPPER_GO)
187+
188+
# for c
189+
if(SXTWL_WRAPPER_C)
190+
add_subdirectory(c)
191+
endif(SXTWL_WRAPPER_C)

README.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,11 @@ sxtwl_cpp是参考[寿星天文历](http://www.nongli.net/sxwnl/)并使用C++实
2121

2222
![微信二维码](https://gitee.com/yuangu/sxtwl/raw/master/doc/img/WechatIMG5.jpeg)
2323

24-
请您扫码支持作者的海棠万年历(广告):
24+
请您扫码关注作者的《通俗万年历公众号》 (广告):
2525

26-
![海棠万年历](https://gitee.com/yuangu/sxtwl/raw/master/doc/img/qrcode_for_gh_d48e82be45fb_430.jpg)
26+
![通俗万年历](https://gitee.com/yuangu/sxtwl/raw/master/doc/img/qrcode.jpg)
2727

28-
如果您想请作者喝杯奶茶,扫如下微信支付码:
2928

30-
![微信收款](https://gitee.com/yuangu/sxtwl/raw/master/doc/img/WechatIMG7.jpeg)
3129

3230
## 特性
3331

@@ -59,22 +57,24 @@ sxtwl_cpp是参考[寿星天文历](http://www.nongli.net/sxwnl/)并使用C++实
5957
点击[Python安装及事例文档](python/README.md)阅读文档
6058

6159
+ #### C/C++用户专享文档
62-
<!-- 点击[C/C++安装及事例文档](doc/如何构建.md)阅读文档 -->
63-
待写
60+
点击[C/C++安装及事例文档](doc/如何构建.md)阅读文档
6461

6562
+ #### java用户专享文档
66-
<!-- 点击[java安装及事例文档](doc/如何构建.md)阅读文档 -->
67-
待写
63+
点击[java安装及事例文档](doc/如何构建.md)阅读文档
6864

6965
+ #### php用户专享文档
70-
<!-- 点击[php安装及事例文档](doc/如何构建.md)阅读文档 -->
71-
待写
66+
点击[php安装及事例文档](doc/如何构建.md)阅读文档
67+
7268
+ #### lua用户专享文档
73-
<!-- 点击[Python安装及事例文档](doc/如何构建.md)阅读文档 -->
74-
待写
69+
点击[Python安装及事例文档](doc/如何构建.md)阅读文档
70+
7571
+ #### C#用户专享文档
76-
<!-- 点击[Python安装及事例文档](doc/如何构建.md)阅读文档 -->
77-
待写
72+
点击[C#安装及事例文档](doc/如何构建.md)阅读文档
73+
74+
+ #### C语言用户专享文档
75+
注:如有需要显示给其它语言调用的用户,可以使用此版本。目前只提供DLL或者so生成
76+
点击[C语言安装及事例文档](doc/如何构建.md)阅读文档
77+
7878

7979
## 最后
8080
* 如果您喜欢本项目或者发现该库的bug可加微信留言

c/CMakeLists.txt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
cmake_minimum_required(VERSION 3.6)
2+
project(sxtwl_c)
3+
4+
include_directories("../src")
5+
6+
set(CMAKE_CXX_STANDARD 11)
7+
set(CMAKE_C_STANDARD 11)
8+
9+
IF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
10+
ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS)
11+
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
12+
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
13+
ENDIF()
14+
15+
file(GLOB SRC_FILES "*.cpp" )
16+
add_library(sxtwl_c SHARED ${SRC_FILES})
17+
target_link_libraries(sxtwl_c
18+
sxtwl)

c/sxtwl_c.cpp

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
#include "sxtwl_c.h"
2+
3+
#include "sxtwl.h"
4+
5+
6+
extern "C"
7+
{
8+
sxtwl_Day* sxtwl_after(sxtwl_Day* day, sxtwl_Day* ret, int day_num)
9+
{
10+
ret->ptr = (Day*)((Day*)day->ptr)->after(day_num);
11+
return ret;
12+
}
13+
14+
sxtwl_Day* sxtwl_before(sxtwl_Day* day, sxtwl_Day* ret, int day_num)
15+
{
16+
ret->ptr = (Day*)((Day*)day->ptr)->before(day_num);
17+
return ret;
18+
}
19+
20+
int sxtwl_getLunarDay(sxtwl_Day* day)
21+
{
22+
return ((Day*)day->ptr)->getLunarDay();
23+
}
24+
25+
int sxtwl_getLunarYear(sxtwl_Day* day, bool chineseNewYearBoundary)
26+
{
27+
return ((Day*)day->ptr)->getLunarYear(chineseNewYearBoundary);
28+
}
29+
30+
sxtwl_GZ sxtwl_getYearGZ(sxtwl_Day* day, bool chineseNewYearBoundary)
31+
{
32+
GZ gz = ((Day*)day->ptr)->getYearGZ(chineseNewYearBoundary);
33+
sxtwl_GZ ret{gz.tg, gz.dz};
34+
return ret;
35+
}
36+
37+
sxtwl_GZ sxtwl_getMonthGZ(sxtwl_Day* day)
38+
{
39+
GZ gz = ((Day*)day->ptr)->getMonthGZ();
40+
sxtwl_GZ ret{ gz.tg, gz.dz };
41+
return ret;
42+
}
43+
44+
sxtwl_GZ sxtwl_getDayGZ(sxtwl_Day* day)
45+
{
46+
GZ gz = ((Day*)day->ptr)->getDayGZ();
47+
sxtwl_GZ ret{ gz.tg, gz.dz };
48+
return ret;
49+
}
50+
51+
sxtwl_GZ sxtwl_getHourGZ(sxtwl_Day* day, uint8_t hour, bool isZaoWanZiShi)
52+
{
53+
GZ gz = ((Day*)day->ptr)->getHourGZ(hour, isZaoWanZiShi);
54+
sxtwl_GZ ret{ gz.tg, gz.dz };
55+
return ret;
56+
}
57+
58+
bool sxtwl_isLunarLeap(sxtwl_Day* day)
59+
{
60+
return ((Day*)day->ptr)->isLunarLeap();
61+
}
62+
63+
int sxtwl_getSolarYear(sxtwl_Day* day)
64+
{
65+
return ((Day*)day->ptr)->getSolarYear();
66+
}
67+
68+
uint8_t sxtwl_getSolarMonth(sxtwl_Day* day)
69+
{
70+
return ((Day*)day->ptr)->getSolarMonth();
71+
}
72+
73+
int sxtwl_getSolarDay(sxtwl_Day* day)
74+
{
75+
return ((Day*)day->ptr)->getSolarDay();
76+
}
77+
78+
uint8_t sxtwl_getWeek(sxtwl_Day* day)
79+
{
80+
return ((Day*)day->ptr)->getWeek();
81+
}
82+
83+
// 处于该月的第几周
84+
uint8_t sxtwl_getWeekIndex(sxtwl_Day* day)
85+
{
86+
return ((Day*)day->ptr)->getWeekIndex();
87+
}
88+
89+
//是否有节气
90+
bool sxtwl_hasJieQi(sxtwl_Day* day)
91+
{
92+
return ((Day*)day->ptr)->hasJieQi();
93+
}
94+
95+
// 获取节气
96+
uint8_t sxtwl_getJieQi(sxtwl_Day* day)
97+
{
98+
return ((Day*)day->ptr)->getJieQi();
99+
}
100+
101+
double sxtwl_getJieQiJD(sxtwl_Day* day)
102+
{
103+
return ((Day*)day->ptr)->getJieQiJD();
104+
}
105+
106+
// 获取星座
107+
uint8_t sxtwl_getConstellation(sxtwl_Day* day)
108+
{
109+
return ((Day*)day->ptr)->getConstellation();
110+
}
111+
112+
void sxtwl_freeDay(sxtwl_Day* day)
113+
{
114+
delete ((Day*)day->ptr);
115+
}
116+
117+
sxtwl_GZ sxtwl_getShiGz(uint8_t dayTg, uint8_t hour, bool isZaoWanZiShi)
118+
{
119+
GZ gz = sxtwl::getShiGz(dayTg, hour, isZaoWanZiShi);
120+
sxtwl_GZ ret{ gz.tg, gz.dz };
121+
return ret;
122+
}
123+
124+
uint8_t sxtwl_getRunMonth(int By)
125+
{
126+
return sxtwl::getRunMonth(By);
127+
}
128+
129+
uint8_t sxtwl_getLunarMonthNum(int By, uint8_t month, bool isRun)
130+
{
131+
return sxtwl::getLunarMonthNum(By, month, isRun);
132+
}
133+
134+
sxtwl_Time sxtwl_JD2DD(double jd)
135+
{
136+
Time t = sxtwl::JD2DD(jd);
137+
sxtwl_Time time;
138+
time.year = t.Y;
139+
time.month = t.M;
140+
time.day = t.D;
141+
142+
time.hour = t.h;
143+
time.min = t.m;
144+
time.sec = t.s;
145+
return time;
146+
}
147+
148+
double sxtwl_toJD(sxtwl_Time& time)
149+
{
150+
Time t(time.year, time.month, time.day, time.hour, time.min, time.sec);
151+
return sxtwl::toJD(t);
152+
}
153+
154+
sxtwl_Day* sxtwl_fromSolar(sxtwl_Day* ret, int year, uint8_t month, int day)
155+
{
156+
ret->ptr = (void*) sxtwl::fromSolar(year, month, day);
157+
return ret;
158+
}
159+
160+
sxtwl_Day* sxtwl_fromLunar(sxtwl_Day* ret, int year, uint8_t month, int day, bool isRun)
161+
{
162+
ret->ptr = (void*)sxtwl::fromLunar(year, month, day, isRun);
163+
return ret;
164+
}
165+
166+
double* sxtwl_siZhu2Year(double** list, int& ret_num, sxtwl_GZ year, sxtwl_GZ yue, sxtwl_GZ ri, sxtwl_GZ shi, int fromYear, int toYear)
167+
{
168+
auto ret = sxtwl::siZhu2Year(GZ(year.tg, year.dz), GZ(yue.tg, yue.dz), GZ(ri.tg, ri.dz), GZ(shi.tg, shi.dz), fromYear, toYear);
169+
*list = (double*)malloc(ret.size() * sizeof(double));
170+
memcpy(*list, &(ret[0]), ret.size() * sizeof(double));
171+
return *list;
172+
}
173+
}

c/sxtwl_c.h

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
#ifndef _SXTWL_C_H_
2+
#define _SXTWL_C_H_
3+
4+
#define _USREXDLL 1
5+
6+
#if (defined(WIN32) && defined(_WINDOWS)) || defined(WINRT) || defined(WP8)
7+
#ifdef __MINGW32__
8+
#include <string.h>
9+
#endif
10+
11+
#if defined(CC_STATIC)
12+
#define CC_EX_DLL
13+
#else
14+
#if defined(_USREXDLL)
15+
#define CC_EX_DLL __declspec(dllexport)
16+
#else /* use a DLL library */
17+
#define CC_EX_DLL __declspec(dllimport)
18+
#endif
19+
#endif
20+
21+
/* Define NULL pointer value */
22+
#ifndef NULL
23+
#ifdef __cplusplus
24+
#define NULL 0
25+
#else
26+
#define NULL ((void *)0)
27+
#endif
28+
#endif
29+
#elif defined(_SHARED_)
30+
#define CC_EX_DLL __attribute__((visibility("default")))
31+
#else
32+
#define CC_EX_DLL
33+
#endif
34+
35+
36+
#include <stdint.h>
37+
38+
extern "C"
39+
{
40+
typedef struct
41+
{
42+
int year, month, day;
43+
double hour, min, sec;
44+
} sxtwl_Time;
45+
46+
typedef struct
47+
{
48+
uint8_t tg;
49+
uint8_t dz;
50+
} sxtwl_GZ;
51+
52+
typedef struct
53+
{
54+
void* ptr;
55+
} sxtwl_Day;
56+
57+
58+
CC_EX_DLL sxtwl_Day* sxtwl_after(sxtwl_Day* day, sxtwl_Day* ret, int day_num);
59+
CC_EX_DLL sxtwl_Day* sxtwl_before(sxtwl_Day* day, sxtwl_Day* ret, int day_num);
60+
61+
CC_EX_DLL int sxtwl_getLunarDay(sxtwl_Day* day);
62+
CC_EX_DLL int sxtwl_getLunarYear(sxtwl_Day* day, bool chineseNewYearBoundary);
63+
CC_EX_DLL sxtwl_GZ sxtwl_getYearGZ(sxtwl_Day* day, bool chineseNewYearBoundary);
64+
CC_EX_DLL sxtwl_GZ sxtwl_getMonthGZ(sxtwl_Day* day);
65+
CC_EX_DLL sxtwl_GZ sxtwl_getDayGZ(sxtwl_Day* day);
66+
// 注意非早晚子时的时候,day要算第二天
67+
CC_EX_DLL sxtwl_GZ sxtwl_getHourGZ(sxtwl_Day* day, uint8_t hour, bool isZaoWanZiShi = true);
68+
CC_EX_DLL bool sxtwl_isLunarLeap(sxtwl_Day* day);
69+
70+
CC_EX_DLL int sxtwl_getSolarYear(sxtwl_Day* day);
71+
CC_EX_DLL uint8_t sxtwl_getSolarMonth(sxtwl_Day* day);
72+
CC_EX_DLL int sxtwl_getSolarDay(sxtwl_Day* day);
73+
CC_EX_DLL uint8_t sxtwl_getWeek(sxtwl_Day* day);
74+
// 处于该月的第几周
75+
CC_EX_DLL uint8_t sxtwl_getWeekIndex(sxtwl_Day* day);
76+
//是否有节气
77+
CC_EX_DLL bool sxtwl_hasJieQi(sxtwl_Day* day);
78+
// 获取节气
79+
CC_EX_DLL uint8_t sxtwl_getJieQi(sxtwl_Day* day);
80+
CC_EX_DLL double sxtwl_getJieQiJD(sxtwl_Day* day);
81+
// 获取星座
82+
CC_EX_DLL uint8_t sxtwl_getConstellation(sxtwl_Day* day);
83+
CC_EX_DLL void sxtwl_freeDay(sxtwl_Day* day);
84+
85+
86+
CC_EX_DLL sxtwl_Day* sxtwl_fromSolar(sxtwl_Day* ret, int year, uint8_t month, int day);
87+
88+
CC_EX_DLL sxtwl_Day* sxtwl_fromLunar(sxtwl_Day* ret, int year, uint8_t month, int day, bool isRun);
89+
90+
//通过四柱获取年月日, 返回的是儒略日列表
91+
CC_EX_DLL double* sxtwl_siZhu2Year(double** list, int& ret_num, sxtwl_GZ year, sxtwl_GZ yue, sxtwl_GZ ri, sxtwl_GZ shi, int fromYear, int toYear);
92+
////获取时辰上的那个天干
93+
CC_EX_DLL sxtwl_GZ sxtwl_getShiGz(uint8_t dayTg, uint8_t hour, bool isZaoWanZiShi);
94+
//获取一年中的润月(不存,则返回0)
95+
CC_EX_DLL uint8_t sxtwl_getRunMonth(int By);
96+
//获取一月中的阴日数量
97+
CC_EX_DLL uint8_t sxtwl_getLunarMonthNum(int By, uint8_t month, bool isRun);
98+
//儒略日数转公历
99+
CC_EX_DLL sxtwl_Time sxtwl_JD2DD(double jd);
100+
//公历转儒略日
101+
CC_EX_DLL double sxtwl_toJD(sxtwl_Time &time);
102+
}
103+
#endif

doc/img/WechatIMG7.jpeg

-116 KB
Binary file not shown.

doc/img/qrcode.jpg

41 KB
Loading
-40.6 KB
Binary file not shown.

doc/如何构建.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,11 @@ $ cmake --build .
4646
| lua | SXTWL_WRAPPER_LUA |
4747
| python | SXTWL_WRAPPER_PYTHON |
4848
| C# | SXTWL_WRAPPER_CSHARP |
49-
| php5 | SXTWL_WRAPPER_PHP5 | php5 |
49+
| php5 | SXTWL_WRAPPER_PHP5 | php5 已放弃支持 |
5050
| php7 | SXTWL_WRAPPER_PHP5 | php7 |
5151
| java | SXTWL_WRAPPER_JAVA | 如果在android中使用,请在externalNativeBuild 下的cmake加上 arguments "-DSXTWL_WRAPPER_JAVA=1"
5252
| golang | SXTWL_WRAPPER_GOLANG |
53+
| c语言 | SXTWL_WRAPPER_C | cmake只提供生成动态库 |
5354

5455
### python用户
5556

0 commit comments

Comments
 (0)