// File:       piscmd12.c++
// Version:    1.00
// Author:     (c) Miles Sabin, 1997
// Purpose:    sync command

// Change log:
//  27/03/97   v. 1.00

#include "piscmds.h"

#include "istream.h"
#include "streambuf.h"


// Implementation of SyncCommand

SyncCommand::SyncCommand(basic_istream_char& is)
  { execute_template(is, true); }

SyncCommand::~SyncCommand()
  {}

ios::iostate SyncCommand::execute(basic_istream_char& is)
  {
    ios::iostate state = ios::goodbit;

    basic_streambuf_char* sb = is.rdbuf();

    if(sb->pubsync() != -1)
      result_ = 0;
    else
    {
      result_ = basic_istream_char::traits::eof();
      state = ios::badbit;
    }

    return state;
  }


// Implementation of basic_istream_char

int basic_istream_char::sync()
  {
    if(rdbuf() == 0)
      return -1;

    SyncCommand cmd(*this);
    return cmd.as_int();
  }

