Skip to main content
  • Home
  • Development
  • Documentation
  • Donate
  • Operational login
  • Browse the archive

swh logo
SoftwareHeritage
Software
Heritage
Archive
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

https://github.com/Unipisa/CMM
13 July 2022, 09:41:13 UTC
  • Code
  • Branches (2)
  • Releases (8)
  • Visits
    • Branches
    • Releases
    • HEAD
    • refs/heads/SourceCode
    • refs/heads/master
    • 1.9
    • 1.8
    • 1.7
    • 1.6
    • 1.5
    • 1.4
    • 1.3
    • 1.1
  • db1a798
  • /
  • patch
  • /
  • patch-6
Raw File Download
Take a new snapshot of a software origin

If the archived software origin currently browsed is not synchronized with its upstream version (for instance when new commits have been issued), you can explicitly request Software Heritage to take a new snapshot of it.

Use the form below to proceed. Once a request has been submitted and accepted, it will be processed as soon as possible. You can then check its processing state by visiting this dedicated page.
swh spinner

Processing "take a new snapshot" request ...

To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
Select below a type of object currently browsed in order to display its associated SWHID and permalink.

  • content
  • directory
  • revision
  • snapshot
  • release
origin badgecontent badge Iframe embedding
swh:1:cnt:140827341feeef30450500dc5c8351c53dc9b192
origin badgedirectory badge Iframe embedding
swh:1:dir:d3ff9e31e4383eadb7d32ad4579ad403c9d1c2a8
origin badgerevision badge
swh:1:rev:55778ad8b99c136e1886959c1f1333c776df14e1
origin badgesnapshot badge
swh:1:snp:4ac4ed834489429d51fc0fd004f10ddbf78d807a
origin badgerelease badge
swh:1:rel:a6a00f689665e8e5b730fb4706b03c463146259a

This interface enables to generate software citations, provided that the root directory of browsed objects contains a citation.cff or codemeta.json file.
Select below a type of object currently browsed in order to generate citations for them.

  • content
  • directory
  • revision
  • snapshot
  • release
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
Tip revision: 55778ad8b99c136e1886959c1f1333c776df14e1 authored by Giuseppe Attardi on 15 May 1997, 06:24:54 UTC
1.8 -
Tip revision: 55778ad
patch-6
diff -c /home/omega/attardi/posso/cmm/ChangeLog /project/posso/cmm/curr/cmm/ChangeLog
*** /home/omega/attardi/posso/cmm/ChangeLog	Fri Mar 28 20:20:58 1997
--- /project/posso/cmm/curr/cmm/ChangeLog	Thu Mar  6 20:30:31 1997
***************
*** 1,32 ****
- Fri Mar 28 19:45:24 1997  Giuseppe Attardi  <attardi@omega>
- 
- 	* cmm.cpp (collect): revised to use roots.begin() and roots.get()
- 	to scan registered roots.
- 	Bartlett version was buggy, since it did not check that an entry
- 	had proper values for .addr and .bytes. They are not set to 0 on linux.
- 
- 	    for (int i = 0; i < rootsCount; i++)
- 	      {
- 	    	fp = roots[i].addr;
- 		for (int j = roots[i].bytes; j > 0; j = j - bytesPerWord)
- 		  promotePage((GCP)*fp++);
- 	      }
- 
- 	* cmm.h (Set): revised (no longer uses member count)
- 
- 	* cmm.cpp (RootAreas): revised to make it similar to Set above
- 	(added begin() and get()). It also clears the new array.
- 
- 
- Mon Mar 24 21:34:38 1997  Giuseppe Attardi  <attardi@omega>
- 
- 	* cmm.h (Set): added initialization for entries and test before
- 	delete in insert()
- 
- Mon Mar 10 18:12:02 1997  Giuseppe Attardi  <attardi@omega>
- 
- 	* cmm.h: added declaration for registerRootArea and unregisterRootArea
- 
  Thu Mar  6 20:28:35 1997  Giuseppe Attardi  <attardi@omega>
  
  	* cmm.cpp (expandHeap): fixed for Linux ELF
--- 1,3 ----
diff -c /home/omega/attardi/posso/cmm/cmm.cpp /project/posso/cmm/curr/cmm/cmm.cpp
*** /home/omega/attardi/posso/cmm/cmm.cpp	Fri Mar 28 20:04:32 1997
--- /project/posso/cmm/curr/cmm/cmm.cpp	Thu Mar  6 20:32:10 1997
***************
*** 54,60 ****
  
  /* Version tag */
  
! char*  Cmm::version = "CMM 1.8.5";
  
  /*---------------------------------------------------------------------------*
   *
--- 54,60 ----
  
  /* Version tag */
  
! char*  Cmm::version = "CMM 1.8.4";
  
  /*---------------------------------------------------------------------------*
   *
***************
*** 286,362 ****
   public:
    RootAreas()
      {
        max = 0;
        free = 0;
-       entries = NULL;
      }
  
!   void insert(void * addr, int bytes)
      {
  #     define	    setIncrement 10
-       int i;
  
        if (free)
  	{
! 	  for (i = 0; i < max; i++)
  	    if (entries[i].addr == NULL)
! 	      break;
  	}
!       else
  	{
  	  RootArea  *np;
- 	  int count = max;
  	  max += setIncrement;
- 	  free = setIncrement;
  	  np = ::new RootArea[max];
! 	  for (i = 0; i < count; i++)
  	    np[i] = entries[i];
! 	  // clear the rest
! 	  for (; i < max; i++)
! 	    np[i].addr = NULL;
! 	  if (entries) ::delete entries;
  	  entries = np;
- 	  i = count;
  	}
!       entries[i].addr = (GCP)addr;
!       entries[i].bytes = bytes;
!       free--;
      }
  
!   void erase(void* addr)
      {
        int i;
  
!       for (i = 0; i < max; i++)
  	if (entries[i].addr == addr)
  	  {
  	    entries[i].addr = NULL;
  	    free++;
  	    return;
  	  }
      }
  
!   RootArea* get()
!     {
!       // look for a non empty entry
!       while (iter < max)
! 	{
! 	  if (entries[iter].addr)
! 	    return &entries[iter++];
! 	  else
! 	    iter++;
! 	}
!       // No more entries;
!       return (RootArea*)NULL;
!     }
! 
!   void begin() { iter = 0;}
  
   private:
!   RootArea*	entries;
!   int		max;
!   int		free;
!   int		iter;
  };
  
  static RootAreas	roots;	// areas registered as containing roots
--- 286,346 ----
   public:
    RootAreas()
      {
+       count = 0;
        max = 0;
        free = 0;
      }
  
!   void add(void * addr, int bytes)
      {
  #     define	    setIncrement 10
  
        if (free)
  	{
! 	  for (int i = 0; i < count; i++)
  	    if (entries[i].addr == NULL)
! 	      {
! 		entries[i].addr = (GCP)addr;
! 		entries[i].bytes = bytes;
! 		free--;
! 		return;
! 	      }
  	}
!       if (count == max)
  	{
  	  RootArea  *np;
  	  max += setIncrement;
  	  np = ::new RootArea[max];
! 	  for (int i = 0; i < count; i++)
  	    np[i] = entries[i];
! 	  ::delete  entries;
  	  entries = np;
  	}
!       entries[count].addr = (GCP)addr;
!       entries[count],bytes = bytes;
!       count++;
      }
  
!   void remove(void* addr)
      {
        int i;
  
!       for (i = 0; i < count; i++)
  	if (entries[i].addr == addr)
  	  {
  	    entries[i].addr = NULL;
  	    free++;
  	    return;
  	  }
+       assert(i < count);
      }
  
!   int  count;
!   RootArea*   entries;
  
   private:
!   int  max;
!   int  free;
  };
  
  static RootAreas	roots;	// areas registered as containing roots
***************
*** 372,384 ****
  void
  registerRootArea(void * addr, int bytes)
  {
!   roots.insert(addr, bytes);
  }
  
  void
  unregisterRootArea(void* addr)
  {
!   roots.erase(addr);
  }
  
  /*---------------------------------------------------------------------------*
--- 356,368 ----
  void
  registerRootArea(void * addr, int bytes)
  {
!   roots.add(addr, bytes);
  }
  
  void
  unregisterRootArea(void* addr)
  {
!   roots.remove(addr);
  }
  
  /*---------------------------------------------------------------------------*
***************
*** 1238,1248 ****
      CmmExamineStaticAreas(CmmExamineStaticArea);
  
      /* Examine registered roots:		*/
!     roots.begin();
!     while (RootArea* ra = roots.get())
        {
! 	fp = ra->addr;
! 	for (int j = ra->bytes; j > 0; j = j - bytesPerWord)
  	  promotePage((GCP)*fp++);
        }
  
--- 1222,1231 ----
      CmmExamineStaticAreas(CmmExamineStaticArea);
  
      /* Examine registered roots:		*/
!     for (int i = 0; i < roots.count; i++)
        {
! 	fp = roots.entries[i].addr;
! 	for (int j = roots.entries[i].bytes; j > 0; j = j - bytesPerWord)
  	  promotePage((GCP)*fp++);
        }
  
diff -c /home/omega/attardi/posso/cmm/cmm.h /project/posso/cmm/curr/cmm/cmm.h
*** /home/omega/attardi/posso/cmm/cmm.h	Fri Mar 28 18:25:29 1997
--- /project/posso/cmm/curr/cmm/cmm.h	Wed Feb 26 12:09:06 1997
***************
*** 363,378 ****
  #define VirtualBase(A) &(P ## A)
  #endif
  
- /*---------------------------------------------------------------------------*
-  *
-  * Additional roots may be registered with the garbage collector by calling
-  * the procedure gcRoots with a pointer to the area and the size of the area.
-  *
-  *---------------------------------------------------------------------------*/
- 
- extern void  registerRootArea(void *area, int bytes);
- extern void  unregisterRootArea(void *addr);
- 
  /* Verbosity levels:							*/
  const	CMM_STATS    =   1;	/* Log garbage collector info		*/
  const	CMM_ROOTLOG  =   2;	/* Log roots found in registers, stack
--- 363,368 ----
***************
*** 877,931 ****
   public:
    Set()
      {
        max = 0;
        free = 0;
        iter = 0;
-       entries = NULL;
      }
  
    void insert(T* entry)
      {
  #     define	    setIncrement 10
-       int i;
  
        if (free)
  	{
! 	  for (i = 0; i < max; i++)
  	    if (entries[i] == NULL)
! 	      break;
  	}
!       else
  	{
  	  T** np;
! 	  int count = max;
  	  max += setIncrement;
! 	  free = setIncrement;
! 	  np = ::new T*[max];
! 	  for (i = 0; i < count; i++)
  	    np[i] = entries[i];
  	  // clear the rest
  	  for (; i < max; i++)
! 	    np[i] = NULL;
! 	  if (entries) ::delete  entries;
! 	  entries = np;
! 	  i = count;
  	}
!       entries[i] = entry;
!       free--;
      }
  
    void erase(T* entry)
      {
        int i;
  
!       for (i = 0; i < max; i++)
  	if (entries[i] == entry)
  	  {
  	    entries[i] = NULL;
  	    free++;
  	    return;
  	  }
!       assert(i < count);
      }
  
    T* get()
--- 867,921 ----
   public:
    Set()
      {
+       last = 0;
        max = 0;
        free = 0;
        iter = 0;
      }
  
    void insert(T* entry)
      {
  #     define	    setIncrement 10
  
        if (free)
  	{
! 	  for (int i = 0; i < last; i++)
  	    if (entries[i] == NULL)
! 	      {
! 		entries[i] = entry;
! 		free--;
! 		return;
! 	      }
  	}
!       if (last == max)
  	{
  	  T** np;
! 	  int i;
  	  max += setIncrement;
! 	  np = new T*[max];
! 	  for (i = 0; i < last; i++)
  	    np[i] = entries[i];
+ 	  delete  entries;
+ 	  entries = np;
  	  // clear the rest
  	  for (; i < max; i++)
! 	    entries[i] = NULL;
  	}
!       entries[last++] = entry;
      }
  
    void erase(T* entry)
      {
        int i;
  
!       for (i = 0; i < last; i++)
  	if (entries[i] == entry)
  	  {
  	    entries[i] = NULL;
  	    free++;
  	    return;
  	  }
!       assert(i < last);
      }
  
    T* get()
***************
*** 944,953 ****
  
    void begin() { iter = 0;}
  
!  protected:
    T**  entries;
    
!  private:
    int  max;
    int  free;
    int  iter;
--- 934,943 ----
  
    void begin() { iter = 0;}
  
!   int  last;
    T**  entries;
    
! private:
    int  max;
    int  free;
    int  iter;
Common subdirectories: /home/omega/attardi/posso/cmm/doc and /project/posso/cmm/curr/cmm/doc

back to top

Software Heritage — Copyright (C) 2015–2025, The Software Heritage developers. License: GNU AGPLv3+.
The source code of Software Heritage itself is available on our development forge.
The source code files archived by Software Heritage are available under their own copyright and licenses.
Terms of use: Archive access, API— Content policy— Contact— JavaScript license information— Web API