This file is indexed.

/usr/include/kvutils/kvu_object_queue.h is in libkvutils-dev 2.8.1-5build1.

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
// ------------------------------------------------------------------------
// object_queue.cpp: Thread-safe way to transmit generic objects (FIFO).
// Copyright (C) 1999-2000 Kai Vehmanen
//
// 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 2 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, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
// ------------------------------------------------------------------------

#ifndef INCLUDED_OBJECT_QUEUE_H
#define INCLUDED_OBJECT_QUEUE_H

#include <pthread.h>
#include <deque>

/**
 * Thread-safe way to transmit generic objects (FIFO-queue).
 */
template<class T>
class OBJECT_QUEUE {
    
private:

    deque<T> cmds_rep;
    mutable pthread_mutex_t lock_rep;

public:
    
    /**
     * Inserts 'obj' into the queue. If some other process is 
     * accessing the queue, this call will block.
     */
    void push_back(const T& obj)  {
      pthread_mutex_lock(&lock_rep);
      cmds_rep.push_back(obj);
      pthread_mutex_unlock(&lock_rep);
    }

    /**
     * Pops the first item. If some other process is 
     * accessing the queue, this call will block.
     */
    void pop_front(void) {
      pthread_mutex_lock(&lock_rep);
      cmds_rep.pop_front();
      pthread_mutex_unlock(&lock_rep);
    }

    /**
     * Returns the first item. If some other process is 
     * accessing the queue, this call will block.
     */
    T front(void) const  {
      T temporary;
      pthread_mutex_lock(&lock_rep);
      if (cmds_rep.size() > 0) {
	temporary = cmds_rep.front();
      }
      pthread_mutex_unlock(&lock_rep);
      return(temporary);
    }

    /**
     * Returns true if the queue is empty. Unlike other calls,
     * this call will not block if some other process is 
     * accessing the queue. In this case, the returned result
     * will be 'true' even if the queue wasn't empty.
     */
    bool is_empty(void) const {
      if (pthread_mutex_trylock(&lock_rep) != 0)
	return(true);
  
      bool temp = true;
      if (cmds_rep.size() > 0) temp = false;
      pthread_mutex_unlock(&lock_rep);
      return(temp);
    }    
    
    /**
     * Clears the queue. If some other process is 
     * accessing the queue, this call will block.
     */
    void clear(void) {
      pthread_mutex_lock(&lock_rep);
      while (cmds_repsize() > 0) cmds_rep.pop_front();
      pthread_mutex_unlock(&lock_rep);
    }

    OBJECT_QUEUE(void) {
      pthread_mutex_init(&lock_rep, NULL);
    }

    ~OBJECT_QUEUE(void) {
      pthread_mutex_destroy(&lock_rep);      
    }
};

#endif