Skip to content

Commit

Permalink
Add getters and setters for card details (#8)
Browse files Browse the repository at this point in the history
* Add getters and setters for card details
  • Loading branch information
asukaminato0721 authored Oct 18, 2024
1 parent c043590 commit 1e8c63f
Show file tree
Hide file tree
Showing 3 changed files with 367 additions and 36 deletions.
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

0 comments on commit 1e8c63f

Please sign in to comment.