This file is indexed.

/usr/include/okteta1/arraychangemetrics.h is in okteta-dev 4:4.8.4+dfsg-1.

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
163
164
165
166
167
168
169
/*
    This file is part of the Okteta Core library, made within the KDE community.

    Copyright 2008 Friedrich W. H. Kossebau <kossebau@kde.org>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) version 3, or any
    later version accepted by the membership of KDE e.V. (or its
    successor approved by the membership of KDE e.V.), which shall
    act as a proxy defined in Section 6 of version 3 of the license.

    This library 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
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef OKTETA_ARRAYCHANGEMETRICS_H
#define OKTETA_ARRAYCHANGEMETRICS_H

// lib
#include "oktetacore_export.h"
#include "size.h"
#include "address.h"
// Qt
#include <QtCore/QDataStream>


namespace Okteta
{

// TODO: do we need the invalid status?
class OKTETACORE_EXPORT ArrayChangeMetrics
{
    friend QDataStream& operator<<( QDataStream& outStream, const ArrayChangeMetrics& metrics );
    friend QDataStream& operator>>( QDataStream& inStream, ArrayChangeMetrics& metrics );

  private:
    static const Address InvalidAddress = -1;

  public:
    enum Type { /*Insertion, Removal,*/ Replacement, Swapping/*, Filling, Setting*/, Invalid };

  public:
    static ArrayChangeMetrics asReplacement( Address offset, Size removeLength, Size insertLength );
    static ArrayChangeMetrics asSwapping( Address firstOffset, Address secondOffset, Size secondLength );

  public:
    ArrayChangeMetrics();

  protected:
  public:
    ArrayChangeMetrics( Type type, Address offset, qint32 secondArgument, qint32 thirdArgument );

  public:
    bool operator==( const ArrayChangeMetrics& other ) const;

  public:
    void revert();

  public:
    int type() const;
    Address offset() const;
    bool isValid() const;

  public: // Replacement properties
    Size removeLength() const;
    Size insertLength() const;
    Size lengthChange() const;

  public: // Swapping properties
    Size firstLength() const;
    Address secondStart() const;
    Address secondEnd() const;
    Size secondLength() const;

  protected:
    Type mType;
    Address mOffset;
    // TODO: how to make the arguments of the size of the largest union member?
    union
    {
    qint32 mSecondArgument;
    Size mRemoveLength;
    Address mSecondStart;
    };
    union
    {
    qint32 mThirdArgument;
    Size mInsertLength;
    Size mSecondLength;
    };
};

inline ArrayChangeMetrics ArrayChangeMetrics::asReplacement( Address offset, Size removeLength, Size insertLength )
{
    return ArrayChangeMetrics( Replacement, offset, removeLength, insertLength );
}

inline ArrayChangeMetrics ArrayChangeMetrics::asSwapping( Address firstOffset, Address secondOffset, Size secondLength )
{
    return ArrayChangeMetrics( Swapping, firstOffset, secondOffset, secondLength );
}


inline ArrayChangeMetrics::ArrayChangeMetrics( Type type, Address offset, qint32 secondArgument, qint32 thirdArgument )
 : mType( type ), mOffset( offset ), mSecondArgument( secondArgument ), mThirdArgument( thirdArgument )
{}
inline ArrayChangeMetrics::ArrayChangeMetrics() : mType(Invalid) ,mOffset( InvalidAddress ), mSecondArgument( 0 ), mThirdArgument( 0 ) {}
inline bool ArrayChangeMetrics::operator==( const ArrayChangeMetrics& other ) const
{
    return mType == other.mType
           && mOffset == other.mOffset
           && mSecondArgument == other.mSecondArgument
           && mThirdArgument == other.mThirdArgument;
}
inline void ArrayChangeMetrics::revert()
{
    if( mType == Replacement )
    {
        const Size helper = mInsertLength;
        mInsertLength = mRemoveLength;
        mRemoveLength = helper;
    }
    else if( mType == Swapping )
    {
        const Size oldSecondLength = mSecondLength;
        mSecondLength = firstLength();
        mSecondStart = mOffset + oldSecondLength;
    }
}

inline bool ArrayChangeMetrics::isValid()        const { return mOffset != InvalidAddress; }
inline int ArrayChangeMetrics::type()            const { return mType; }
inline Address ArrayChangeMetrics::offset()      const { return mOffset; }
inline Size ArrayChangeMetrics::removeLength()   const { return mRemoveLength; }
inline Size ArrayChangeMetrics::insertLength()   const { return mInsertLength; }
inline Size ArrayChangeMetrics::lengthChange()   const { return mInsertLength-mRemoveLength; }
inline Address ArrayChangeMetrics::secondStart() const { return mSecondStart; }
inline Address ArrayChangeMetrics::secondEnd()   const { return mSecondStart+mSecondLength-1; }
inline Size ArrayChangeMetrics::firstLength()    const { return mSecondStart-mOffset; }
inline Size ArrayChangeMetrics::secondLength()   const { return mSecondLength; }


QDataStream& operator<<( QDataStream& outStream, const ArrayChangeMetrics& metrics );
QDataStream& operator>>( QDataStream& inStream, ArrayChangeMetrics& metrics );

inline QDataStream& operator<<( QDataStream& outStream, const ArrayChangeMetrics& metrics )
{
    outStream << metrics.mType << metrics.mOffset << metrics.mSecondArgument << metrics.mThirdArgument;
    return outStream;
}

inline QDataStream& operator>>( QDataStream& inStream, ArrayChangeMetrics& metrics )
{
    int type;
    inStream >> type >> metrics.mOffset >> metrics.mSecondArgument >> metrics.mThirdArgument;
    metrics.mType = (ArrayChangeMetrics::Type)type; //TODO: find out how to stream to enum directly
    return inStream;
}

}

#endif