## Class template relative_restriction

hamigaki::iostreams::relative_restriction —

## Synopsis

    template<typename Device>
    class relative_restriction {
    public:
      // types
      typedef boost::iostreams::char_type_of<Device>::type char_type;

      // construct/copy/destruct
      relative_restriction(Device&, boost::iostreams::stream_offset,
                           boost::iostreams::stream_offset = -1);

      // Boost.Iostreams implementation
      std::streamsize read(char_type*, std::streamsize);
      std::streamsize write(const char_type*, std::streamsize);
      std::streampos seek(boost::iostreams::stream_offset, std::ios_base::seekdir);
    };

    // creation
    template<typename Device>
      relative_restriction<Device>
      relative_restrict(Device&, boost::iostreams::stream_offset,
                        boost::iostreams::stream_offset = -1);

## Description

`relative_restriction`は`boost::iostreams::restriction`の変種である。`restriction`との違いは、

- オフセットの基準はストリームの先頭である

- ストリームのコピーを行わず、ポインタを保持する

である。

モデルとなるコンセプト:SeekableSource(`Device`がSeekableSourceである場合), SeekableSink(`Device`がSeekableSinkである場合)

### `relative_restriction` construct/copy/destruct

1.     relative_restriction(Device& dev, boost::iostreams::stream_offset off,
                            boost::iostreams::stream_offset len = -1);

### `relative_restriction` Boost.Iostreams implementation

1.     std::streamsize read(char_type* s, std::streamsize n);

2.     std::streamsize write(const char_type* s, std::streamsize n);

3.     std::streampos
       seek(boost::iostreams::stream_offset off, std::ios_base::seekdir way);

### `relative_restriction` creation

1.     template<typename Device>
         relative_restriction<Device>
         relative_restrict(Device& dev, boost::iostreams::stream_offset off,
                           boost::iostreams::stream_offset len = -1);

   Returns: | `relative_restriction<Device>(dev, off, len)`

| 製作著作 © 2006, 2007 Takeshi Mouri