hunk.code_window: declare module '../../Observable' {
     interface Observable<T> {
       do: DoSignature<T>;
     }
   }
  
hunk.labels: keep keep keep add keep keep
hunk.after_edit:     _do: DoSignature<T>;
  
hunk.file_path: src/add/operator/do.ts
hunk.type: add
file: import { Operator } from '../Operator';
  import { Subscriber } from '../Subscriber';
  import { Observable } from '../Observable';
  import { TeardownLogic } from '../Subscription';
  
  /**
   * Returns an Observable that skips `n` items emitted by an Observable.
   *
   * <img src="./img/skip.png" width="100%">
   *
   * @param {Number} the `n` of times, items emitted by source Observable should be skipped.
   * @return {Observable} an Observable that skips values emitted by the source Observable.
   *
   * @method skip
   * @owner Observable
   */
  export function skip<T>(total: number): Observable<T> {
    return this.lift(new SkipOperator(total));
  }
  
  export interface SkipSignature<T> {
    (total: number): Observable<T>;
  }
  
  class SkipOperator<T> implements Operator<T, T> {
    constructor(private total: number) {
    }
  
    call(subscriber: Subscriber<T>, source: any): TeardownLogic {
      return source._subscribe(new SkipSubscriber(subscriber, this.total));
    }
  }
  
  /**
   * We need this JSDoc comment for affecting ESDoc.
   * @ignore
   * @extends {Ignored}
   */
  class SkipSubscriber<T> extends Subscriber<T> {
    count: number = 0;
  
    constructor(destination: Subscriber<T>, private total: number) {
      super(destination);
    }
  
    protected _next(x: T) {
      if (++this.count > this.total) {
        this.destination.next(x);
      }
    }
  }
  