/*
 * Copyright 2013 ZXing authors
 *
 * 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 "ZXDebugPlacement.h"

@implementation ZXDebugPlacement

- (NSString *)toBitFieldString {
  NSMutableString *sb = [NSMutableString stringWithCapacity:self.bitsLen];
  for (int i = 0; i < self.bitsLen; i++) {
    [sb appendString:self.bits[i] == 1 ? @"1" : @"0"];
  }
  return [NSString stringWithString:sb];
}

- (NSArray *)toBitFieldStringArray {
  NSMutableArray *array = [NSMutableArray arrayWithCapacity:self.numrows];
  int startpos = 0;
  for (int row = 0; row < self.numrows; row++) {
    NSMutableString *sb = [NSMutableString stringWithCapacity:self.bitsLen];
    for (int i = 0; i < self.numcols; i++) {
      [sb appendString:self.bits[startpos + i] == 1 ? @"1" : @"0"];
    }
    [array addObject:[NSString stringWithString:sb]];
    startpos += self.numcols;
  }
  return array;
}

@end
