X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fgrob-array-scheme.cc;h=877876328465821f67f1d6071762fe0a86eb204f;hb=926115ff42def8bc1ce767029e4f03c8072994ba;hp=5788ef9dda243c696a2574933fd1a4684df54a44;hpb=75eebcb49e52d296b1da3e1074e0825d2c780db4;p=lilypond.git diff --git a/lily/grob-array-scheme.cc b/lily/grob-array-scheme.cc index 5788ef9dda..8778763284 100644 --- a/lily/grob-array-scheme.cc +++ b/lily/grob-array-scheme.cc @@ -1,41 +1,60 @@ /* - grob-array-scheme.cc -- implement Grob_array bindings. + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2015 Han-Wen Nienhuys - (c) 2005--2006 Han-Wen Nienhuys + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ #include "grob-array.hh" #include "grob.hh" LY_DEFINE (ly_grob_array_length, "ly:grob-array-length", - 1, 0, 0, - (SCM grob_arr), - "Return the grob_array length.") + 1, 0, 0, + (SCM grob_arr), + "Return the length of @var{grob-arr}.") { - Grob_array *me = unsmob_grob_array (grob_arr); - SCM_ASSERT_TYPE (me, grob_arr, SCM_ARG1, __FUNCTION__, "Grob_array"); - return scm_from_int (me->size ()); -} + LY_ASSERT_SMOB (Grob_array, grob_arr, 1); + Grob_array *me = unsmob (grob_arr); + return scm_from_int (me->size ()); +} LY_DEFINE (ly_grob_array_ref, "ly:grob-array-ref", - 2, 0, 0, - (SCM grob_arr, SCM index), - "Retrieve the @code{index} element of @code{grob-arr}.") + 2, 0, 0, + (SCM grob_arr, SCM index), + "Retrieve the @var{index}th element of @var{grob-arr}.") { - Grob_array *me = unsmob_grob_array (grob_arr); - SCM_ASSERT_TYPE (me, grob_arr, SCM_ARG1, __FUNCTION__, "Grob_array"); - SCM_ASSERT_TYPE (scm_is_integer (index), index, SCM_ARG2, __FUNCTION__, "integer"); - - int i = scm_to_int (index); - if (i < 0 || i >= me->size ()) - { - scm_out_of_range (NULL, scm_from_int (i)); - } - + Grob_array *me = unsmob (grob_arr); + LY_ASSERT_SMOB (Grob_array, grob_arr, 1); + LY_ASSERT_TYPE (scm_is_integer, index, 2); + + vsize i = scm_to_uint (index); + if (i == VPOS || i >= me->size ()) + scm_out_of_range (NULL, scm_from_unsigned_integer (i)); + return me->grob (i)->self_scm (); } +LY_DEFINE (ly_grob_array_2_list, "ly:grob-array->list", + 1, 0, 0, + (SCM grob_arr), + "Return the elements of @var{grob-arr} as a Scheme list.") +{ + Grob_array *me = unsmob (grob_arr); + LY_ASSERT_SMOB (Grob_array, grob_arr, 1); + + return grob_array_to_list (me); +}