Ok, here&#39;s a first attempt.<div><br></div><div><a href="http://yebblies.com/rangebase64.d" target="_blank">http://yebblies.com/rangebase64.d</a></div><div><br></div><div>I ran into a couple of issues along the way:</div>
<div><br></div><div>Taking strings as input doesn&#39;t work properly, as string and wstring are defined not to have a length.  I&#39;m not sure whether to special case them and assume they contain only ascii characters or not.  At the moment it only accepts ubyte ranges.</div>
<div><br></div><div>This makes me think we _really_ need a AsciiString type in phobos, possibly with a matching assumeAscii function that checks the characters used when in debug mode.  Does anyone think this would be a good idea?</div>
<div><br></div><div>Decoder cannot provide length when padding is used without examining the end of the input.  Currently decoder on a forward range scans to then end of the range, giving the constructor complexity of O(n).  Is this acceptable?</div>
<div><br></div><div>Is there any point in making Encoder/Decoder bidirectional/random access?</div><div><br></div><div><br></div><div><br></div><div>As a side issue, would anyone else find a range that exposes the raw bytes of another range useful?</div>
<div><br></div><div>auto x = [0xFFEEDDCC, 0xBBAA9988];</div><div>assert(equal(rawBytes(x), [0xCC, 0xDD, 0xEE, 0xFF, 0x88, 0x99, 0xAA, 0xBB]);</div><div>This allows you to pass any range of POD types into Base64.encode or any similar range.</div>
<div><br></div><div>Daniel.</div>