||'''Contents'''<
><>|| ---- '''Please do not edit this page. It is a template to be used by people applying as an Ubuntu developer.''' Head over to https://wiki.ubuntu.com/YourName/YourDeveloperApplication instead and make use of this template. ---- '''I, , apply for >.''' || '''Name''' || || || '''Launchpad Page''' || || || '''Wiki Page''' || || = Who I am = ''Tell us a bit about yourself.'' = My Ubuntu story = ''Tell us how and when you got involved, what you liked working on and what you could probably do better.'' == My involvement == == Examples of my work / Things I'm proud of == == Areas of work == ''Let us know what you worked on, with which development teams / developers you cooperated and how it worked out.'' ## As a per-package uploader, please give us some insight into the package maintenance and bug situation since you're working on it. == Things I could do better == = Plans for the future = == General == == What I like least in Ubuntu == ''Please describe what you like least in Ubuntu and what thoughts do you have about fixing it.'' ---- = Comments = ''If you'd like to comment, but are not the applicant or a sponsor, do it here. Don't forget to sign with `@``SIG``@`.'' ---- = Endorsements = ''As a sponsor, just copy the template below, fill it out and add it to this section.'' ---- == TEMPLATE == {{{ == == === General feedback === ## Please fill us in on your shared experience. (How many packages did you sponsor? How would you judge the quality? How would you describe the improvements? Do you trust the applicant?) === Specific Experiences of working together === ''Please add good examples of your work together, but also cases that could have handled better.'' === Areas of Improvement === }}} ---- ## Uncomment the one that applies for you and please remove the others. ## ## [[CategoryCoreDevApplication]] ## [[CategoryMOTUApplication]] ## [[CategoryUniverseContributorApplication]] ## [[CategoryPerPackageUploaderApplication]] {{{#!cplusplus /* * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef Timer_h #define Timer_h #include #include namespace WebCore { // Time intervals are all in seconds. class TimerHeapElement; class TimerBase : public Noncopyable { public: TimerBase(); virtual ~TimerBase(); void start(double nextFireInterval, double repeatInterval); void startRepeating(double repeatInterval) { start(repeatInterval, repeatInterval); } void startOneShot(double interval) { start(interval, 0); } void stop(); bool isActive() const; double nextFireInterval() const; double repeatInterval() const { return m_repeatInterval; } void augmentRepeatInterval(double delta) { setNextFireTime(m_nextFireTime + delta); m_repeatInterval += delta; } static void fireTimersInNestedEventLoop(); private: virtual void fired() = 0; void checkConsistency() const; void checkHeapIndex() const; void setNextFireTime(double); bool inHeap() const { return m_heapIndex != -1; } void heapDecreaseKey(); void heapDelete(); void heapDeleteMin(); void heapIncreaseKey(); void heapInsert(); void heapPop(); void heapPopMin(); double m_nextFireTime; // 0 if inactive double m_repeatInterval; // 0 if not repeating int m_heapIndex; // -1 if not in heap unsigned m_heapInsertionOrder; // Used to keep order among equal-fire-time timers #ifndef NDEBUG ThreadIdentifier m_thread; #endif friend class TimerHeapElement; friend class ThreadTimers; friend bool operator<(const TimerHeapElement&, const TimerHeapElement&); }; template class Timer : public TimerBase { public: typedef void (TimerFiredClass::*TimerFiredFunction)(Timer*); Timer(TimerFiredClass* o, TimerFiredFunction f) : m_object(o), m_function(f) { } private: virtual void fired() { (m_object->*m_function)(this); } TimerFiredClass* m_object; TimerFiredFunction m_function; }; inline bool TimerBase::isActive() const { ASSERT(m_thread == currentThread()); return m_nextFireTime; } } #endif }}}