Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add getters and setters for card details #8

Merged
merged 2 commits into from
Oct 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
121 changes: 119 additions & 2 deletions com/example/fsrs/FSRS.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ private static native long ParameterNew(

private static native long RecordLogGet(long card, long rating);

private static native long CardScheduledDays(long card);

private static native String CardScheduledtoString(long card);

private static native long SchedulingInfoCard(long SchedulingInfo);
Expand All @@ -31,6 +29,42 @@ private static native long ParameterNew(

private static native String ReviewLogtoString(long ReviewLog);

private static native long CardScheduledDays(long card);

private static native void CardScheduledSetDays(long card, long days);

private static native long CardDue(long card);

private static native void CardSetDue(long card, long due_timestamp);

private static native double CardStability(long card);

private static native void CardSetStability(long card, double stability);

private static native double CardDifficulty(long card);

private static native void CardSetDifficulty(long card, double difficulty);

private static native long CardElapsedDays(long card);

private static native void CardSetElapsedDays(long card, long elapsed_days);

private static native int CardReps(long card);

private static native void CardSetReps(long card, int reps);

private static native int CardLapses(long card);

private static native void CardSetLapses(long card, int lapses);

private static native int CardState(long card);

private static native void CardSetState(long card, int state);

private static native long CardLastReview(long card);

private static native void CardSetLastReview(long card, long last_review_timestamp);

static {
System.loadLibrary("rs_fsrs_java");
}
Expand Down Expand Up @@ -98,6 +132,79 @@ public SchedulingInfo get(long rating) {
public String toString() {
return CardScheduledtoString(nativePtr);
}

public long getScheduledDays() {
return CardScheduledDays(nativePtr);
}

public void setScheduledDays(long days) {
CardScheduledSetDays(nativePtr, days);
}

public long getDue() {
return CardDue(nativePtr);
}

public void setDue(long due_timestamp) {
CardSetDue(nativePtr, due_timestamp);
}

public double getStability() {
return CardStability(nativePtr);
}

public void setStability(double stability) {
CardSetStability(nativePtr, stability);
}

public double getDifficulty() {
return CardDifficulty(nativePtr);
}

public void setDifficulty(double difficulty) {
CardSetDifficulty(nativePtr, difficulty);
}

public long getElapsedDays() {
return CardElapsedDays(nativePtr);
}

public void setElapsedDays(long elapsed_days) {
CardSetElapsedDays(nativePtr, elapsed_days);
}

public int getReps() {
return CardReps(nativePtr);
}

public void setReps(int reps) {
CardSetReps(nativePtr, reps);
}

public int getLapses() {
return CardLapses(nativePtr);
}

public void setLapses(int lapses) {
CardSetLapses(nativePtr, lapses);
}

public int getState() {
return CardState(nativePtr);
}

public void setState(int state) {
CardSetState(nativePtr, state);
}

public long getLastReview() {
return CardLastReview(nativePtr);
}

public void setLastReview(long last_review_timestamp) {
CardSetLastReview(nativePtr, last_review_timestamp);
}

}

public static class SchedulingInfo {
Expand Down Expand Up @@ -149,6 +256,16 @@ public static void main(String[] args) {
card = scheduling_info.getCard();
ReviewLog review_log = scheduling_info.getReviewLog();
System.out.println(card.toString());
System.out.println("Card Details:");
System.out.println("Scheduled Days: " + card.getScheduledDays());
System.out.println("Due Timestamp: " + card.getDue());
System.out.println("Stability: " + card.getStability());
System.out.println("Difficulty: " + card.getDifficulty());
System.out.println("Elapsed Days: " + card.getElapsedDays());
System.out.println("Reps: " + card.getReps());
System.out.println("Lapses: " + card.getLapses());
System.out.println("State: " + card.getState());
System.out.println("Last Review Timestamp: " + card.getLastReview());
System.out.println(review_log.toString());
}
}
Expand Down
246 changes: 246 additions & 0 deletions src/card.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,246 @@
use jni::objects::{JClass, JString};
use jni::sys::jlong;
use jni::JNIEnv;

use crate::to_raw;
pub struct Card {
pub inner: fsrs::Card,
}

#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardNew(
_env: JNIEnv,
_class: JClass,
) -> jlong {
to_raw(Card {
inner: fsrs::Card::new(),
})
}
#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardScheduledDays(
_env: JNIEnv,
_class: JClass,
card: jlong,
) -> jlong {
let c = unsafe { &*(card as *const Card) };
c.inner.scheduled_days as jlong
}

#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardScheduledSetDays(
_env: JNIEnv,
_class: JClass,
card: jlong,
days: jlong,
) {
let c = unsafe { &mut *(card as *mut Card) };
c.inner.scheduled_days = days as i64;
}

#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardScheduledtoString<'a>(
env: JNIEnv<'a>,
_class: JClass<'a>,
card: jlong,
) -> JString<'a> {
let c = unsafe { &*(card as *const Card) };
env.new_string(format!("{:?}", c.inner))
.expect("string error")
}

// Due DateTime (Getter and Setter)
#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardDue(
_env: JNIEnv,
_class: JClass,
card: jlong,
) -> jlong {
let c = unsafe { &*(card as *const Card) };
let due_timestamp = c.inner.due.timestamp();
due_timestamp as jlong
}

#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardSetDue(
_env: JNIEnv,
_class: JClass,
card: jlong,
due_timestamp: jlong,
) {
let c = unsafe { &mut *(card as *mut Card) };
c.inner.due = chrono::DateTime::from_timestamp(due_timestamp as i64, 0).expect("time error");
}

// Stability (Getter and Setter)
#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardStability(
_env: JNIEnv,
_class: JClass,
card: jlong,
) -> f64 {
let c = unsafe { &*(card as *const Card) };
c.inner.stability
}

#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardSetStability(
_env: JNIEnv,
_class: JClass,
card: jlong,
stability: f64,
) {
let c = unsafe { &mut *(card as *mut Card) };
c.inner.stability = stability;
}

// Difficulty (Getter and Setter)
#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardDifficulty(
_env: JNIEnv,
_class: JClass,
card: jlong,
) -> f64 {
let c = unsafe { &*(card as *const Card) };
c.inner.difficulty
}

#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardSetDifficulty(
_env: JNIEnv,
_class: JClass,
card: jlong,
difficulty: f64,
) {
let c = unsafe { &mut *(card as *mut Card) };
c.inner.difficulty = difficulty;
}

// Elapsed Days (Getter and Setter)
#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardElapsedDays(
_env: JNIEnv,
_class: JClass,
card: jlong,
) -> jlong {
let c = unsafe { &*(card as *const Card) };
c.inner.elapsed_days as jlong
}

#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardSetElapsedDays(
_env: JNIEnv,
_class: JClass,
card: jlong,
elapsed_days: jlong,
) {
let c = unsafe { &mut *(card as *mut Card) };
c.inner.elapsed_days = elapsed_days as i64;
}

// Scheduled Days (Getter and Setter)
#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardSetScheduledDays(
_env: JNIEnv,
_class: JClass,
card: jlong,
days: jlong,
) {
let c = unsafe { &mut *(card as *mut Card) };
c.inner.scheduled_days = days as i64;
}

// Reps (Getter and Setter)
#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardReps(
_env: JNIEnv,
_class: JClass,
card: jlong,
) -> i32 {
let c = unsafe { &*(card as *const Card) };
c.inner.reps
}

#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardSetReps(
_env: JNIEnv,
_class: JClass,
card: jlong,
reps: i32,
) {
let c = unsafe { &mut *(card as *mut Card) };
c.inner.reps = reps;
}

// Lapses (Getter and Setter)
#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardLapses(
_env: JNIEnv,
_class: JClass,
card: jlong,
) -> i32 {
let c = unsafe { &*(card as *const Card) };
c.inner.lapses
}

#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardSetLapses(
_env: JNIEnv,
_class: JClass,
card: jlong,
lapses: i32,
) {
let c = unsafe { &mut *(card as *mut Card) };
c.inner.lapses = lapses;
}

// State (Getter and Setter)
#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardState(
_env: JNIEnv,
_class: JClass,
card: jlong,
) -> i32 {
let c = unsafe { &*(card as *const Card) };
c.inner.state as i32
}

#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardSetState(
_env: JNIEnv,
_class: JClass,
card: jlong,
state: i32,
) {
let c = unsafe { &mut *(card as *mut Card) };
c.inner.state = match state {
0 => fsrs::State::New,
1 => fsrs::State::Learning,
2 => fsrs::State::Review,
3 => fsrs::State::Relearning,
_ => unreachable!(),
};
}

// Last Review (Getter and Setter)
#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardLastReview(
_env: JNIEnv,
_class: JClass,
card: jlong,
) -> jlong {
let c = unsafe { &*(card as *const Card) };
let last_review_timestamp = c.inner.last_review.timestamp();
last_review_timestamp as jlong
}

#[no_mangle]
pub unsafe extern "system" fn Java_com_example_fsrs_FSRS_CardSetLastReview(
_env: JNIEnv,
_class: JClass,
card: jlong,
last_review_timestamp: jlong,
) {
let c = unsafe { &mut *(card as *mut Card) };
c.inner.last_review =
chrono::DateTime::from_timestamp(last_review_timestamp as i64, 0).expect("time error");
}
Loading