File: OffsetOrderedList.h

package info (click to toggle)
opensp 1.5.1.0-2
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 7,976 kB
  • ctags: 9,416
  • sloc: cpp: 65,473; ansic: 13,242; sh: 9,762; makefile: 716; perl: 564; yacc: 316
file content (55 lines) | stat: -rw-r--r-- 1,302 bytes parent folder | download | duplicates (22)
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
// Copyright (c) 1994 James Clark
// See the file COPYING for copying permission.

#ifndef OffsetOrderedList_INCLUDED
#define OffsetOrderedList_INCLUDED 1

#include "types.h"
#include "Owner.h"
#include "NCVector.h"
#include "Boolean.h"
#include "Mutex.h"

#ifdef SP_NAMESPACE
namespace SP_NAMESPACE {
#endif

struct OffsetOrderedListBlock {
  Offset offset;		// next Offset
  size_t nextIndex;		// index of first item in next block
  enum { size = 200 };
  unsigned char bytes[size];
};

// This is an ordered list of Offsets with no duplicates.

class OffsetOrderedList {
public:
  OffsetOrderedList();
  // off must be > the last offset added.
  void append(Offset off);
  // Find the last offset in the list <= off.
  Boolean findPreceding(Offset off, size_t &foundIndex, Offset &foundOffset)
    const;
  size_t size() const;
private:
  OffsetOrderedList(const OffsetOrderedList &);	// undefined
  void operator=(const OffsetOrderedList &);	// undefined
  void addByte(unsigned char b);
  // bytes used in current block
  int blockUsed_;
  NCVector<Owner<OffsetOrderedListBlock> > blocks_;
  Mutex mutex_;
};

inline
size_t OffsetOrderedList::size() const
{
  return blocks_.size() == 0 ? 0 : blocks_.back()->nextIndex;
}

#ifdef SP_NAMESPACE
}
#endif

#endif /* not OffsetOrderedList_INCLUDED */