/*
 * @author fenrir (http://fenrir.naruoka.org/)
 * 
 * reg_util.h
 * ユーティリティメソッド
 */

#include "reg_core.h"
#include "reg_util.h"
#include <string.h>

#ifdef __cplusplus
extern "C"{
#endif

/**
 * 部分マッチの結果を検索します。
 * 
 * @param submatch ターゲットとする部分マッチ
 * @param current 現在の状態
 * @param stack スタック
 * @return 部分マッチの結果があった場合対応するレンジ、それ以外NULL
 */
reg_range_t *find_submatch(reg_submatch_t *submatch, reg_stack_t *stack){
  
  reg_state_t *state;
  for(state = stack->top; state >= stack->bottom; state--){
    
    if(state->node == submatch->end){
      submatch->range.end = state->input_index;
      break;
    }
  }
  
  for(; state >= stack->bottom; state--){
    if(state->node == submatch->start){
      submatch->range.start = state->input_index;
      return &(submatch->range);
    }
  }
  
  return NULL;
}

#ifdef __cplusplus
};
#endif
