1*9712c20fSFrederick Mayle// Copyright 2006 Google LLC 2*9712c20fSFrederick Mayle// 3*9712c20fSFrederick Mayle// Redistribution and use in source and binary forms, with or without 4*9712c20fSFrederick Mayle// modification, are permitted provided that the following conditions are 5*9712c20fSFrederick Mayle// met: 6*9712c20fSFrederick Mayle// 7*9712c20fSFrederick Mayle// * Redistributions of source code must retain the above copyright 8*9712c20fSFrederick Mayle// notice, this list of conditions and the following disclaimer. 9*9712c20fSFrederick Mayle// * Redistributions in binary form must reproduce the above 10*9712c20fSFrederick Mayle// copyright notice, this list of conditions and the following disclaimer 11*9712c20fSFrederick Mayle// in the documentation and/or other materials provided with the 12*9712c20fSFrederick Mayle// distribution. 13*9712c20fSFrederick Mayle// * Neither the name of Google LLC nor the names of its 14*9712c20fSFrederick Mayle// contributors may be used to endorse or promote products derived from 15*9712c20fSFrederick Mayle// this software without specific prior written permission. 16*9712c20fSFrederick Mayle// 17*9712c20fSFrederick Mayle// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18*9712c20fSFrederick Mayle// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19*9712c20fSFrederick Mayle// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20*9712c20fSFrederick Mayle// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21*9712c20fSFrederick Mayle// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22*9712c20fSFrederick Mayle// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23*9712c20fSFrederick Mayle// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24*9712c20fSFrederick Mayle// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25*9712c20fSFrederick Mayle// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26*9712c20fSFrederick Mayle// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27*9712c20fSFrederick Mayle// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28*9712c20fSFrederick Mayle 29*9712c20fSFrederick Mayle#include <unistd.h> 30*9712c20fSFrederick Mayle 31*9712c20fSFrederick Mayle#import "TestClass.h" 32*9712c20fSFrederick Mayle 33*9712c20fSFrederick Maylestruct AStruct { 34*9712c20fSFrederick Mayle int x; 35*9712c20fSFrederick Mayle float y; 36*9712c20fSFrederick Mayle double z; 37*9712c20fSFrederick Mayle}; 38*9712c20fSFrederick Mayle 39*9712c20fSFrederick Mayleclass InternalTestClass { 40*9712c20fSFrederick Mayle public: 41*9712c20fSFrederick Mayle InternalTestClass(int a) : a_(a) {} 42*9712c20fSFrederick Mayle ~InternalTestClass() {} 43*9712c20fSFrederick Mayle 44*9712c20fSFrederick Mayle void snooze(float a); 45*9712c20fSFrederick Mayle void snooze(int a); 46*9712c20fSFrederick Mayle int snooze(int a, float b); 47*9712c20fSFrederick Mayle 48*9712c20fSFrederick Mayle protected: 49*9712c20fSFrederick Mayle int a_; 50*9712c20fSFrederick Mayle AStruct s_; 51*9712c20fSFrederick Mayle 52*9712c20fSFrederick Mayle static void InternalFunction(AStruct &s); 53*9712c20fSFrederick Mayle static float kStaticFloatValue; 54*9712c20fSFrederick Mayle}; 55*9712c20fSFrederick Mayle 56*9712c20fSFrederick Maylevoid InternalTestClass::snooze(float a) { 57*9712c20fSFrederick Mayle InternalFunction(s_); 58*9712c20fSFrederick Mayle sleep(a_ * a); 59*9712c20fSFrederick Mayle} 60*9712c20fSFrederick Mayle 61*9712c20fSFrederick Maylevoid InternalTestClass::snooze(int a) { 62*9712c20fSFrederick Mayle InternalFunction(s_); 63*9712c20fSFrederick Mayle sleep(a_ * a); 64*9712c20fSFrederick Mayle} 65*9712c20fSFrederick Mayle 66*9712c20fSFrederick Mayleint InternalTestClass::snooze(int a, float b) { 67*9712c20fSFrederick Mayle InternalFunction(s_); 68*9712c20fSFrederick Mayle sleep(a_ * a * b); 69*9712c20fSFrederick Mayle 70*9712c20fSFrederick Mayle return 33; 71*9712c20fSFrederick Mayle} 72*9712c20fSFrederick Mayle 73*9712c20fSFrederick Maylevoid InternalTestClass::InternalFunction(AStruct &s) { 74*9712c20fSFrederick Mayle s.x = InternalTestClass::kStaticFloatValue; 75*9712c20fSFrederick Mayle} 76*9712c20fSFrederick Mayle 77*9712c20fSFrederick Maylefloat InternalTestClass::kStaticFloatValue = 42; 78*9712c20fSFrederick Mayle 79*9712c20fSFrederick Maylestatic float PlainOldFunction() { 80*9712c20fSFrederick Mayle return 3.14145f; 81*9712c20fSFrederick Mayle} 82*9712c20fSFrederick Mayle 83*9712c20fSFrederick Mayle@implementation TestClass 84*9712c20fSFrederick Mayle 85*9712c20fSFrederick Mayle- (void)wait { 86*9712c20fSFrederick Mayle InternalTestClass t(10); 87*9712c20fSFrederick Mayle float z = PlainOldFunction(); 88*9712c20fSFrederick Mayle 89*9712c20fSFrederick Mayle while (1) { 90*9712c20fSFrederick Mayle t.snooze(z); 91*9712c20fSFrederick Mayle } 92*9712c20fSFrederick Mayle} 93*9712c20fSFrederick Mayle 94*9712c20fSFrederick Mayle@end 95