<commit_before>//
//  Copyright 2016 Lionheart Software LLC
//
//  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.

public extension UITableView {
    func registerClasses(_ cellClasses: [QuickTableViewCellIdentifiableFixedHeight.Type]) {
        for cellClass in cellClasses {
            registerClass(cellClass)
        }
    }

    func registerClasses(_ cellClasses: [QuickTableViewCellIdentifiableAutomaticHeight.Type], withEstimatedRowHeight estimatedRowHeight: CGFloat = 44) {
        for cellClass in cellClasses {
            registerClass(cellClass)
        }

        self.estimatedRowHeight = estimatedRowHeight
        rowHeight = UITableViewAutomaticDimension
    }

    func registerClass(_ cellClass: QuickTableViewCellIdentifiable.Type) {
        let identifier = cellClass.identifier
        guard let cellClass = cellClass as? AnyClass else {
            return
        }

        register(cellClass, forCellReuseIdentifier: identifier)
    }

    func dequeueReusableCell<T>(forIndexPath indexPath: IndexPath) -> T where T: QuickTableViewCellIdentifiable {
        return dequeueReusableCell(withIdentifier: T.identifier, for: indexPath) as! T
    }
}<commit_msg>add comment for registerClasses since it does not work reliably<commit_after>//
//  Copyright 2016 Lionheart Software LLC
//
//  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.

public extension UITableView {
    // MARK: !!!
    func registerClasses<T>(_ cellClasses: [T.Type]) where T: QuickTableViewCellIdentifiableFixedHeight {
        for cellClass in cellClasses {
            registerClass(cellClass)
        }
    }

    // MARK: !!!
    func registerClasses<T>(_ cellClasses: [T.Type], withEstimatedRowHeight estimatedRowHeight: CGFloat = 44) where T: QuickTableViewCellIdentifiableAutomaticHeight {
        for cellClass in cellClasses {
            registerClass(cellClass)
        }

        self.estimatedRowHeight = estimatedRowHeight
        rowHeight = UITableViewAutomaticDimension
    }

    func registerClass(_ cellClass: QuickTableViewCellIdentifiable.Type) {
        let identifier = cellClass.identifier
        guard let cellClass = cellClass as? AnyClass else {
            return
        }

        register(cellClass, forCellReuseIdentifier: identifier)
    }

    func dequeueReusableCell<T>(forIndexPath indexPath: IndexPath) -> T where T: QuickTableViewCellIdentifiable {
        return dequeueReusableCell(withIdentifier: T.identifier, for: indexPath) as! T
    }
}
{'fraction_non_alphanumeric': 0.07379862700228833, 'fraction_numerical': 0.005720823798627002, 'mean_word_length': 3.203125, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7535106', 'n_tokens_mistral': 918, 'n_tokens_neox': 885, 'n_words': 309}