# Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
#
# WSO2 Inc. licenses this file to you under the Apache License,
# Version 2.0 (the "License"); you may not use this file except
# in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

from multiprocessing import RLock


class AtomicInt:
    '''
    An atomic integer class. All operations are thread safe.
    '''

    def __init__(self, value=0):
        self.value = value
        self.lock = RLock()

    def set(self, value):
        self.lock.acquire()
        self.value = value
        self.lock.release()

    def addAndGet(self, value):
        self.lock.acquire()
        self.value += value
        val = self.value
        self.lock.release()
        return val

    def get(self):
        self.lock.acquire()
        val = self.value
        self.lock.release()
        return val

# Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
#
# WSO2 Inc. licenses this file to you under the Apache License,
# Version 2.0 (the "License"); you may not use this file except
# in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

from multiprocessing import RLock


class AtomicInt:
    '''
    An atomic integer class. All operations are thread safe.
    '''

    def __init__(self, value=0):
        self.value = value
        self.lock = RLock()

    def set(self, value):
        self.lock.acquire()
        self.value = value
        self.lock.release()

    def addAndGet(self, value):
        self.lock.acquire()
        self.value += value
        val = self.value
        self.lock.release()
        return val

    def get(self):
        self.lock.acquire()
        val = self.value
        self.lock.release()
        return val

# Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. # # WSO2 Inc. licenses this file to you under the Apache License, # Version 2.0 (the "License"); you may not use this file except # in compliance with the License. # You may obtain a copy of the License at # #     http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. An atomic integer class. All operations are thread safe.