void IcrLoader::loadReaction (Reaction &reaction) { char id[3]; _scanner.readCharsFix(3, id); int version = -1; if (strncmp(id, IcrSaver::VERSION2, 3) == 0) version = 2; else if (strncmp(id, IcrSaver::VERSION1, 3) == 0) version = 1; else throw Error("expected '%s' or '%s', got %.*s. Resave your reaction with new format.", IcrSaver::VERSION1, IcrSaver::VERSION2, 3, id); char bits = _scanner.readChar(); bool have_xyz = ((bits & ICM_XYZ) != 0); bool have_bond_dirs = ((bits & ICM_BOND_DIRS) != 0); CrfLoader loader(_scanner); if (have_xyz) loader.xyz_scanner = &_scanner; loader.version = version; loader.loadReaction(reaction); if (have_xyz) if (!have_bond_dirs) reaction.markStereocenterBonds(); }
void IcrLoader::loadReaction (Reaction &reaction) { char id[3]; _scanner.readCharsFix(3, id); if (strncmp(id, "IR2", 3) != 0) throw Error("expected 'IR2', got %.*s. Resave your reaction with new format.", 3, id); char bits = _scanner.readChar(); bool have_xyz = ((bits & ICM_XYZ) != 0); bool have_bond_dirs = ((bits & ICM_BOND_DIRS) != 0); CrfLoader loader(_scanner); if (have_xyz) loader.xyz_scanner = &_scanner; loader.loadReaction(reaction); if (have_xyz) if (!have_bond_dirs) reaction.markStereocenterBonds(); }