#!/usr/bin/env python
#############################################################################
# Copyright (C) DSTC Pty Ltd (ACN 052 372 577) 1997, 1998, 1999
# All Rights Reserved.
#
# The software contained on this media is the property of the
# DSTC Pty Ltd.  Use of this software is strictly in accordance
# with the license agreement in the accompanying LICENSE.DOC file.
# If your distribution of this software does not contain a
# LICENSE.DOC file then you have no rights to use this software
# in any manner and should contact DSTC at the address below
# to determine an appropriate licensing arrangement.
# 
#      DSTC Pty Ltd
#      Level 7, Gehrmann Labs
#      University of Queensland
#      St Lucia, 4072
#      Australia
#      Tel: +61 7 3365 4310
#      Fax: +61 7 3365 4311
#      Email: enquiries@dstc.edu.au
# 
# This software is being provided "AS IS" without warranty of
# any kind.  In no event shall DSTC Pty Ltd be liable for
# damage of any kind arising out of or in connection with
# the use or performance of this software.
#
# Project:      Distributed Environment
# File:         $Source: /projects/fnorb/Fnorb-1.1/orb/RCS/ThreadSpecificData.py,v $
#
#############################################################################
""" A class for thread-specific data. """


# Fnorb modules.
import fnorb_thread


class ThreadSpecificData:
    """ A thread-safe dictionary class. """

    def __init__(self):

	self.__lk = fnorb_thread.allocate_lock()
	self.__data = {}

	return

    def get(self):
	""" Get the value for the current thread. """

	self.__lk.acquire()
	try:
	    value = self.__data[fnorb_thread.get_ident()]

	finally:
	    self.__lk.release()

	return value

    def set(self, value):
	""" Set the value for the current thread. """

	self.__lk.acquire()
	try:
	    self.__data[fnorb_thread.get_ident()] = value

	finally:
	    self.__lk.release()

	return

#############################################################################
