Detailed Description
methods to manipulate a SCIP object
Functions | |
SCIP_RETCODE | SCIPcreate (SCIP **scip) |
SCIP_RETCODE | SCIPfree (SCIP **scip) |
SCIP_STAGE | SCIPgetStage (SCIP *scip) |
SCIP_RETCODE | SCIPprintStage (SCIP *scip, FILE *file) |
SCIP_STATUS | SCIPgetStatus (SCIP *scip) |
SCIP_RETCODE | SCIPprintStatus (SCIP *scip, FILE *file) |
SCIP_Bool | SCIPisTransformed (SCIP *scip) |
SCIP_Bool | SCIPisExactSolve (SCIP *scip) |
SCIP_Bool | SCIPisPresolveFinished (SCIP *scip) |
SCIP_Bool | SCIPhasPerformedPresolve (SCIP *scip) |
SCIP_Bool | SCIPpressedCtrlC (SCIP *scip) |
SCIP_Bool | SCIPisStopped (SCIP *scip) |
Function Documentation
◆ SCIPcreate()
SCIP_RETCODE SCIPcreate | ( | SCIP ** | scip | ) |
creates and initializes SCIP data structures
- Note
- The SCIP default message handler is installed. Use the method SCIPsetMessagehdlr() to install your own message handler or SCIPsetMessagehdlrLogfile() and SCIPsetMessagehdlrQuiet() to write into a log file and turn off/on the display output, respectively.
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Postcondition
- After calling this method
scip
reached the solving stage SCIP_STAGE_INIT
See SCIP_STAGE for a complete list of all possible solving stages.
creates and initializes SCIP data structures
- Note
- The SCIP default message handler is installed. Use the method SCIPsetMessagehdlr() to install your own message handler or SCIPsetMessagehdlrLogfile() and SCIPsetMessagehdlrQuiet() to write into a log file and turn off/on the display output, respectively.
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Postcondition
- After calling this method SCIP reached the solving stage SCIP_STAGE_INIT
See SCIP_STAGE for a complete list of all possible solving stages.
- Parameters
-
scip pointer to SCIP data structure
Definition at line 339 of file scip_general.c.
References doScipCreate(), NULL, SCIP_CALL_FINALLY, SCIP_OKAY, and SCIPfree().
Referenced by addScenarioVarsAndConsToProb(), applyCompletesol(), applyDomainChanges(), applyOfins(), applyRepair(), applyVbounds(), createSubscip(), createSubSCIP(), execmain(), getActivities(), initConcsolver(), main(), polyscip::Polyscip::Polyscip(), scipexamples::QueensSolver::QueensSolver(), runBrachistochrone(), runCircle(), runGastrans(), runPacking(), runSCIP(), runShell(), runString(), SCIP_DECL_HEUREXEC(), SCIP_DECL_PRICERREDCOST(), SCIP_DECL_RELAXEXEC(), SCIP_DECL_SOLVECUMULATIVE(), SCIPapplyProximity(), SCIPapplyRedSize(), SCIPapplyRens(), SCIPapplyUndercover(), SCIPapplyZeroobj(), SCIPcomputeCoverUndercover(), SCIPcreateFiniteSolCopy(), SCIPprobdataCreate(), SCIPrunColoringShell(), SCIPrunCyc(), SCIPrunShell(), SCIPverifyCircularPatternNLP(), searchEcAggr(), setupProbingSCIP(), solveClassification(), solveMinIISC(), solvePricingMINLP(), solveSubMIP(), solveSubproblem(), and writeBounds().
◆ SCIPfree()
SCIP_RETCODE SCIPfree | ( | SCIP ** | scip | ) |
frees SCIP data structures
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
- Postcondition
- After calling this method SCIP reached the solving stage SCIP_STAGE_FREE
See SCIP_STAGE for a complete list of all possible solving stages.
- Parameters
-
scip pointer to SCIP data structure
Definition at line 371 of file scip_general.c.
References BMSfreeMemory, Scip::dialoghdlr, FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIP_STAGE_FREE, SCIP_STAGE_INIT, SCIPcheckStage(), SCIPclockFree(), SCIPdialoghdlrFree(), SCIPfreeProb(), SCIPinterruptFree(), SCIPmemFree(), SCIPmessagehdlrRelease(), SCIPsetFree(), SCIPsyncstoreRelease(), and TRUE.
Referenced by applyCompletesol(), applyDomainChanges(), applyOfins(), applyRepair(), applyVbounds(), componentCreateSubscip(), createSubSCIP(), createSubscip(), deleteSubproblem(), execmain(), freeComponent(), freeScenarioTree(), freeSubSCIP(), freeSubscip(), getActivities(), main(), probdataFree(), runBrachistochrone(), runCircle(), runGastrans(), runPacking(), runSCIP(), runShell(), runString(), SCIP_DECL_CONCSOLVERDESTROYINST(), SCIP_DECL_CONSPRESOL(), SCIP_DECL_HEUREXEC(), SCIP_DECL_PRICERREDCOST(), SCIP_DECL_RELAXEXEC(), SCIP_DECL_SOLVECUMULATIVE(), SCIPapplyRedSize(), SCIPapplyRens(), SCIPapplyUndercover(), SCIPapplyZeroobj(), SCIPcomputeCoverUndercover(), SCIPcreate(), SCIPcreateFiniteSolCopy(), SCIPrunColoringShell(), SCIPrunCyc(), SCIPrunShell(), SCIPverifyCircularPatternNLP(), searchEcAggr(), solveClassification(), solveComponent(), solveMinIISC(), solvePricingMINLP(), solveSubMIP(), solveSubproblem(), subscipdataFreeSubscip(), writeBounds(), polyscip::Polyscip::~Polyscip(), and scipexamples::QueensSolver::~QueensSolver().
◆ SCIPgetStage()
SCIP_STAGE SCIPgetStage | ( | SCIP * | scip | ) |
returns current stage of SCIP
- Returns
- the current SCIP stage
See SCIP_STAGE for a complete list of all possible solving stages.
- Parameters
-
scip SCIP data structure
Definition at line 412 of file scip_general.c.
References NULL, Scip::set, and SCIP_Set::stage.
Referenced by addCoef(), analyzeConflict(), analyzeConflictLowerbound(), analyzeConflictOne(), analyzeConflictUpperbound(), analyzeConflictZero(), applyGenVBound(), applyProbing(), applyRepair(), branchruledataEnsureArraySize(), checkEstimateCriterion(), checkLocksAndRes(), checkTransferBoolParam(), collectEstLst(), componentSetupWorkingSol(), computeSymmetryGroup(), computeViolation(), computeViolations(), consdataCreate(), constructCompression(), constructValidSolution(), createCGCuts(), createConsSetppc(), createSubproblems(), createSubscip(), delCoefPos(), displayRelevantStats(), doCopy(), executeHeuristic(), generateAndApplyBendersCuts(), generateAndApplyBendersIntegerCuts(), generateAndApplyBendersNogoodCut(), generateConvexConcaveEstimator(), getLinVarsAndAndRess(), getNNodesBelowIncumbent(), getNRank1Nodes(), getX(), heurdataEnsureArraySize(), initialiseSubproblem(), initPricing(), isFiniteNonnegativeIntegral(), performDualfix(), permSortConsdata(), processBinvarFixings(), propagateBounds(), propagateCons(), propagatePackingPartitioningCons(), propagateVbounds(), propIndicator(), proposeFeasibleSolution(), readDiffFile(), readSolFile(), readXmlSolFile(), recomputeNodeInformation(), reformulate(), removeFixedBinvars(), removeFixedVariables(), resolvePropagationCoretimes(), SCIP_DECL_BENDERSCUTEXEC(), SCIP_DECL_CONSACTIVE(), SCIP_DECL_CONSCHECK(), SCIP_DECL_CONSDEACTIVE(), SCIP_DECL_CONSDELETE(), SCIP_DECL_CONSDISABLE(), SCIP_DECL_CONSENABLE(), SCIP_DECL_CONSEXITSOL(), SCIP_DECL_CONSINITSOL(), SCIP_DECL_CONSPRESOL(), SCIP_DECL_CONSTRANS(), SCIP_DECL_DIALOGEXEC(), SCIP_DECL_EVENTEXEC(), SCIP_DECL_PARAMCHGD(), SCIP_DECL_PRESOLEXEC(), SCIP_DECL_PROPEXEC(), SCIP_DECL_READERREAD(), SCIPaddBilinTermQuadratic(), SCIPaddConstantQuadratic(), SCIPaddLinearVarQuadratic(), SCIPaddQuadVarLinearCoefQuadratic(), SCIPaddQuadVarQuadratic(), SCIPaddSquareCoefQuadratic(), SCIPanalyzeDeductionsProbing(), SCIPapplyHeurSubNlp(), SCIPbendersExec(), SCIPbendersFreeSubproblem(), SCIPbendersSolveSubproblemCIP(), SCIPchgBilinCoefQuadratic(), SCIPchgCapacityKnapsack(), SCIPchgCoefLinear(), SCIPchgConsName(), SCIPchgLhsQuadratic(), SCIPchgLinearCoefQuadratic(), SCIPchgRhsQuadratic(), SCIPchgSquareCoefQuadratic(), SCIPchgVarLb(), SCIPchgVarLbGlobal(), SCIPchgVarLbNode(), SCIPchgVarLbProbing(), SCIPchgVarName(), SCIPchgVarType(), SCIPchgVarUb(), SCIPchgVarUbGlobal(), SCIPchgVarUbNode(), SCIPchgVarUbProbing(), SCIPcreateConsCardinality(), SCIPcreateConsCumulative(), SCIPcreateConsLinear(), SCIPcreateConsLinking(), SCIPcreateConsLogicor(), SCIPcreateConsNonlinear2(), SCIPcreateConsOptcumulative(), SCIPcreateConsSOS1(), SCIPgetExprtreeCoefsNonlinear(), SCIPgetExprtreeCurvaturesNonlinear(), SCIPgetExprtreesNonlinear(), SCIPgetGeneratorsSymmetry(), SCIPgetNExprtreesNonlinear(), SCIPgetNLimSolsFound(), SCIPgetVarCopy(), SCIPgetViolationNonlinear(), SCIPinferVarFixCons(), SCIPinferVarFixProp(), SCIPinferVarLbCons(), SCIPinferVarLbProp(), SCIPinferVarUbCons(), SCIPinferVarUbProp(), SCIPisConsCompressionEnabled(), SCIPisDualSolAvailable(), SCIPmakeIndicatorFeasible(), SCIPmakeIndicatorsFeasible(), SCIPmergeVariableStatistics(), SCIPprintSolutionStatistics(), SCIPprintStatistics(), SCIPprintTimingStatistics(), SCIPresolveSolHeurSubNlp(), SCIPsetLinearConsIndicator(), SCIPsetSlackVarUb(), SCIPsolveConcurrent(), SCIPStpDualAscent(), SCIPStpDualAscentPcMw(), SCIPtightenVarLb(), SCIPtightenVarLbGlobal(), SCIPtightenVarUb(), SCIPtightenVarUbGlobal(), SCIPtransformMinUC(), SCIPupdateStartpointHeurSubNlp(), SCIPvalidateSolve(), SCIPwriteGms(), setupAndSolve(), setupAndSolveSubscipRapidlearning(), solveComponent(), solveSubNLP(), tightenBounds(), tightenedIntvar(), and updateDataStructures().
◆ SCIPprintStage()
SCIP_RETCODE SCIPprintStage | ( | SCIP * | scip, |
FILE * | file | ||
) |
outputs SCIP stage and solution status if applicable via the message handler
- Note
- If the message handler is set to a NULL pointer nothing will be printed
- If limits have been changed between the solution and the call to this function, the status is recomputed and thus may to correspond to the original status.
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
See SCIP_STAGE for a complete list of all possible solving stages.
- Parameters
-
scip SCIP data structure file output file (or NULL for standard output)
Definition at line 434 of file scip_general.c.
References Scip::messagehdlr, SCIP_Primal::nlimsolsfound, Scip::primal, SCIP_CALL, SCIP_INVALIDDATA, SCIP_OKAY, SCIP_STAGE_EXITPRESOLVE, SCIP_STAGE_EXITSOLVE, SCIP_STAGE_FREE, SCIP_STAGE_FREETRANS, SCIP_STAGE_INIT, SCIP_STAGE_INITPRESOLVE, SCIP_STAGE_INITSOLVE, SCIP_STAGE_PRESOLVED, SCIP_STAGE_PRESOLVING, SCIP_STAGE_PROBLEM, SCIP_STAGE_SOLVED, SCIP_STAGE_SOLVING, SCIP_STAGE_TRANSFORMED, SCIP_STAGE_TRANSFORMING, SCIPcheckStage(), SCIPerrorMessage, SCIPgetObjsense(), SCIPgetPrimalbound(), SCIPisInfinity(), SCIPmessageFPrintInfo(), SCIPprintStatus(), SCIPsolveIsStopped(), Scip::set, SCIP_Set::stage, Scip::stat, and TRUE.
Referenced by displayRelevantStats(), and SCIPprintStatusStatistics().
◆ SCIPgetStatus()
SCIP_STATUS SCIPgetStatus | ( | SCIP * | scip | ) |
gets solution status
- Returns
- SCIP solution status
See SCIP_STATUS for a complete list of all possible solving status.
- Parameters
-
scip SCIP data structure
Definition at line 519 of file scip_general.c.
References NULL, SCIP_CALL_ABORT, SCIP_STAGE_FREE, SCIP_STAGE_INIT, SCIP_STATUS_UNKNOWN, SCIPcheckStage(), Scip::set, SCIP_Set::stage, Scip::stat, SCIP_Stat::status, and TRUE.
Referenced by applyDomainChanges(), polyscip::Polyscip::computeNondomPoints(), generateAndApplyBendersCuts(), getActivities(), initialiseSubproblem(), polyscip::Polyscip::numberofUnboundedResults(), runBenders(), SCIP_DECL_BENDERSCUTEXEC(), SCIP_DECL_CONCSOLVERSYNCWRITE(), SCIP_DECL_CONSINITPRE(), SCIP_DECL_CONSINITSOL(), SCIP_DECL_DISPOUTPUT(), SCIP_DECL_HEUREXEC(), SCIP_DECL_PRICERREDCOST(), SCIP_DECL_PROPINITPRE(), SCIP_DECL_RELAXEXEC(), SCIP_DECL_SOLVECUMULATIVE(), SCIPapplyHeurDualval(), SCIPbendersComputeSubproblemLowerbound(), SCIPbendersExecSubproblemSolve(), SCIPbendersSolveSubproblemCIP(), SCIPgetGap(), SCIPgetLowerbound(), SCIPgetTransGap(), SCIPgetUpperbound(), SCIPprintSolutionStatistics(), SCIPprintStatus(), SCIPverifyCircularPatternNLP(), searchEcAggrWithMIP(), setupAndSolve(), setupAndSolveCumulativeSubscip(), setupAndSolveSubscip(), setupAndSolveSubscipLocalbranching(), setupAndSolveSubscipRapidlearning(), solveAndEvalSubscip(), solveComponent(), solvePricingMINLP(), solveSubNLP(), solveSubproblem(), solveSubscip(), solveSubscipLpface(), storeAggrFromMIP(), subscipdataCopySubscip(), and writeBounds().
◆ SCIPprintStatus()
SCIP_RETCODE SCIPprintStatus | ( | SCIP * | scip, |
FILE * | file | ||
) |
outputs solution status
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
See SCIP_STATUS for a complete list of all possible solving status.
- Parameters
-
scip SCIP data structure file output file (or NULL for standard output)
Definition at line 542 of file scip_general.c.
References Scip::messagehdlr, SCIP_CALL, SCIP_INVALIDDATA, SCIP_OKAY, SCIP_STATUS_BESTSOLLIMIT, SCIP_STATUS_GAPLIMIT, SCIP_STATUS_INFEASIBLE, SCIP_STATUS_INFORUNBD, SCIP_STATUS_MEMLIMIT, SCIP_STATUS_NODELIMIT, SCIP_STATUS_OPTIMAL, SCIP_STATUS_RESTARTLIMIT, SCIP_STATUS_SOLLIMIT, SCIP_STATUS_STALLNODELIMIT, SCIP_STATUS_TERMINATE, SCIP_STATUS_TIMELIMIT, SCIP_STATUS_TOTALNODELIMIT, SCIP_STATUS_UNBOUNDED, SCIP_STATUS_UNKNOWN, SCIP_STATUS_USERINTERRUPT, SCIPcheckStage(), SCIPerrorMessage, SCIPgetStatus(), SCIPmessageFPrintInfo(), and TRUE.
Referenced by SCIP_DECL_CONCSOLVEREXEC(), SCIP_DECL_DIALOGEXEC(), and SCIPprintStage().
◆ SCIPisTransformed()
returns whether the current stage belongs to the transformed problem space
- Returns
- Returns TRUE if the SCIP instance is transformed, otherwise FALSE
- Parameters
-
scip SCIP data structure
Definition at line 611 of file scip_general.c.
References NULL, SCIP_STAGE_TRANSFORMING, Scip::set, and SCIP_Set::stage.
Referenced by polyscip::Polyscip::computeNondomPoints(), consdataAddCons(), consdataCreate(), consdataCreateBinvars(), consdataCreateSuperindicator(), consdataFree(), copyProb(), createAndAddAndCons(), createConsSetppc(), getMaxactImplicObjchg(), polyscip::Polyscip::numberofUnboundedResults(), readMst(), readSol(), readSolFile(), readXmlSolFile(), SCIP_DECL_CONSCOPY(), SCIP_DECL_CONSDELETE(), SCIP_DECL_CONSPROP(), SCIP_DECL_DIALOGEXEC(), SCIP_DECL_PROPINITPRE(), SCIPapplyHeurDualval(), SCIPapplyHeurSubNlp(), SCIPchgVarBranchPriority(), SCIPcreateConsAnd(), SCIPcreateConsIndicator(), SCIPcreateConsKnapsack(), SCIPcreateConsLogicor(), SCIPcreateConsSOC(), SCIPcreateConsVarbound(), SCIPpermuteProb(), SCIPprintSol(), SCIPresolveSolHeurSubNlp(), and updateRunStats().
◆ SCIPisExactSolve()
returns whether the solution process is arithmetically exact, i.e., not subject to roundoff errors
- Note
- This feature is not supported yet!
- Returns
- Returns TRUE if SCIP is exact solving mode, otherwise FALSE
returns whether the solution process should be probably correct
- Note
- This feature is not supported yet!
- Returns
- Returns TRUE if SCIP is exact solving mode, otherwise FALSE
- Parameters
-
scip SCIP data structure
Definition at line 626 of file scip_general.c.
References SCIP_Set::misc_exactsolve, NULL, and Scip::set.
Referenced by branch(), execRelpscost(), SCIP_DECL_BRANCHEXECLP(), SCIPselectVarPseudoStrongBranching(), SCIPselectVarStrongBranching(), and selectVarMultAggrBranching().
◆ SCIPisPresolveFinished()
returns whether the presolving process would be finished given no more presolving reductions are found in this presolving round
Checks whether the number of presolving rounds is not exceeded and the presolving reductions found in the current presolving round suffice to trigger another presolving round.
- Note
- if subsequent presolvers find more reductions, presolving might continue even if the method returns FALSE
- does not check whether infeasibility or unboundedness was already detected in presolving (which would result in presolving being stopped although the method returns TRUE)
- Returns
- Returns TRUE if presolving is finished if no further reductions are detected
- Parameters
-
scip SCIP data structure
Definition at line 648 of file scip_general.c.
References Scip::cliquetable, FALSE, SCIP_Stat::lastnpresoladdconss, SCIP_Stat::lastnpresoladdholes, SCIP_Stat::lastnpresolaggrvars, SCIP_Stat::lastnpresolchgbds, SCIP_Stat::lastnpresolchgcoefs, SCIP_Stat::lastnpresolchgsides, SCIP_Stat::lastnpresolchgvartypes, SCIP_Stat::lastnpresoldelconss, SCIP_Stat::lastnpresolfixedvars, SCIP_Stat::lastnpresolupgdconss, SCIP_Prob::nbinvars, SCIP_Prob::nconss, SCIP_Stat::nimplications, SCIP_Stat::npresoladdconss, SCIP_Stat::npresoladdholes, SCIP_Stat::npresolaggrvars, SCIP_Stat::npresolchgbds, SCIP_Stat::npresolchgcoefs, SCIP_Stat::npresolchgsides, SCIP_Stat::npresolchgvartypes, SCIP_Stat::npresoldelconss, SCIP_Stat::npresolfixedvars, SCIP_Stat::npresolrounds, SCIP_Stat::npresolupgdconss, NULL, SCIP_Prob::nvars, SCIP_Set::presol_abortfac, SCIP_Set::presol_maxrounds, SCIP_Bool, SCIP_CALL_ABORT, SCIPcheckStage(), SCIPcliquetableGetNCliques(), Scip::set, Scip::stat, Scip::transprob, and TRUE.
Referenced by presolve(), presolveRound(), SCIP_DECL_CONSPRESOL(), and SCIP_DECL_PRESOLEXEC().
◆ SCIPhasPerformedPresolve()
returns whether SCIP has performed presolving during the last solve
- Returns
- Returns TRUE if presolving was performed during the last solve
- Parameters
-
scip SCIP data structure
Definition at line 710 of file scip_general.c.
References FALSE, NULL, SCIP_Stat::performpresol, SCIP_CALL_ABORT, SCIPcheckStage(), Scip::stat, and TRUE.
◆ SCIPpressedCtrlC()
returns whether the user pressed CTRL-C to interrupt the solving process
- Returns
- Returns TRUE if Ctrl-C was pressed, otherwise FALSE.
- Parameters
-
scip SCIP data structure
Definition at line 726 of file scip_general.c.
References SCIPinterrupted().
Referenced by solveSubNLP().
◆ SCIPisStopped()
returns whether the solving process should be / was stopped before proving optimality; if the solving process should be / was stopped, the status returned by SCIPgetStatus() yields the reason for the premature abort
- Returns
- Returns TRUE if solving process is stopped/interrupted, otherwise FALSE.
- Parameters
-
scip SCIP data structure
Definition at line 739 of file scip_general.c.
References FALSE, SCIP_CALL_ABORT, SCIPcheckStage(), SCIPsolveIsStopped(), Scip::set, Scip::stat, and TRUE.
Referenced by applyCliqueFixings(), applyHeur(), applyNlobbt(), applyProbing(), applyVbounds(), checkArraySizesGLS(), checkArraySizesHeur(), checkSystemGF2(), computeRowEcholonGF2(), computeSteinerTree(), computeSteinerTreeVnoi(), computeSymmetryGroup(), doSeachEcAggr(), enfopsCons(), enforceConstraint(), execRelpscost(), fillDigraph(), findCumulativeConss(), findPrecedenceConss(), generateClusterCuts(), generateOddCycleCut(), heurExec(), liftOddCycleCut(), loadTcliquegraph(), performRandRounding(), preprocessCliques(), preprocessConstraintPairs(), propagateCons(), redLoopMw(), redLoopPc(), redLoopStp(), reduceHc(), reduceNw(), reduceSap(), removeConstraintsDueToNegCliques(), SCIP_DECL_CONSPRESOL(), SCIP_DECL_CONSPROP(), SCIP_DECL_HEUREXEC(), SCIP_DECL_PRESOLEXEC(), SCIP_DECL_SEPAEXECLP(), SCIP_DECL_SEPAEXECSOL(), SCIPapplyLockFixings(), SCIPmatrixCreate(), SCIPperformGenericDivingAlgorithm(), SCIPselectVarStrongBranching(), SCIPStpDualAscent(), SCIPStpDualAscentPcMw(), SCIPStpHeurRecRun(), SCIPStpHeurTMRun(), selectVarRecursive(), sep_2cut(), separateCardinality(), separateCuts(), separateGLS(), separateHeur(), separateSOS1(), solveBendersSubproblems(), solvePricingHeuristic(), strengthenVarbounds(), tcliquegraphConstructCliqueTable(), tryAddSymmetryHandlingConss(), tryOneOpt(), and writeBounds().