diff options
author | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2018-12-22 00:39:38 +0000 |
---|---|---|
committer | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2018-12-22 00:39:38 +0000 |
commit | aefa260469999e53f3b8ea263fda94cdddef8ce3 (patch) | |
tree | e1182a668216a25f19d5f18ffcfec27cc7925b96 /Build/source/libs/harfbuzz/harfbuzz-src/src/hb-iter.hh | |
parent | 27205aecce351fee6bb1ad9a7c43d4b542e28a1a (diff) |
harfbuzz-2.3.0
git-svn-id: svn://tug.org/texlive/trunk@49473 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs/harfbuzz/harfbuzz-src/src/hb-iter.hh')
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-src/src/hb-iter.hh | 149 |
1 files changed, 0 insertions, 149 deletions
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-iter.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-iter.hh deleted file mode 100644 index 6fd6aed79a7..00000000000 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-iter.hh +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright © 2018 Google, Inc. - * - * This is part of HarfBuzz, a text shaping library. - * - * Permission is hereby granted, without written agreement and without - * license or royalty fees, to use, copy, modify, and distribute this - * software and its documentation for any purpose, provided that the - * above copyright notice and the following two paragraphs appear in - * all copies of this software. - * - * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR - * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES - * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN - * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS - * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO - * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - * - * Google Author(s): Behdad Esfahbod - */ - -#ifndef HB_ITER_HH -#define HB_ITER_HH - -#include "hb.hh" - - -/* Unified iterator object. - * - * The goal of this template is to make the same iterator interface - * available to all types, and make it very easy and compact to use. - * Iterator objects are small, light-weight, objects that can be - * copied by value. If the collection / object being iterated on - * is writable, then the iterator points to lvalues, otherwise it - * returns rvalues. - * - * The way to declare, initialize, and use iterators, eg.: - * - * Iter<const int *> s (src); - * Iter<int *> t (dst); - * for (; s && t; s++, t++) - * *s = *t; - */ - -template <typename T> -struct Iter; - -#if 0 -template <typename T> -struct Iter -{ - explicit inline Iter (const T &c); -}; -#endif - -template <typename T> -struct Iter<T *> -{ - /* Type of items. */ - typedef T Value; - - /* Constructors. */ - inline Iter (T *array_, int length_) : - array (array_), length (MAX (length_, 0)) {} - template <unsigned int length_> - explicit inline Iter (T (&array_)[length_]) : - array (array_), length (length_) {} - - /* Emptiness. */ - explicit_operator inline operator bool (void) const { return bool (length); } - - /* Current item. */ - inline T &operator * (void) - { - if (unlikely (!length)) return CrapOrNull(T); - return *array; - } - inline T &operator -> (void) - { - return (operator *); - } - - /* Next. */ - inline Iter<T *> & operator ++ (void) - { - if (unlikely (!length)) return *this; - array++; - length--; - return *this; - } - /* Might return void, or a copy of pre-increment iterator. */ - inline void operator ++ (int) - { - if (unlikely (!length)) return; - array++; - length--; - } - - /* Some iterators might implement len(). */ - inline unsigned int len (void) const { return length; } - - /* Some iterators might implement fast-forward. - * Only implement it if it's constant-time. */ - inline void operator += (unsigned int n) - { - n = MIN (n, length); - array += n; - length -= n; - } - - /* Some iterators might implement random-access. - * Only implement it if it's constant-time. */ - inline Iter<T *> & operator [] (unsigned int i) - { - if (unlikely (i >= length)) return CrapOrNull(T); - return array[i]; - } - - private: - T *array; - unsigned int length; -}; - -/* XXX Remove - * Just to test these compile. */ -static inline void -m (void) -{ - const int src[10] = {}; - int dst[20]; - - Iter<const int *> s (src); - Iter<const int *> s2 (src, 5); - Iter<int *> t (dst); - - s2 = s; - - for (; s && t; ++s, ++t) - { - *t = *s; - } -} - -#endif /* HB_ITER_HH */ |