bool ParamsModel::LoadFromFp(const char *lang, TFile *fp) { const int kMaxLineSize = 100; char line[kMaxLineSize]; BitVector present; present.Init(PTRAIN_NUM_FEATURE_TYPES); lang_ = lang; // Load weights for passes with adaption on. GenericVector<float> &weights = weights_vec_[pass_]; weights.init_to_size(PTRAIN_NUM_FEATURE_TYPES, 0.0); while (fp->FGets(line, kMaxLineSize) != nullptr) { char *key = nullptr; float value; if (!ParseLine(line, &key, &value)) continue; int idx = ParamsTrainingFeatureByName(key); if (idx < 0) { tprintf("ParamsModel::Unknown parameter %s\n", key); continue; } if (!present[idx]) { present.SetValue(idx, true); } weights[idx] = value; } bool complete = (present.NumSetBits() == PTRAIN_NUM_FEATURE_TYPES); if (!complete) { for (int i = 0; i < PTRAIN_NUM_FEATURE_TYPES; i++) { if (!present[i]) { tprintf("Missing field %s.\n", kParamsTrainingFeatureTypeName[i]); } } lang_ = ""; weights.truncate(0); } return complete; }