Explorar el Código

flshdb_iter_by_time not ready

Lyon hace 1 año
padre
commit
3e1cf4deb8

+ 3 - 1
port/linux/.vscode/launch.json

@@ -25,7 +25,9 @@
                 // "--gtest_filter=vm.subsrc_import"
                 // "--gtest_filter=event.event_thread3"
                 // "--gtest_filter=parser.semicolon*"
-                "--gtest_filter=time*"
+                // "--gtest_filter=time*"
+                "--gtest_filter=flashdb.tsdb1"
+                // "--gtest_filter=flashdb.base"
             ],
             "stopAtEntry": false,
             "cwd": "${workspaceFolder}",

+ 2 - 0
port/linux/package/pikascript/_flashdb.pyi

@@ -43,6 +43,8 @@ class TSDB:
     def tsl_append(self, blob: any) -> int: ...
     def tsl_iter(self, callback: any, user_data: any) -> int: ...
     def tsl_iter_reverse(self, callback: any, user_data: any) -> int: ...
+    def tsl_iter_by_time(self, from_time: int64, to_time: int64,
+                         callback: any, user_data: any) -> int: ...
 
 
 class TSL:

+ 7 - 0
port/linux/package/pikascript/flashdb.py

@@ -36,6 +36,13 @@ class TSDB(_flashdb.TSDB):
                  user_data=None):
         super().__init__(name, path, max_len, user_data)
 
+    def tsl_iter_by_time(self, from_time, to_time,
+                         callback: any, user_data: any) -> int:
+        print('tsl_iter_by_time')
+        print('from_time:', from_time)
+        print('to_time:', to_time)
+        return super().tsl_iter_by_time(from_time, to_time, callback, user_data)
+
 
 class TSL(_flashdb.TSL):
     pass

+ 17 - 1
port/linux/package/pikascript/pikascript-lib/flashdb/_flashdb_TSDB.c

@@ -35,7 +35,7 @@ static void unlock(fdb_db_t db)
 }
 */
 static fdb_time_t get_time(void) {
-    // ms to s
+    // ns to ms
     return pika_platform_get_tick() / 1000;
 }
 #endif
@@ -270,4 +270,20 @@ int _flashdb_TSDB_tsl_iter_reverse(PikaObj* self,
     return _TSDB_iter(self, callback, user_data, pika_true);
 }
 
+int _flashdb_TSDB_tsl_iter_by_time(PikaObj* self,
+                                   int64_t from_time,
+                                   int64_t to_time,
+                                   Arg* callback,
+                                   Arg* user_data) {
+    fdb_tsdb_t tsdb = _OBJ2TSDB(self);
+    tsdb_foreach_context context = {
+        .callback = callback,
+        .user_data = user_data,
+        .tsdb = tsdb,
+    };
+    fdb_tsl_iter_by_time(tsdb, from_time, to_time, _flashdb_TSL_iter_callback,
+                         &context);
+    return 0;
+}
+
 #undef strudp

+ 1 - 0
port/linux/package/pikascript/pikascript-lib/flashdb/fdb_tsdb.c

@@ -622,6 +622,7 @@ static int search_start_tsl_addr(fdb_tsdb_t db,
                                  fdb_time_t to) {
     struct fdb_tsl tsl;
     while (pika_true) {
+        size_t align = LOG_IDX_DATA_SIZE;
         tsl.addr.index =
             start + FDB_ALIGN((end - start) / 2, LOG_IDX_DATA_SIZE);
         read_tsl(db, &tsl);

+ 1 - 0
port/linux/package/pikascript/pikascript-lib/time/_time.c

@@ -480,6 +480,7 @@ PikaObj* _time_localtime(PikaObj* self, pika_float unix_time) {
     obj_setErrorCode(self, 1);
     obj_setSysOut(
         self, "[error] PIKA_STD_DEVICE_UNIX_TIME_ENABLE need to be enable.");
+    return NULL;
 #else
     _tm this_tm;
     int locale = g_pika_local_timezone;

+ 3 - 0
port/linux/test/python/flashdb/flashdb_tsdb1.py

@@ -7,11 +7,13 @@ DB_PATH = "test/out/fdb_tsdb"
 
 tsdb = flashdb.TSDB("env", DB_PATH, max_len=512)
 
+tic = time.time() * 1000
 for i in range(10):
     blob_i = struct.pack('i', i)
     time.sleep(0.001)
     ret = tsdb.tsl_append(blob_i)
 
+toc = time.time() * 1000
 assert ret == 0
 
 
@@ -26,5 +28,6 @@ def callback(tsl, user_data) -> int:
 
 assert tsdb.tsl_iter(callback, 'user_data') == 0
 assert tsdb.tsl_iter_reverse(callback, 'user_data_reverse') == 0
+assert tsdb.tsl_iter_by_time(tic, toc, callback, 'user_data_by_time') == 0
 
 print('PASS')

+ 2 - 0
port/linux/test/unix-time-test.cpp

@@ -122,9 +122,11 @@ TEST(timetest, sleep) {
     EXPECT_EQ(pikaMemNow(), 0);
 }
 
+#if PIKA_STD_DEVICE_UNIX_TIME_ENABLE && PIKA_FLOAT_TYPE_DOUBLE
 TEST_RUN_SINGLE_FILE_EXCEPT_OUTPUT(time,
                                    test1,
                                    "test/python/time/time_test1.py",
                                    "PASS\r\n")
+#endif
 
 TEST_END

+ 1 - 1
src/PikaVersion.h

@@ -2,4 +2,4 @@
 #define PIKA_VERSION_MINOR 13
 #define PIKA_VERSION_MICRO 3
 
-#define PIKA_EDIT_TIME "2024/07/02 16:10:12"
+#define PIKA_EDIT_TIME "2024/07/02 19:47:25"

+ 1 - 1
src/dataArgs.c

@@ -198,7 +198,7 @@ int64_t args_getInt(Args* self, char* name) {
     if (arg_type == ARG_TYPE_INT) {
         return arg_getInt(arg);
     } else if (arg_type == ARG_TYPE_FLOAT) {
-        return (int)arg_getFloat(arg);
+        return (int64_t)arg_getFloat(arg);
     } else if (arg_type == ARG_TYPE_BOOL) {
         return arg_getBool(arg);
     }