/*
 Copyright 2017-present The Material Motion Authors. All Rights Reserved.

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
 */

#import "MDMRepetitionOverTime.h"

@implementation MDMRepetitionOverTime

@synthesize autoreverses = _autoreverses;

- (instancetype)init {
  [self doesNotRecognizeSelector:_cmd];
  return nil;
}

- (instancetype)initWithDuration:(double)duration {
  return [self initWithDuration:duration autoreverses:NO];
}

- (instancetype)initWithDuration:(double)duration autoreverses:(BOOL)autoreverses {
  self = [super init];
  if (self) {
    _duration = duration;
    _autoreverses = autoreverses;
  }
  return self;
}

#pragma mark - NSCopying

- (id)copyWithZone:(__unused NSZone *)zone {
  return [[[self class] alloc] initWithDuration:self.duration autoreverses:self.autoreverses];
}

@end

