X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/f01b3c07392f2d4d86c937869aef594dd7a71eaa..da2af935087da0e425bbfb06fe1cc24107e3f32d:/List.hpp diff --git a/List.hpp b/List.hpp new file mode 100644 index 0000000..7113492 --- /dev/null +++ b/List.hpp @@ -0,0 +1,59 @@ +/* Cycript - Optimizing JavaScript Compiler/Runtime + * Copyright (C) 2009-2010 Jay Freeman (saurik) +*/ + +/* GNU Lesser General Public License, Version 3 {{{ */ +/* + * Cycript is free software: you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Cycript 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 Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Cycript. If not, see . +**/ +/* }}} */ + +#ifndef CYCRIPT_LIST_HPP +#define CYCRIPT_LIST_HPP + +template +struct CYNext { + Type_ *next_; + + CYNext() : + next_(NULL) + { + } + + CYNext(Type_ *next) : + next_(next) + { + } + + void SetNext(Type_ *next) { + next_ = next; + } +}; + +template +void CYSetLast(Type_ *&list, Type_ *item) { + if (list == NULL) + list = item; + else { + Type_ *next(list); + while (next->next_ != NULL) + next = next->next_; + next->next_ = item; + } +} + +#define CYForEach(value, list) \ + for (__typeof__(*list) *value(list); value != NULL; value = value->next_) + +#endif/*CYCRIPT_LIST_HPP*/