# OpenSTA, Static Timing Analyzer
# Copyright (c) 2025, Parallax Software, Inc.
# 
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# 
# The origin of this software must not be misrepresented; you must not
# claim that you wrote the original software.
# 
# Altered source versions must be plainly marked as such, and must not be
# misrepresented as being the original software.
# 
# This notice may not be removed or altered from any source distribution.

This file summarizes STA API changes for each release.

Release 3.1.0 2026/03/25
------------------------

OpenSTA now uses std::string and std::string_view instead of const char *.
Lookup funtions such as Network::findPin use std::string_view that accept
a const char *, std::string, or std::string_view caller argument.

2026/03/19
----------

LibertyCell::footprint() returns const std::string& instead of const char*.
LibertyCell::userFunctionClass returns const std::string& instead of const char*.

The Sdc, Liberty, ConcreteLibrary, ConcreteNetwork classes have been updated to
use std::string and std::string_view instead of const char *. std::string_view
is used when the lifetime of the string argument is only while the function is
called. std::string is used when the string value outlives the function call
because it is stored in data structures.

The LibertyPort functions
 relatedGroundPin
 relatedPowerPin
are renamed to
 relatedGroundPort
 relatedPowerPort
and return LibertyPort's instead of strings.

2026/03/12
----------

The Report class used for reporting and error messages now uses std::format
instead of printf.

sta::format is a wrapper for std::format that will compile on gcc8, which
centos7 uses and does not support std::format.

stdstrPrint, strintPrint, stringAppend have been removed. Use sta::format.

reportLineString is now reportLine

Release 3.0.0 2026/01/03
------------------------

OpenSTA now requires c++ 20.

Corner replaced by Scene
 mode()
 parasitics(min_max)
DcalcAnalysisPt replaced by scene/min_min
PathAnalysisPt replaced by scene/min_min
StaState::sdc_ moved to Mode
StaState::sim_ moved to Mode
StaState::clk_network__ moved to Mode
StaState::parasitics_  moved to Scene

Sta::findPathEnds group_paths arg has been changed from PathGroupNameSet*
to StringSeq&.

Sta::isClock has been removed. Use mode->clkNetwork()->isClock instead.

Sta::vertexSlew renamed to slew
Sta::vertexSlack renamed to slack
Sta::vertexSlacks renamed to slacks
Sta::vertexArrival renamed to arrival
Sta::vertexRequired renamed to required
Sta::pinSlack renamed to slack
Sta::pinArrival renamed to arrival

FuncExpr::Operator::op_* renamed to FuncExpr::Op::*
FuncExprPortIterator has been removed. Use FuncExpr::ports().

Sdc::clocks() now returns ClockSeq&.
Sdc::clks() has been removed.

The Vector/Map/Set/UnorderedSet classes have been removed and replaced by
the std containers. The member functions are now templated functions found
in ContainerHelpers.hh.

The Graph slew_rf_count option is no longer supported.

Release 2.6.2 2025/03/30
------------------------

The following functions have been renamed to to_string and return std::string
instead of "const char*"

  Vertex::name
  FuncExpr::asString
  TimingRole::name
  MinMax::asString
  MinMaxAll::asString
  RiseFall::asString
  RiseFallBoth::asString
  Transition::asString
  Tag::asString
  timingSenseString

The following classes now return const objects.

  MinMax
  MinMaxAll
  RiseFall
  RiseFallBoth
  Transition
  TimingRole

Liberty PgPorts are now LibertyPorts with additional member functions for
liberty pg_pins.

The write_verilog command always sorts the verilog file instances.
The -sort argument is ignored.

Release 2.6.1 2025/03/??
-------------------------

The following classes have been replaced by the class Path.
 PathEnumed
 PathPrev
 PathRef
 PathVertex
 PathVertexPtr
 PathVertexRep

The PathExpanded::prevArc function has been removed. Use Path::prevArc instead.

Release 2.4.0 2023/01/19
-------------------------

The Network API and associated containers now 'const' the network class objects.
The Network API now requires network objects to have and "id" function that
returns an ObjectId (unsigned int) that is unique to the object among objects
of the same type. 

  virtual ObjectId id(const Instance *instance) const = 0;

Object IDs are used for comparing and hashing network objects.
If network Ids are not available in the host application database object pointers
can be cast to intptr_t. Using pointers as object Ids can result in memory layout
dependent results that are inconsistent from run to run or across host systems.

Many Network and Sta class functions now return collections rather than pointers
to temporary collections that the caller would have to delete.

Release 2.3.1 2022/06/12
-------------------------
LibertyCellTimingArcSetIterator has been removed.
Use range iteration as shown below:
  for (TimingArcSet *arc_set : cell->timingArcSets())
  for (TimingArcSet *arc_set : cell->timingArcSets(from, to))

TimingArcSetArcIterator has been removed.
Use range iteration as shown below:
 for (TimingArc *arc : arc_set->arcs())

LibertyCellSequentialIterator has been removed.
  for (Sequential *seq : cell->sequentials())

Release 2.1.1 2020/12/13
-------------------------
Report::error, Report::warn functions now take a unique message ID as a first argument.
InternalError has been renamed Report::cricical.

Release 2.1.0 2020/04/05
-------------------------
All public headers files have been moved to include/sta.

The following iterators have been removed.
Use range iteration on the returned collection shown next to them instead.
  LibertyCellInternalPowerIterator cell->internalPowers()
  LibertyCellLeakagePowerIterator cell->leakagePowers()

Release 2.0.18 2020/02/15
-------------------------

The following iterator functions are deprecated:

 TimingArcSet::timingArcIterator()
 Sdc::clockIterator()

Use the iterator class constructor instead. This avoids new/deletes of
the iterators by stack allocating them. For example,
Instead of

  TimingArcSetArcIterator *arc_iter = arc_set->timingArcIterator();
  while (arc_iter->hasNext()) {
    TimingArc *arc = arc_iter->next();
  }
  delete arc_iter;

use the following:

  TimingArcSetArcIterator arc_iter(arc_set);
  while (arc_iter.hasNext()) {
    TimingArc *arc = arc_iter.next();
  }

StaException renamed to Exception

Release 2.0.17 2019/11/11
-------------------------

Network::setVertexIndex renamed to setVertexId
Network::vertexIndex renamed to vertexId

TransRiseFall renamed to RiseFall
TransRiseFallBoth renamed to RiseFallBoth

Release 2.0.0 2018/06/11
-------------------------

Initial release.
	
# Local Variables:
# mode:text
# End:
