This file is indexed.

/usr/include/ssm/ssm_csia.h is in libssm-dev 1.3-2.2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
// $Id: ssm_csia.h,v 1.1.1.1 2004/11/23 16:24:37 keb Exp $
// =================================================================
//
//    05.04.13   <--  Date of Last Modification.
//                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// -----------------------------------------------------------------
//
//  **** Module  :  ssm_csia       <interface>
//       ~~~~~~~~~
//  **** Classes :  ssm::GraphMatch ( matching SS graphs )
//       ~~~~~~~~~
//
//  E. Krissinel 2001-2013
//
//  When used, please cite:
//
//   Krissinel, E. and Henrick, K. (2004)
//   Common subgraph isomorphism detection by backtracking search.
//   Software - Practice and Experience, 34, 591-607.
//
// =================================================================
//

#ifndef  __SSM_CSIA__
#define  __SSM_CSIA__

#include "ssm_graph.h"

namespace ssm  {

  //  =========================  Match  ===========================

  DefineClass(Match);

  class Match : public CStream  {

    friend class GraphMatch;

    public :

      Match ();
      Match ( RPCStream Object );
      Match ( ivector FV1, ivector FV2, int nv, int n, int m );
      ~Match();

      void SetMatch ( ivector FV1, ivector FV2,
                      int nv, int n, int m );   // FV1[], FV2[] are copied

      void    Swap();

      Boolean isMatch ( ivector FV1, ivector FV2, int nv );

      int  isSubMatch ( ivector FV1, ivector FV2, int nv );
      // return 0 <=> no submatch relations
      //        1 <=> "this" is submatch of (FV1,FV2)
      //       -1 <=> (FV1,FV2) is submatch of "this"

      void GetMatch ( ivector  & FV1,  // do not allocate or
                      ivector  & FV2,  // dispose FV1 and FV2 in
                      int      & nv ); // application!

      void GetMatch ( ivector  & FV1, // do not allocate or
                      ivector  & FV2, // dispose FV1 and FV2 in
                      int      & nv,  // application!
                      realtype & p1,
                      realtype & p2 );

      void read  ( RCFile f );
      void write ( RCFile f );

    protected :
      int     mlength,n1,n2;
      ivector F1,F2;

      void InitMatch();

    private :
      int nAlloc;

  };

  DefineStreamFunctions(Match)

  //  =========================  GraphMatch  ===========================


  DefineClass(GraphMatch);

  class GraphMatch : public CStream  {

    public :

      GraphMatch ();
      GraphMatch ( RPCStream Object );
      ~GraphMatch();

      void  SetUniqueMatch ( Boolean unique_match );
      void  SetBestMatch   ( Boolean best_match   );
      void  SetMatchBufferLength ( int matchBufLen );
      void  SetFlags       ( word Flags );
      void  RemoveFlags    ( word Flags );

      void  MatchGraphs    ( PGraph Gh1, PGraph Gh2, int minMatch );

      PGraph  GetGraph1 ();
      PGraph  GetGraph2 ();
      void  GetMatches     ( PPMatch & SSMatch, int & nOfMatches );
      void  GetMatch       ( int   matchNo, int & matchLen,
                             ivector  & F1, ivector  & F2,
                             realtype & p1, realtype & p2 );
      inline int GetMaxRecursionLevel()  { return maxRecursionLevel; }
      inline int GetNofMatches       ()  { return nMatches;          }
      int   GetNofMatches     ( realtype p1, realtype p2 );

      int   CheckConnectivity ( int matchNo );

      void  read  ( RCFile f );
      void  write ( RCFile f );

    protected :

      PGraph    G1,G2;
      PPVertex  V1;
      PPVertex  V2;
      PPEdge    E1;
      PPEdge    E2;
      imatrix   c1,c2;
      Boolean   swap;
      word      flags;
      int       n,m;

      imatrix3  P;
      imatrix   iF1;
      ivector   F1,F2,ix;

      int       nMatches,maxNofMatches;
      PPMatch   match;
      Boolean   UniqueMatch,BestMatch,wasFullMatch,Stop;
      int       maxMatch,maxCollectedMatch,maxRecursionLevel;

      void  InitGraphMatch   ();
      void  FreeMemory       ();
      void  FreeRecHeap      ();
      void  GetMemory        ();
      void  GetRecHeap       ();
      int   Initialize       ();
      void  DoMatch          ( int minMatch );
      void  MatchSingleVertex();
      void  Backtrack        ( int i );
      void  Backtrack1       ( int i, int k0 );
      void  CollectMatch     ( int nm );

    private :
      int nAlloc,mAlloc,nMAlloc;

  };

  DefineStreamFunctions(GraphMatch)

}

#endif