/* * call-seq: * sarray.array -> Array * * Returns a copy of the internal suffix array as an Array of Fixnum objects. This * array is a copy so you're free to mangle it however you wish. * * A suffix array is the sequence of indices into the source that mark each suffix * as if they were sorted. */ static VALUE SuffixArray_array(VALUE self) { SuffixArray *sa = NULL; Data_Get_Struct(self, SuffixArray, sa); if(sa == NULL || sa->suffix_index == NULL || RSTRING(sa->source)->len == 0) { rb_raise(cSAError, ERR_NOT_INITIALIZED); } // get the length of the suffix index size_t source_len = RSTRING(sa->source)->len; size_t i = 0; VALUE result = rb_ary_new(); for(i = 0; i < source_len; i++) { rb_ary_push(result, INT2FIX(sa->suffix_index[i])); } return result; }