raydium-sdk-V2 0.0.9

Raydium SDK V2 adaptation
Documentation
use crate::raydium::clmm::utils::constants::{MAX_TICK, MIN_TICK};
use crate::raydium::clmm::utils::tick::{TICK_ARRAY_SIZE, TickUtils};

pub struct TickQuery {}

impl TickQuery {
    pub fn tick_count(tick_spacing: u16) -> u32 {
        (TICK_ARRAY_SIZE * tick_spacing as usize) as u32
    }
    pub fn get_array_start_index(tick_index: i32, tick_spacing: u16) -> i32 {
        let ticks_in_array = Self::tick_count(tick_spacing);
        let start = (tick_index as f32 / ticks_in_array as f32).floor() as i32;
        start * ticks_in_array as i32
    }
    pub fn check_is_valid_start_index(tick_index: i32, tick_spacing: u16) -> bool {
        if TickUtils::check_is_out_of_boundary(tick_index) {
            if tick_index > MAX_TICK {
                return false;
            }
            let min_start_index = TickUtils::get_tick_array_start_index_by_tick(MIN_TICK, tick_spacing);
            return tick_index == min_start_index;
        }
        tick_index % Self::tick_count(tick_spacing) as i32 == 0
    }
    pub fn next_initialized_tick_array(tick_index: i32, tick_spacing: u16, zero_for_one: bool, tick_array_bitmap: &[u64; 16], tick_array_bitmap_extension: &carbon_raydium_clmm_decoder::accounts::tick_array_bitmap_extension::TickArrayBitmapExtension)->Option<i32> {
        let current_offset = (tick_index as f32 / TickQuery::tick_count(tick_spacing) as f32).floor() as i32;
        let res = if zero_for_one {
            TickUtils::search_low_bit_from_start(tick_array_bitmap, tick_array_bitmap_extension, current_offset - 1, 1, tick_spacing)
        } else {
            TickUtils::search_high_bit_from_start(tick_array_bitmap, tick_array_bitmap_extension, current_offset + 1, 1, tick_spacing)
        };
        if res.len() > 0 {
            Some(res[0])
        } else {
            None
        }
    }
}