Mercurial > illumos > onarm
view usr/src/cmd/man/src/util/nsgmls.src/include/RangeMap.h @ 4:1a15d5aaf794
synchronized with onnv_86 (6202) in onnv-gate
author | Koji Uno <koji.uno@sun.com> |
---|---|
date | Mon, 31 Aug 2009 14:38:03 +0900 |
parents | c9caec207d52 |
children |
line wrap: on
line source
/* * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* * Copyright 1994 James Clark * See the file COPYING for copying permission. */ #pragma ident "%Z%%M% %I% %E% SMI" #ifndef _RANGEMAP_H #define _RANGEMAP_H #ifndef RangeMap_INCLUDED #define RangeMap_INCLUDED 1 #include "Vector.h" #include "Boolean.h" #include "ISet.h" #include "types.h" #include <stddef.h> #ifdef SP_NAMESPACE namespace SP_NAMESPACE { #endif template < class From, class To > struct RangeMapRange { From fromMin; From fromMax; To toMin; }; template < class From, class To > class RangeMapIter; template < class From, class To > class RangeMap; template < class From, class To > class RangeMap { public: RangeMap(); Boolean map(From, To &, From &alsoMax) const; // Return 0 for no matches, 1 for 1, 2 for more than 1. unsigned inverseMap(To, From &, ISet < WideChar > &, \ WideChar &count) const; void addRange(From, From, To); private: Vector < RangeMapRange < From, To > > ranges_; friend class RangeMapIter < From, To >\ ; }; template < class From, class To > class RangeMapIter { public: RangeMapIter(const RangeMap < From, To > &map); Boolean next(From &fromMin, From &fromMax, To &toMin) { if (!count_) return (0); else { fromMin = ptr_->fromMin; fromMax = ptr_->fromMax; toMin = ptr_->toMin; ptr_++; count_--; return (1); } } private: size_t count_; typename Vector < RangeMapRange < From, To > >\ ::const_iterator ptr_; }; #ifdef SP_NAMESPACE } #endif #endif /* not RangeMap_INCLUDED */ #ifdef SP_DEFINE_TEMPLATES #include "RangeMap.cxx" #endif #endif /* _RANGEMAP_H */