Search Results

Search found 2912 results on 117 pages for 'std tr1'.

Page 29/117 | < Previous Page | 25 26 27 28 29 30 31 32 33 34 35 36  | Next Page >

  • Signals and threads - good or bad design decision?

    - by Jens
    I have to write a program that performs highly computationally intensive calculations. The program might run for several days. The calculation can be separated easily in different threads without the need of shared data. I want a GUI or a web service that informs me of the current status. My current design uses BOOST::signals2 and BOOST::thread. It compiles and so far works as expected. If a thread finished one iteration and new data is available it calls a signal which is connected to a slot in the GUI class. My question(s): Is this combination of signals and threads a wise idea? I another forum somebody advised someone else not to "go down this road". Are there potential deadly pitfalls nearby that I failed to see? Is my expectation realistic that it will be "easy" to use my GUI class to provide a web interface or a QT, a VTK or a whatever window? Is there a more clever alternative (like other boost libs) that I overlooked? following code compiles with g++ -Wall -o main -lboost_thread-mt <filename>.cpp code follows: #include <boost/signals2.hpp> #include <boost/thread.hpp> #include <boost/bind.hpp> #include <iostream> #include <iterator> #include <string> using std::cout; using std::cerr; using std::string; /** * Called when a CalcThread finished a new bunch of data. */ boost::signals2::signal<void(string)> signal_new_data; /** * The whole data will be stored here. */ class DataCollector { typedef boost::mutex::scoped_lock scoped_lock; boost::mutex mutex; public: /** * Called by CalcThreads call the to store their data. */ void push(const string &s, const string &caller_name) { scoped_lock lock(mutex); _data.push_back(s); signal_new_data(caller_name); } /** * Output everything collected so far to std::out. */ void out() { typedef std::vector<string>::const_iterator iter; for (iter i = _data.begin(); i != _data.end(); ++i) cout << " " << *i << "\n"; } private: std::vector<string> _data; }; /** * Several of those can calculate stuff. * No data sharing needed. */ struct CalcThread { CalcThread(string name, DataCollector &datcol) : _name(name), _datcol(datcol) { } /** * Expensive algorithms will be implemented here. * @param num_results how many data sets are to be calculated by this thread. */ void operator()(int num_results) { for (int i = 1; i <= num_results; ++i) { std::stringstream s; s << "["; if (i == num_results) s << "LAST "; s << "DATA " << i << " from thread " << _name << "]"; _datcol.push(s.str(), _name); } } private: string _name; DataCollector &_datcol; }; /** * Maybe some VTK or QT or both will be used someday. */ class GuiClass { public: GuiClass(DataCollector &datcol) : _datcol(datcol) { } /** * If the GUI wants to present or at least count the data collected so far. * @param caller_name is the name of the thread whose data is new. */ void slot_data_changed(string caller_name) const { cout << "GuiClass knows: new data from " << caller_name << std::endl; } private: DataCollector & _datcol; }; int main() { DataCollector datcol; GuiClass mc(datcol); signal_new_data.connect(boost::bind(&GuiClass::slot_data_changed, &mc, _1)); CalcThread r1("A", datcol), r2("B", datcol), r3("C", datcol), r4("D", datcol), r5("E", datcol); boost::thread t1(r1, 3); boost::thread t2(r2, 1); boost::thread t3(r3, 2); boost::thread t4(r4, 2); boost::thread t5(r5, 3); t1.join(); t2.join(); t3.join(); t4.join(); t5.join(); datcol.out(); cout << "\nDone" << std::endl; return 0; }

    Read the article

  • Fingertip drawing applications on Android?

    - by STD
    Hi, I'm a new user to this interesting forum! I want start developing an application for android and before starting i want learn about some android features... The first android feature is how to correlate finger motion on the screen with java... Are there any source code examples that show how to draw with your finger on an android screen? Can you suggest a good place for me to download an example? thanks

    Read the article

  • Example of application to design with fingers (source code)

    - by STD
    Hi, i'm new user about this interesting forum! I want start develop application for android and before starting i want learn about some android feature... the first android feature is how to correlate finger motion in screen with java... Exist some source code that show how to realize application to draw with finger in android screen? can you suggest me where donwload it? thanks

    Read the article

  • Why is my simple recusive method for this game always off by 1?

    - by FrankTheTank
    I'm attempting to create a text-based version of this game: http://www.cse.nd.edu/java/SameGame.html Here is the code I have so far: #include <iostream> #include <vector> #include <ctime> class Clickomania { public: Clickomania(); std::vector<std::vector<int> > board; int move(int, int); bool isSolved(); void print(); void pushDown(); bool isValid(); }; Clickomania::Clickomania() : board(12, std::vector<int>(8,0)) { srand((unsigned)time(0)); for(int i = 0; i < 12; i++) { for(int j = 0; j < 8; j++) { int color = (rand() % 3) + 1; board[i][j] = color; } } } void Clickomania::pushDown() { for(int i = 0; i < 8; i++) { for(int j = 0; j < 12; j++) { if (board[j][i] == 0) { for(int k = j; k > 0; k--) { board[k][i] = board[k-1][i]; } board[0][i] = 0; } } } } int Clickomania::move(int row, int col) { bool match = false; int totalMatches = 0; if (row > 12 || row < 0 || col > 8 || col < 0) { return 0; } int currentColor = board[row][col]; board[row][col] = 0; if ((row + 1) < 12) { if (board[row+1][col] == currentColor) { match = true; totalMatches++; totalMatches += move(row+1, col); } } if ((row - 1) >= 0) { if (board[row-1][col] == currentColor) { match = true; totalMatches++; totalMatches += move(row-1, col); } } if ((col + 1) < 8) { if (board[row][col+1] == currentColor) { match = true; totalMatches++; totalMatches += move(row, col+1); } } if ((col - 1) >= 0) { if (board[row][col-1] == currentColor) { match = true; totalMatches++; totalMatches += move(row, col-1); } } return totalMatches; } void Clickomania::print() { for(int i = 0; i < 12; i++) { for(int j = 0; j < 8; j++) { std::cout << board[i][j]; } std::cout << "\n"; } } int main() { Clickomania game; game.print(); int row; int col; std::cout << "Enter row: "; std::cin >> row; std::cout << "Enter col: "; std::cin >> col; int numDestroyed = game.move(row,col); game.print(); std::cout << "Destroyed: " << numDestroyed << "\n"; } The method that is giving me trouble is my "move" method. This method, given a pair of coordinates, should delete all the squares at that coordinate with the same number and likewise with all the squares with the same number connected to it. If you play the link I gave above you'll see how the deletion works on a click. int Clickomania::move(int row, int col) { bool match = false; int totalMatches = 0; if (row > 12 || row < 0 || col > 8 || col < 0) { return 0; } int currentColor = board[row][col]; board[row][col] = 0; if ((row + 1) < 12) { if (board[row+1][col] == currentColor) { match = true; totalMatches++; totalMatches += move(row+1, col); } } if ((row - 1) >= 0) { if (board[row-1][col] == currentColor) { match = true; totalMatches++; totalMatches += move(row-1, col); } } if ((col + 1) < 8) { if (board[row][col+1] == currentColor) { match = true; totalMatches++; totalMatches += move(row, col+1); } } if ((col - 1) >= 0) { if (board[row][col-1] == currentColor) { match = true; totalMatches++; totalMatches += move(row, col-1); } } return totalMatches; } My move() method above works fine, as in, it will delete the appropriate "blocks" and replace them with zeros. However, the number of destroyed (value returned) is always one off (too small). I believe this is because the first call of move() isn't being counted but I don't know how to differentiate between the first call or subsequent calls in that recursive method. How can I modify my move() method so it returns the correct number of destroyed blocks?

    Read the article

  • Why is my simple recusive method's final return value always off by 1?

    - by FrankTheTank
    I'm attempting to create a text-based version of this game: http://www.cse.nd.edu/java/SameGame.html Here is the code I have so far: #include <iostream> #include <vector> #include <ctime> class Clickomania { public: Clickomania(); std::vector<std::vector<int> > board; int move(int, int); bool isSolved(); void print(); void pushDown(); bool isValid(); }; Clickomania::Clickomania() : board(12, std::vector<int>(8,0)) { srand((unsigned)time(0)); for(int i = 0; i < 12; i++) { for(int j = 0; j < 8; j++) { int color = (rand() % 3) + 1; board[i][j] = color; } } } void Clickomania::pushDown() { for(int i = 0; i < 8; i++) { for(int j = 0; j < 12; j++) { if (board[j][i] == 0) { for(int k = j; k > 0; k--) { board[k][i] = board[k-1][i]; } board[0][i] = 0; } } } } int Clickomania::move(int row, int col) { bool match = false; int totalMatches = 0; if (row > 12 || row < 0 || col > 8 || col < 0) { return 0; } int currentColor = board[row][col]; board[row][col] = 0; if ((row + 1) < 12) { if (board[row+1][col] == currentColor) { match = true; totalMatches++; totalMatches += move(row+1, col); } } if ((row - 1) >= 0) { if (board[row-1][col] == currentColor) { match = true; totalMatches++; totalMatches += move(row-1, col); } } if ((col + 1) < 8) { if (board[row][col+1] == currentColor) { match = true; totalMatches++; totalMatches += move(row, col+1); } } if ((col - 1) >= 0) { if (board[row][col-1] == currentColor) { match = true; totalMatches++; totalMatches += move(row, col-1); } } return totalMatches; } void Clickomania::print() { for(int i = 0; i < 12; i++) { for(int j = 0; j < 8; j++) { std::cout << board[i][j]; } std::cout << "\n"; } } int main() { Clickomania game; game.print(); int row; int col; std::cout << "Enter row: "; std::cin >> row; std::cout << "Enter col: "; std::cin >> col; int numDestroyed = game.move(row,col); game.print(); std::cout << "Destroyed: " << numDestroyed << "\n"; } The method that is giving me trouble is my "move" method. This method, given a pair of coordinates, should delete all the squares at that coordinate with the same number and likewise with all the squares with the same number connected to it. If you play the link I gave above you'll see how the deletion works on a click. int Clickomania::move(int row, int col) { bool match = false; int totalMatches = 0; if (row > 12 || row < 0 || col > 8 || col < 0) { return 0; } int currentColor = board[row][col]; board[row][col] = 0; if ((row + 1) < 12) { if (board[row+1][col] == currentColor) { match = true; totalMatches++; totalMatches += move(row+1, col); } } if ((row - 1) >= 0) { if (board[row-1][col] == currentColor) { match = true; totalMatches++; totalMatches += move(row-1, col); } } if ((col + 1) < 8) { if (board[row][col+1] == currentColor) { match = true; totalMatches++; totalMatches += move(row, col+1); } } if ((col - 1) >= 0) { if (board[row][col-1] == currentColor) { match = true; totalMatches++; totalMatches += move(row, col-1); } } return totalMatches; } My move() method above works fine, as in, it will delete the appropriate "blocks" and replace them with zeros. However, the number of destroyed (value returned) is always one off (too small). I believe this is because the first call of move() isn't being counted but I don't know how to differentiate between the first call or subsequent calls in that recursive method. How can I modify my move() method so it returns the correct number of destroyed blocks?

    Read the article

  • Finding the left-most and right-most points of a list. std::find_if the right way to go?

    - by Tom
    Hi, I have a list of Point objects, (each one with x,y properties) and would like to find the left-most and right-most points. I've been trying to do it with find_if, but i'm not sure its the way to go, because i can't seem to pass a comparator instance. Is find_if the way to go? Seems not. So, is there an algorithm in <algorithm> to achieve this? Thanks in advance. #include <iostream> #include <list> #include <algorithm> using namespace std; typedef struct Point{ float x; float y; } Point; bool left(Point& p1,Point& p2) { return p1.x < p2.x; } int main(){ Point p1 ={-1,0}; Point p2 ={1,0}; Point p3 ={5,0}; Point p4 ={7,0}; list <Point> points; points.push_back(p1); points.push_back(p2); points.push_back(p3); points.push_back(p4); //Should return an interator to p1. find_if(points.begin(),points.end(),left); return 0; }

    Read the article

  • Query on simple C++ threadpool implementation

    - by ticketman
    Stackoverflow has been a tremendous help to me and I'd to give something back to the community. I have been implementing a simple threadpool using the tinythread C++ portable thread library, using what I have learnt from Stackoverflow. I am new to thread programming, so not that comfortable with mutexes, etc. I have a question best asked after presenting the code (which runs quite well under Linux): // ThreadPool.h class ThreadPool { public: ThreadPool(); ~ThreadPool(); // Creates a pool of threads and gets them ready to be used void CreateThreads(int numOfThreads); // Assigns a job to a thread in the pool, but doesn't start the job // Each SubmitJob call will use up one thread of the pool. // This operation can only be undone by calling StartJobs and // then waiting for the jobs to complete. On completion, // new jobs may be submitted. void SubmitJob( void (*workFunc)(void *), void *workData ); // Begins execution of all the jobs in the pool. void StartJobs(); // Waits until all jobs have completed. // The wait will block the caller. // On completion, new jobs may be submitted. void WaitForJobsToComplete(); private: enum typeOfWorkEnum { e_work, e_quit }; class ThreadData { public: bool ready; // thread has been created and is ready for work bool haveWorkToDo; typeOfWorkEnum typeOfWork; // Pointer to the work function each thread has to call. void (*workFunc)(void *); // Pointer to work data void *workData; ThreadData() : ready(false), haveWorkToDo(false) { }; }; struct ThreadArgStruct { ThreadPool *threadPoolInstance; int threadId; }; // Data for each thread ThreadData *m_ThreadData; ThreadPool(ThreadPool const&); // copy ctor hidden ThreadPool& operator=(ThreadPool const&); // assign op. hidden // Static function that provides the function pointer that a thread can call // By including the ThreadPool instance in the void * parameter, // we can use it to access other data and methods in the ThreadPool instance. static void ThreadFuncWrapper(void *arg) { ThreadArgStruct *threadArg = static_cast<ThreadArgStruct *>(arg); threadArg->threadPoolInstance->ThreadFunc(threadArg->threadId); } // The function each thread calls void ThreadFunc( int threadId ); // Called by the thread pool destructor void DestroyThreadPool(); // Total number of threads available // (fixed on creation of thread pool) int m_numOfThreads; int m_NumOfThreadsDoingWork; int m_NumOfThreadsGivenJobs; // List of threads std::vector<tthread::thread *> m_ThreadList; // Condition variable to signal each thread has been created and executing tthread::mutex m_ThreadReady_mutex; tthread::condition_variable m_ThreadReady_condvar; // Condition variable to signal each thread to start work tthread::mutex m_WorkToDo_mutex; tthread::condition_variable m_WorkToDo_condvar; // Condition variable to signal the main thread that // all threads in the pool have completed their work tthread::mutex m_WorkCompleted_mutex; tthread::condition_variable m_WorkCompleted_condvar; }; cpp file: // // ThreadPool.cpp // #include "ThreadPool.h" // This is the thread function for each thread. // All threads remain in this function until // they are asked to quit, which only happens // when terminating the thread pool. void ThreadPool::ThreadFunc( int threadId ) { ThreadData *myThreadData = &m_ThreadData[threadId]; std::cout << "Hello world: Thread " << threadId << std::endl; // Signal that this thread is ready m_ThreadReady_mutex.lock(); myThreadData->ready = true; m_ThreadReady_condvar.notify_one(); // notify the main thread m_ThreadReady_mutex.unlock(); while(true) { //tthread::lock_guard<tthread::mutex> guard(m); m_WorkToDo_mutex.lock(); while(!myThreadData->haveWorkToDo) // check for work to do m_WorkToDo_condvar.wait(m_WorkToDo_mutex); // if no work, wait here myThreadData->haveWorkToDo = false; // need to do this before unlocking the mutex m_WorkToDo_mutex.unlock(); // Do the work switch(myThreadData->typeOfWork) { case e_work: std::cout << "Thread " << threadId << ": Woken with work to do\n"; // Do work myThreadData->workFunc(myThreadData->workData); std::cout << "#Thread " << threadId << ": Work is completed\n"; break; case e_quit: std::cout << "Thread " << threadId << ": Asked to quit\n"; return; // ends the thread } // Now to signal the main thread that my work is completed m_WorkCompleted_mutex.lock(); m_NumOfThreadsDoingWork--; // Unsure if this 'if' would make the program more efficient // if(NumOfThreadsDoingWork == 0) m_WorkCompleted_condvar.notify_one(); // notify the main thread m_WorkCompleted_mutex.unlock(); } } ThreadPool::ThreadPool() { m_numOfThreads = 0; m_NumOfThreadsDoingWork = 0; m_NumOfThreadsGivenJobs = 0; } ThreadPool::~ThreadPool() { if(m_numOfThreads) { DestroyThreadPool(); delete [] m_ThreadData; } } void ThreadPool::CreateThreads(int numOfThreads) { // Check a thread pool has already been created if(m_numOfThreads > 0) return; m_NumOfThreadsGivenJobs = 0; m_NumOfThreadsDoingWork = 0; m_numOfThreads = numOfThreads; m_ThreadData = new ThreadData[m_numOfThreads]; ThreadArgStruct threadArg; for(int i=0; i<m_numOfThreads; ++i) { threadArg.threadId = i; threadArg.threadPoolInstance = this; // Creates the thread and save in a list so we can destroy it later m_ThreadList.push_back( new tthread::thread( ThreadFuncWrapper, (void *)&threadArg ) ); // It takes a little time for a thread to get established. // Best wait until it gets established before creating the next thread. m_ThreadReady_mutex.lock(); while(!m_ThreadData[i].ready) // Check if thread is ready m_ThreadReady_condvar.wait(m_ThreadReady_mutex); // If not, wait here m_ThreadReady_mutex.unlock(); } } // Adds a job to the batch, but doesn't start the job void ThreadPool::SubmitJob(void (*workFunc)(void *), void *workData) { // Check that the thread pool has been created if(!m_numOfThreads) return; if(m_NumOfThreadsGivenJobs >= m_numOfThreads) return; m_ThreadData[m_NumOfThreadsGivenJobs].workFunc = workFunc; m_ThreadData[m_NumOfThreadsGivenJobs].workData = workData; std::cout << "Submitted job " << m_NumOfThreadsGivenJobs << std::endl; m_NumOfThreadsGivenJobs++; } void ThreadPool::StartJobs() { // Check that the thread pool has been created // and some jobs have been assigned if(!m_numOfThreads || !m_NumOfThreadsGivenJobs) return; // Set 'haveworkToDo' flag for all threads m_WorkToDo_mutex.lock(); for(int i=0; i<m_NumOfThreadsGivenJobs; ++i) m_ThreadData[i].haveWorkToDo = true; m_NumOfThreadsDoingWork = m_NumOfThreadsGivenJobs; // Reset this counter so we can resubmit jobs later m_NumOfThreadsGivenJobs = 0; // Notify all threads they have work to do m_WorkToDo_condvar.notify_all(); m_WorkToDo_mutex.unlock(); } void ThreadPool::WaitForJobsToComplete() { // Check that a thread pool has been created if(!m_numOfThreads) return; m_WorkCompleted_mutex.lock(); while(m_NumOfThreadsDoingWork > 0) // Check if all threads have completed their work m_WorkCompleted_condvar.wait(m_WorkCompleted_mutex); // If not, wait here m_WorkCompleted_mutex.unlock(); } void ThreadPool::DestroyThreadPool() { std::cout << "Ask threads to quit\n"; m_WorkToDo_mutex.lock(); for(int i=0; i<m_numOfThreads; ++i) { m_ThreadData[i].haveWorkToDo = true; m_ThreadData[i].typeOfWork = e_quit; } m_WorkToDo_condvar.notify_all(); m_WorkToDo_mutex.unlock(); // As each thread terminates, catch them here for(int i=0; i<m_numOfThreads; ++i) { tthread::thread *t = m_ThreadList[i]; // Wait for thread to complete t->join(); } m_numOfThreads = 0; } Example of usage: (this calculates pi-squared/6) struct CalculationDataStruct { int inputVal; double outputVal; }; void LongCalculation( void *theSums ) { CalculationDataStruct *sums = (CalculationDataStruct *)theSums; int terms = sums->inputVal; double sum; for(int i=1; i<terms; i++) sum += 1.0/( double(i)*double(i) ); sums->outputVal = sum; } int main(int argc, char** argv) { int numThreads = 10; // Create pool ThreadPool threadPool; threadPool.CreateThreads(numThreads); // Create thread workspace CalculationDataStruct sums[numThreads]; // Set up jobs for(int i=0; i<numThreads; i++) { sums[i].inputVal = 3000*(i+1); threadPool.SubmitJob(LongCalculation, &sums[i]); } // Run the jobs threadPool.StartJobs(); threadPool.WaitForJobsToComplete(); // Print results for(int i=0; i<numThreads; i++) std::cout << "Sum of " << sums[i].inputVal << " terms is " << sums[i].outputVal << std::endl; return 0; } Question: In the ThreadPool::ThreadFunc method, would better performance be obtained if the following if statement if(NumOfThreadsDoingWork == 0) was included? Also, I'd be grateful of criticisms and ways to improve the code. At the same time, I hope the code is of use to others.

    Read the article

  • C++ Little Wonders: The C++11 auto keyword redux

    - by James Michael Hare
    I’ve decided to create a sub-series of my Little Wonders posts to focus on C++.  Just like their C# counterparts, these posts will focus on those features of the C++ language that can help improve code by making it easier to write and maintain.  The index of the C# Little Wonders can be found here. This has been a busy week with a rollout of some new website features here at my work, so I don’t have a big post for this week.  But I wanted to write something up, and since lately I’ve been renewing my C++ skills in a separate project, it seemed like a good opportunity to start a C++ Little Wonders series.  Most of my development work still tends to focus on C#, but it was great to get back into the saddle and renew my C++ knowledge.  Today I’m going to focus on a new feature in C++11 (formerly known as C++0x, which is a major move forward in the C++ language standard).  While this small keyword can seem so trivial, I feel it is a big step forward in improving readability in C++ programs. The auto keyword If you’ve worked on C++ for a long time, you probably have some passing familiarity with the old auto keyword as one of those rarely used C++ keywords that was almost never used because it was the default. That is, in the code below (before C++11): 1: int foo() 2: { 3: // automatic variables (allocated and deallocated on stack) 4: int x; 5: auto int y; 6:  7: // static variables (retain their value across calls) 8: static int z; 9:  10: return 0; 11: } The variable x is assumed to be auto because that is the default, thus it is unnecessary to specify it explicitly as in the declaration of y below that.  Basically, an auto variable is one that is allocated and de-allocated on the stack automatically.  Contrast this to static variables, that are allocated statically and exist across the lifetime of the program. Because auto was so rarely (if ever) used since it is the norm, they decided to remove it for this purpose and give it new meaning in C++11.  The new meaning of auto: implicit typing Now, if your compiler supports C++ 11 (or at least a good subset of C++11 or 0x) you can take advantage of type inference in C++.  For those of you from the C# world, this means that the auto keyword in C++ now behaves a lot like the var keyword in C#! For example, many of us have had to declare those massive type declarations for an iterator before.  Let’s say we have a std::map of std::string to int which will map names to ages: 1: std::map<std::string, int> myMap; And then let’s say we want to find the age of a given person: 1: // Egad that's a long type... 2: std::map<std::string, int>::const_iterator pos = myMap.find(targetName); Notice that big ugly type definition to declare variable pos?  Sure, we could shorten this by creating a typedef of our specific map type if we wanted, but now with the auto keyword there’s no need: 1: // much shorter! 2: auto pos = myMap.find(targetName); The auto now tells the compiler to determine what type pos should be based on what it’s being assigned to.  This is not dynamic typing, it still determines the type as if it were explicitly declared and once declared that type cannot be changed.  That is, this is invalid: 1: // x is type int 2: auto x = 42; 3:  4: // can't assign string to int 5: x = "Hello"; Once the compiler determines x is type int it is exactly as if we typed int x = 42; instead, so don’t' confuse it with dynamic typing, it’s still very type-safe. An interesting feature of the auto keyword is that you can modify the inferred type: 1: // declare method that returns int* 2: int* GetPointer(); 3:  4: // p1 is int*, auto inferred type is int 5: auto *p1 = GetPointer(); 6:  7: // ps is int*, auto inferred type is int* 8: auto p2 = GetPointer(); Notice in both of these cases, p1 and p2 are determined to be int* but in each case the inferred type was different.  because we declared p1 as auto *p1 and GetPointer() returns int*, it inferred the type int was needed to complete the declaration.  In the second case, however, we declared p2 as auto p2 which means the inferred type was int*.  Ultimately, this make p1 and p2 the same type, but which type is inferred makes a difference, if you are chaining multiple inferred declarations together.  In these cases, the inferred type of each must match the first: 1: // Type inferred is int 2: // p1 is int* 3: // p2 is int 4: // p3 is int& 5: auto *p1 = GetPointer(), p2 = 42, &p3 = p2; Note that this works because the inferred type was int, if the inferred type was int* instead: 1: // syntax error, p1 was inferred to be int* so p2 and p3 don't make sense 2: auto p1 = GetPointer(), p2 = 42, &p3 = p2; You could also use const or static to modify the inferred type: 1: // inferred type is an int, theAnswer is a const int 2: const auto theAnswer = 42; 3:  4: // inferred type is double, Pi is a static double 5: static auto Pi = 3.1415927; Thus in the examples above it inferred the types int and double respectively, which were then modified to const and static. Summary The auto keyword has gotten new life in C++11 to allow you to infer the type of a variable from it’s initialization.  This simple little keyword can be used to cut down large declarations for complex types into a much more readable form, where appropriate.   Technorati Tags: C++, C++11, Little Wonders, auto

    Read the article

  • How to make Eclipse CDT's Linux GCC toolchain resolve C++ standard library headers?

    - by Muhammad Khan
    In Ubuntu 12.04 LTS I installed the Eclipse CDT plugin and opened the new hello world project to just test everything out. When I was creating the project, I chose the only toolchain: "Linux GCC" When the project is created, however, it says that #include<iostream> #include<cstdlb> are unresolved. Thus, lines with cout and endl can't be used and it cannot find std. using namespace std; is also causing problems. How can I get my #include directives for standard library headers recognized, to support code using the std namespace?

    Read the article

  • Objects won't render when Texture Compression + Mipmapping is Enabled

    - by felipedrl
    I'm optimizing my game and I've just implemented compressed (DXTn) texture loading in OpenGL. I've worked my way removing bugs but I can't figure out this one: objects w/ DXTn + mipmapped textures are not being rendered. It's not like they are appearing with a flat color, they just don't appear at all. DXTn textured objs render and mipmapped non-compressed textures render just fine. The texture in question is 256x256 I generate the mips all the way down 4x4, i.e 1 block. I've checked on gDebugger and it display all the levels (7) just fine. I'm using GL_LINEAR_MIPMAP_NEAREST for min filter and GL_LINEAR for mag one. The texture is being compressed and mipmaps being created offline with Paint.NET tool using super sampling method. (I also tried bilinear just in case) Source follow: [SNIPPET 1: Loading DDS into sys memory + Initializing Object] // Read header DDSHeader header; file.read(reinterpret_cast<char*>(&header), sizeof(DDSHeader)); uint pos = static_cast<uint>(file.tellg()); file.seekg(0, std::ios_base::end); uint dataSizeInBytes = static_cast<uint>(file.tellg()) - pos; file.seekg(pos, std::ios_base::beg); // Read file data mData = new unsigned char[dataSizeInBytes]; file.read(reinterpret_cast<char*>(mData), dataSizeInBytes); file.close(); mMipmapCount = header.mipmapcount; mHeight = header.height; mWidth = header.width; mCompressionType = header.pf.fourCC; // Only support files divisible by 4 (for compression blocks algorithms) massert(mWidth % 4 == 0 && mHeight % 4 == 0); massert(mCompressionType == NO_COMPRESSION || mCompressionType == COMPRESSION_DXT1 || mCompressionType == COMPRESSION_DXT3 || mCompressionType == COMPRESSION_DXT5); // Allow textures up to 65536x65536 massert(header.mipmapcount <= MAX_MIPMAP_LEVELS); mTextureFilter = TextureFilter::LINEAR; if (mMipmapCount > 0) { mMipmapFilter = MipmapFilter::NEAREST; } else { mMipmapFilter = MipmapFilter::NO_MIPMAP; } mBitsPerPixel = header.pf.bitcount; if (mCompressionType == NO_COMPRESSION) { if (header.pf.flags & DDPF_ALPHAPIXELS) { // The only format supported w/ alpha is A8R8G8B8 massert(header.pf.amask == 0xFF000000 && header.pf.rmask == 0xFF0000 && header.pf.gmask == 0xFF00 && header.pf.bmask == 0xFF); mInternalFormat = GL_RGBA8; mFormat = GL_BGRA; mDataType = GL_UNSIGNED_BYTE; } else { massert(header.pf.rmask == 0xFF0000 && header.pf.gmask == 0xFF00 && header.pf.bmask == 0xFF); mInternalFormat = GL_RGB8; mFormat = GL_BGR; mDataType = GL_UNSIGNED_BYTE; } } else { uint blockSizeInBytes = 16; switch (mCompressionType) { case COMPRESSION_DXT1: blockSizeInBytes = 8; if (header.pf.flags & DDPF_ALPHAPIXELS) { mInternalFormat = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; } else { mInternalFormat = GL_COMPRESSED_RGB_S3TC_DXT1_EXT; } break; case COMPRESSION_DXT3: mInternalFormat = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; break; case COMPRESSION_DXT5: mInternalFormat = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; break; default: // Not Supported (DXT2, DXT4 or any compression format) massert(false); } } [SNIPPET 2: Uploading into video memory] massert(mData != NULL); glGenTextures(1, &mHandle); massert(mHandle!=0); glBindTexture(GL_TEXTURE_2D, mHandle); commitFiltering(); uint offset = 0; Renderer* renderer = Renderer::getInstance(); switch (mInternalFormat) { case GL_RGB: case GL_RGBA: case GL_RGB8: case GL_RGBA8: for (uint i = 0; i < mMipmapCount + 1; ++i) { uint width = std::max(1U, mWidth >> i); uint height = std::max(1U, mHeight >> i); glTexImage2D(GL_TEXTURE_2D, i, mInternalFormat, width, height, mHasBorder, mFormat, mDataType, &mData[offset]); offset += width * height * (mBitsPerPixel / 8); } break; case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: { uint blockSize = 16; if (mInternalFormat == GL_COMPRESSED_RGB_S3TC_DXT1_EXT || mInternalFormat == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT) { blockSize = 8; } uint width = mWidth; uint height = mHeight; for (uint i = 0; i < mMipmapCount + 1; ++i) { uint nBlocks = ((width + 3) / 4) * ((height + 3) / 4); // Only POT textures allowed for mipmapping massert(width % 4 == 0 && height % 4 == 0); glCompressedTexImage2D(GL_TEXTURE_2D, i, mInternalFormat, width, height, mHasBorder, nBlocks * blockSize, &mData[offset]); offset += nBlocks * blockSize; if (width <= 4 && height <= 4) { break; } width = std::max(4U, width / 2); height = std::max(4U, height / 2); } break; } default: // Not Supported massert(false); } Also I don't understand the "+3" in the block size computation but looking for a solution for my problema I've encountered people defining it as that. I guess it won't make a differente for POT textures but I put just in case. Thanks.

    Read the article

  • A question on nature of generated assembly in C++ and code Algebra

    - by Reetesh Mukul
    I wrote this code: #include <iostream> int main() { int a; std::cin >> a; if(a*a== 3){ std::cout << a; } return 0; } On MSVC I turned ON all optimization flags. I expected that since a*a can never be 3, so compiler should not generate code for the section: if(a*a== 3){ std::cout << a; } However it generated code for the section. I did not check GCC or LLVM/CLang. What are the limits of expectation from a C++ compiler in these scenarios?

    Read the article

  • C++: Checking if an object faces a point (within a certain range)

    - by bojoradarial
    I have been working on a shooter game in C++, and am trying to add a feature whereby missiles shot must be within 90 degrees (PI/2 radians) of the direction the ship is facing. The missiles will be shot towards the mouse. My idea is that the ship's angle of rotation is compared with the angle between the ship and the mouse (std::atan2(mouseY - shipY, mouseX - shipX)), and if the difference is less than PI/4 (45 degrees) then the missile can be fired. However, I can't seem to get this to work. The ship's angle of rotation is increased and decreased with the A and D keys, so it is possible that it isn't between 0 and 2*PI, hence the use of fmod() below. Code: float userRotation = std::fmod(user->Angle(), 6.28318f); if (std::abs(userRotation - missileAngle) > 0.78f) return; Any help would be appreciated. Thanks!

    Read the article

  • Storing and reading file paths from _TCHAR *argv[]

    - by ArsenArsen
    How to convert from _TCHAR* to "" and to keep all : and /? I tried: int _tmain(int argc, _TCHAR* argv[]) { if(!argv[1]){ std::cout<<"No Variables.\r\n"; system("PAUSE"); return 0; std::exit; } std::cout<<"Path: "<<argv[1]<<"\r\n"; system("PAUSE"); return 0; } But, output is either "No variables." or "Path: C" (when I changed _TCHAR to const char and char) or either "Path: 00038706"

    Read the article

  • What is wrong with this code for reading binary files? [on hold]

    - by qed
    What is wrong with this code for reading binary files? It compiles OK, but will not print out the file as planned, in fact, it prints nothing at all. #include <iostream> #include <fstream> int main(int argc, const char *argv[]) { if (argc < 2) { ::std::cerr << "usage: " << argv[0] << " <filename>\n"; return 1; } ::std::basic_ifstream<unsigned char> in(argv[1], ::std::ios::binary); unsigned char uc; while (in.get(uc)) { printf("%02X ", uc); } // TODO: error handling, in case the file could not be opened or read return 0; }

    Read the article

  • MacBook OS X applications crashing on startup

    - by Ryan Doom
    Closed my computer last night, went home. Opened it and it had restarted. Now when I open a couple programs such as Adobe Fireworks or Appcelerator Titanium they throw up a nasty error like below. Other programs (Chrome, Firefox, Textmate, Versions) work fine. Any thoughts on this? I haven't owned my MacBook long so I'm not even aware of the right tools or places to look to track this down. Any help would be most appreciated. It's making it hard to get my work done :] If it helps at all both those programs were probably open when it restarted. From the look of it I'm not sure if it's a permissions error or something? I completely re-installed one of the applications (Appcelerator Titanium). Didn't seem to help. Process: Adobe Fireworks CS5 [1044] Path: /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/MacOS/Adobe Fireworks CS5 Identifier: com.macromedia.fireworks Version: Adobe Fireworks CS5 version 11.0.0.484 (11.0.0) Code Type: X86 (Native) Parent Process: launchd [87] Date/Time: 2011-02-18 09:45:47.689 -0500 OS Version: Mac OS X 10.6.6 (10J567) Report Version: 6 Interval Since Last Report: 12983 sec Crashes Since Last Report: 6 Per-App Interval Since Last Report: 325365 sec Per-App Crashes Since Last Report: 4 Anonymous UUID: D16EAFE7-2F04-44D4-A984-5902A6EF8943 Exception Type: EXC_BAD_ACCESS (SIGBUS) Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000b0327ff8 Crashed Thread: 7 Thread 0: Dispatch queue: com.apple.main-thread 0 libSystem.B.dylib 0x97dd0142 semaphore_wait_signal_trap + 10 1 libSystem.B.dylib 0x97dd5c46 pthread_mutex_lock + 490 2 libstdc++.6.dylib 0x91887559 __gnu_cxx::__recursive_mutex::lock() + 17 3 libstdc++.6.dylib 0x918874e6 __cxa_guard_acquire + 68 4 libTrueTypeScaler.dylib 0x91c92ab3 TTScalerInfo() + 50 5 libFontParser.dylib 0x9979a5f1 TTrueTypeScaler::CreateTrueTypeScaler() + 43 6 libSystem.B.dylib 0x97dee900 pthread_once + 82 7 libFontParser.dylib 0x9979a575 TTrueTypeScaler::GetTrueTypeScaler() + 47 8 libFontParser.dylib 0x9979a520 TTrueTypeScaler::TTrueTypeScaler(TScalerStrike const&) + 26 9 libFontParser.dylib 0x9979a4be TFontScaler::CreateFontScaler(TScalerStrike const&) + 52 10 libFontParser.dylib 0x9979bd93 FPFontGetGlyphsForUnichars + 344 11 com.apple.CoreText 0x98255cfe TBaseFont::CalculateFontMetrics(bool) const + 342 12 com.apple.CoreText 0x98255b55 TBaseFont::InitFontMetrics() const + 51 13 com.apple.CoreText 0x98255959 TBaseFont::GetStrikeMetrics(float, CGAffineTransform const*, bool) const + 81 14 com.apple.CoreText 0x982558cd TFont::InitStrikeMetrics() const + 55 15 com.apple.CoreText 0x982592cf CTFontGetAscent + 49 16 com.apple.AppKit 0x989f5d08 __NSFontInstanceInfoInitializeMetricsInfo + 48 17 com.apple.AppKit 0x989f5cbc -[__NSSharedFontInstanceInfo _defaultLineHeight:] + 40 18 com.apple.AppKit 0x98f3c5e8 +[NSStringDrawingTextStorage _fastDrawString:attributes:length:inRect:graphicsContext:baselineRendering:usesFontLeading:usesScreenFont:typesetterBehavior:paragraphStyle:lineBreakMode:boundingRect:padding:scrollable:] + 2041 19 com.apple.AppKit 0x98abd2d9 _NSStringDrawingCore + 1555 20 com.apple.AppKit 0x98abca8b _NSDrawTextCell + 3465 21 com.apple.AppKit 0x98ac6185 -[NSTextFieldCell drawInteriorWithFrame:inView:] + 764 22 com.apple.AppKit 0x98ac5d26 -[NSTextFieldCell drawWithFrame:inView:] + 816 23 com.apple.AppKit 0x98ac03de -[NSControl drawRect:] + 589 24 com.apple.AppKit 0x98ab882a -[NSView _drawRect:clip:] + 3510 25 com.apple.AppKit 0x98ab74c8 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 1600 26 com.apple.AppKit 0x98ab77fd -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421 27 com.apple.AppKit 0x98ab77fd -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421 28 com.apple.AppKit 0x98ab59e7 -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 711 29 com.apple.AppKit 0x98b54aa3 -[NSNextStepFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 311 30 com.apple.AppKit 0x98ab1ea2 -[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] + 3309 31 com.apple.AppKit 0x98a12a57 -[NSView displayIfNeeded] + 818 32 com.apple.AppKit 0x989c6661 -[NSNextStepFrame displayIfNeeded] + 98 33 com.apple.AppKit 0x98b55390 -[NSWindow display] + 75 34 com.macromedia.fireworks 0x00bade98 0x1000 + 12242584 35 com.macromedia.fireworks 0x0089f778 0x1000 + 9037688 36 libPowerPlant2.dylib 0x08109722 FW_PowerPlant::LCarbonApp::Run() + 54 37 com.macromedia.fireworks 0x008a138c 0x1000 + 9044876 38 com.macromedia.fireworks 0x00003596 0x1000 + 9622 Thread 1: Dispatch queue: com.apple.libdispatch-manager 0 libSystem.B.dylib 0x97df6982 kevent + 10 1 libSystem.B.dylib 0x97df709c _dispatch_mgr_invoke + 215 2 libSystem.B.dylib 0x97df6559 _dispatch_queue_invoke + 163 3 libSystem.B.dylib 0x97df62fe _dispatch_worker_thread2 + 240 4 libSystem.B.dylib 0x97df5d81 _pthread_wqthread + 390 5 libSystem.B.dylib 0x97df5bc6 start_wqthread + 30 Thread 2: 0 libSystem.B.dylib 0x97df5a12 __workq_kernreturn + 10 1 libSystem.B.dylib 0x97df5fa8 _pthread_wqthread + 941 2 libSystem.B.dylib 0x97df5bc6 start_wqthread + 30 Thread 3: 0 libSystem.B.dylib 0x97dd015a semaphore_timedwait_signal_trap + 10 1 libSystem.B.dylib 0x97dfdce5 _pthread_cond_wait + 1066 2 libSystem.B.dylib 0x97e2cac8 pthread_cond_timedwait_relative_np + 47 3 ...ple.CoreServices.CarbonCore 0x97af4ecd TSWaitOnConditionTimedRelative + 242 4 ...ple.CoreServices.CarbonCore 0x97af4c0b TSWaitOnSemaphoreCommon + 511 5 ...ple.CoreServices.CarbonCore 0x97b18e33 TimerThread + 97 6 libSystem.B.dylib 0x97dfd85d _pthread_start + 345 7 libSystem.B.dylib 0x97dfd6e2 thread_start + 34 Thread 4: 0 libSystem.B.dylib 0x97dd00fa mach_msg_trap + 10 1 libSystem.B.dylib 0x97dd0867 mach_msg + 68 2 ...ple.CoreServices.CarbonCore 0x97b9e0d0 YieldToThread + 446 3 ...ple.CoreServices.CarbonCore 0x97b9e1d3 SetThreadState + 134 4 ...ple.CoreServices.CarbonCore 0x97b9e28e SetThreadStateEndCritical + 111 5 libPowerPlant2.dylib 0x0811ab51 FW_PowerPlant::LThread::SemWait(FW_PowerPlant::LSemaphore*, long, QHdr&, unsigned char&) + 119 6 libPowerPlant2.dylib 0x08119b07 FW_PowerPlant::LSemaphore::BlockThread(long) + 61 7 libPowerPlant2.dylib 0x08119b6d FW_PowerPlant::LSemaphore::Wait(long) + 71 8 libPowerPlant2.dylib 0x0811af70 FW_PowerPlant::LThread::Cleanup::Run() + 32 9 libPowerPlant2.dylib 0x0811b94e FW_PowerPlant::LThread::DoEntry(void*) + 30 10 ...ple.CoreServices.CarbonCore 0x97b9e85f CooperativeThread + 309 11 libSystem.B.dylib 0x97dfd85d _pthread_start + 345 12 libSystem.B.dylib 0x97dfd6e2 thread_start + 34 Thread 5: 0 libSystem.B.dylib 0x97dd0142 semaphore_wait_signal_trap + 10 1 libSystem.B.dylib 0x97dfdcfc _pthread_cond_wait + 1089 2 libSystem.B.dylib 0x97e4646f pthread_cond_wait + 48 3 com.adobe.amt.services 0x1dd73126 AMTConditionLock::LockWhenCondition(int) + 46 4 com.adobe.amt.services 0x1dd6bdb0 _AMTThreadedPCDService::PCDThreadWorker(_AMTThreadedPCDService*) + 116 5 com.adobe.amt.services 0x1dd7318c AMTThread::Worker(void*) + 24 6 libSystem.B.dylib 0x97dfd85d _pthread_start + 345 7 libSystem.B.dylib 0x97dfd6e2 thread_start + 34 Thread 6: 0 libSystem.B.dylib 0x97dfe0a6 __semwait_signal + 10 1 libSystem.B.dylib 0x97dfdd62 _pthread_cond_wait + 1191 2 libSystem.B.dylib 0x97dff9f8 pthread_cond_wait$UNIX2003 + 73 3 ...ple.CoreServices.CarbonCore 0x97b0951e TSWaitOnCondition + 126 4 ...ple.CoreServices.CarbonCore 0x97af4ea5 TSWaitOnConditionTimedRelative + 202 5 ...ple.CoreServices.CarbonCore 0x97af0873 MPWaitOnQueue + 250 6 com.macromedia.fireworks 0x00ae43cf 0x1000 + 11416527 7 ...ple.CoreServices.CarbonCore 0x97ad485a PrivateMPEntryPoint + 68 8 libSystem.B.dylib 0x97dfd85d _pthread_start + 345 9 libSystem.B.dylib 0x97dfd6e2 thread_start + 34 Thread 7 Crashed: 0 libstdc++.6.dylib 0x9184e00c std::basic_ofstream<char, std::char_traits<char> >::open(char const*, std::_Ios_Openmode) + 16 1 libstdc++.6.dylib 0x9184fe9b std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(char const*, std::_Ios_Openmode) + 211 2 ...pdaterNotificationFramework 0x1e824779 ESDifstream::ESDifstream(std::string const&, char const*, std::_Ios_Openmode) + 73 3 ...pdaterNotificationFramework 0x1e821b6a esd::ExpatDOMBuilder<esd::XMLDocumentNode>::ParseFile(std::string const&, bool) + 96 4 ...pdaterNotificationFramework 0x1e822da4 esd::PrefsWriter::SetPrefsPath(std::string const&) + 206 5 ...pdaterNotificationFramework 0x1e8449b3 AdobeUpdaterPrefs::AdobeUpdaterPrefs() + 8609 6 ...pdaterNotificationFramework 0x1e8459f4 AdobeUpdaterPrefs::GetAdobeUpdaterPrefs() + 68 7 ...pdaterNotificationFramework 0x1e820728 UpdaterNotificationsImpl::InitLogFile() + 48 8 ...pdaterNotificationFramework 0x1e820d49 UpdaterNotificationsImpl::Instance() + 53 9 ...pdaterNotificationFramework 0x1e823638 UpdaterNotificationsIsUpdaterEnabled + 22 10 com.adobe.amt.services 0x1dd69d15 _AMTAUMService::IsUpdaterEnabled(T_CSUStatusMajor*, int*) + 359 11 com.adobe.amtlib 0x01f5501c AMTAUMServiceIsUpdaterEnabled + 290 12 com.adobe.amtlib 0x01f1f789 AMTImpl::CallMenuEnablers() + 71 13 com.adobe.amtlib 0x01f260fa AMTImpl::DoLaunchWorkflow(AMTImpl::LaunchSequence) + 1664 14 com.adobe.amtlib 0x01f26a5d AMTImpl::DoValidateWorkflow(AMTImpl::LaunchSequence) + 293 15 com.adobe.amtlib 0x01f26cf5 AMTImpl::DoPreValidateWorkflow() + 119 16 com.adobe.amtlib 0x01f26e71 AMTImpl::ServiceLoaderThread(void*) + 45 17 com.adobe.amtlib 0x01f54c48 AMTThread::Worker(void*) + 24 18 libSystem.B.dylib 0x97dfd85d _pthread_start + 345 19 libSystem.B.dylib 0x97dfd6e2 thread_start + 34 Thread 7 crashed with X86 Thread State (32-bit): eax: 0x00000016 ebx: 0x098c9a00 ecx: 0xa013dfc0 edx: 0x00000003 edi: 0x098c9a08 esi: 0x098c9c0c ebp: 0xb03a7448 esp: 0xb0327ff0 ss: 0x0000001f efl: 0x00010202 eip: 0x9184e00c cs: 0x00000017 ds: 0x0000001f es: 0x0000001f fs: 0x0000001f gs: 0x00000037 cr2: 0xb0327ff8 Binary Images: 0x1000 - 0x1448ff1 +com.macromedia.fireworks Adobe Fireworks CS5 version 11.0.0.484 (11.0.0) <38213EBD-FDB0-FC20-40E8-87935A5386BB> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/MacOS/Adobe Fireworks CS5 0x1e76000 - 0x1ec9ffb +com.adobe.headlights.LogSessionFramework ??? (2.0.1.011) <4F2BFF03-01D2-A07D-E5E2-7F88D4C2DEC4> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/LogSession.framework/Versions/A/LogSession 0x1f11000 - 0x1f77ffb +com.adobe.amtlib amtlib 3.0.0.64 (3.0.0.64) <DD471011-9120-1BC2-F1B5-D6FF09D0859F> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/amtlib.framework/Versions/A/amtlib 0x1fa7000 - 0x2146fe7 +com.adobe.owl AdobeOwl version 3.0.81 (3.0.81) <9C261D9E-9BD7-5DE6-5676-AEEF4828D17B> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AdobeOwl.framework/Versions/A/AdobeOwl 0x21af000 - 0x22e7fe7 +WRServices ??? (???) <52CE5B97-1E6A-92A2-EA70-93511AB7EA2E> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/WRServices.framework/Versions/A/WRServices 0x232d000 - 0x239afef +FileInfo ??? (???) <4A4C74F9-CA83-B174-F56D-F7671DC61389> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/FileInfo.framework/Versions/A/FileInfo 0x23b5000 - 0x23dbff6 +AdobeAXE8SharedExpat ??? (???) <5848BBCE-3A3E-66EE-5527-97A96F0CA4CC> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AdobeAXE8SharedExpat.framework/Versions/A/AdobeAXE8SharedExpat 0x23ec000 - 0x2407fff +AdobeBIB ??? (???) <3B3092DC-A296-9D1C-1922-D20E6A5A7D7E> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AdobeBIB.framework/Versions/A/AdobeBIB 0x2411000 - 0x2469ff7 +AdobeXMP ??? (???) <73329999-C364-2451-6574-4D0277057D19> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AdobeXMP.framework/Versions/A/AdobeXMP 0x2478000 - 0x2aa6fe7 +AdobeAGM ??? (???) <91D37E54-E985-47E1-2696-0BD7E4183132> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AdobeAGM.framework/Versions/A/AdobeAGM 0x2c04000 - 0x2d18fff +AdobeACE ??? (???) <DD291A17-ECF4-FE20-5837-AC1F5BC76940> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AdobeACE.framework/Versions/A/AdobeACE 0x2d3b000 - 0x302dff7 +AdobeCoolType ??? (???) <9FDD596D-9824-2BB9-5DA2-25DACAB6A324> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AdobeCoolType.framework/Versions/A/AdobeCoolType 0x30b5000 - 0x30d6ff7 +AdobeBIBUtils ??? (???) <E1FAA7A3-E807-DE5A-1F68-7A53780E8202> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AdobeBIBUtils.framework/Versions/A/AdobeBIBUtils 0x30e2000 - 0x311efff +AdobeARE ??? (???) <76851E91-2381-5D05-742C-BB24E4BAD276> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AdobeARE.framework/Versions/A/AdobeARE 0x3127000 - 0x34ffff7 +AdobeMPS ??? (???) <13614867-4D80-EB74-FA7F-6136492478BA> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AdobeMPS.framework/Versions/A/AdobeMPS 0x362e000 - 0x3c62feb +AdobePDFL ??? (???) <49D6D58A-1EBB-424A-4CB0-8F9691E0991D> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AdobePDFL.framework/Versions/A/AdobePDFL 0x3d8e000 - 0x4ad1fff +com.adobe.psl AdobePSL 12.0.0.7524 (12.0.0.7524) <CFBCB19A-03F7-D095-1F48-8D68F05A25C5> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AdobePSL.framework/Versions/A/AdobePSL 0x4e10000 - 0x4e9aff7 +com.adobe.AdobeScCore ScCore 4.1.7 (4.1.7.5522) <053A109E-3E3E-D3EE-7186-4920D927D2AD> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AdobeScCore.framework/Versions/A/AdobeScCore 0x4edd000 - 0x4fc0fef +AdobePDFPort ??? (???) <A2E6DCF7-283F-09E9-53AE-D5D84D020469> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AdobePDFPort.framework/Versions/A/AdobePDFPort 0x4ff5000 - 0x4ff8ff8 +com.adobe.ape.shim adbeape version 3.1.65.7508 (3.1.65.7508) <FFDDAB7A-220F-7344-F12B-010CA0C41DAB> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/adbeape.framework/Versions/A/adbeape 0x4ffe000 - 0x508fff7 +libicucnv.dylib.36.0 36.0.0 (compatibility 36.0.0) <581475CC-C039-1B42-49BA-71811D8B4E15> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/ICUConverter.framework/Versions/3.6/libicucnv.dylib.36.0 0x50ae000 - 0x5a5efff +libicudata.dylib.36.0 36.0.0 (compatibility 36.0.0) <02108DEA-3DD2-14BE-DAEB-BE522B619C1D> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/ICUData.framework/Versions/3.6/libicudata.dylib.36.0 0x5a61000 - 0x5b2eff3 +libicui18n.dylib.36.0 36.0.0 (compatibility 36.0.0) <08F15219-7F35-574E-7725-1ACAA1B18A00> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/ICUInternationalization.framework/Versions/3.6/libicui18n.dylib.36.0 0x5b91000 - 0x5c6bfef +libicuuc.dylib.36.0 36.0.0 (compatibility 36.0.0) <5EE72009-40B3-7FB7-3A49-576AEDE0D400> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/ICUUnicode.framework/Versions/3.6/libicuuc.dylib.36.0 0x5cab000 - 0x6a36fe7 +com.adobe.illustrator 382 (15.0.0) <64F68532-0311-6BBA-1F50-246CAF917549> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AILib.framework/Versions/A/AILib 0x781b000 - 0x785ffff +com.adobe.illustrator.aiport AIPort version 1.0 (1.0) <69EDC44E-D7BB-A259-282D-C42725AE0E26> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AIPort.framework/Versions/A/AIPort 0x78c2000 - 0x7908fff +FilterPort ??? (???) <23FAE9D1-9376-1E71-21F7-D3EB2BFD50EE> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/FilterPort.framework/Versions/A/FilterPort 0x797d000 - 0x797dfff +SPBasic ??? (???) <5D1760D8-C910-C641-0BC9-CF74A1A5190D> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/SPBasic.framework/Versions/A/SPBasic 0x7981000 - 0x7b67ff7 +com.adobe.linguistic.LinguisticManager 5.0.0 (11309) <CA1D50A3-F965-F8B2-76B9-007F290C5791> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AdobeLinguistic.framework/Versions/3/AdobeLinguistic 0x7bf5000 - 0x7cc2fe7 +AdobeAXEDOMCore ??? (???) <F76D74DC-FD5A-9783-C447-2E58773DA7E1> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AdobeAXEDOMCore.framework/Versions/A/AdobeAXEDOMCore 0x7d31000 - 0x7ea9ffb +com.adobe.PlugPlug 2.0.0.746 (2.0.0.746) <08AD22E3-34C0-6749-E497-616C66A246AD> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/PlugPlug.framework/Versions/A/PlugPlug 0x7f4d000 - 0x7f6afef +libCurl.dylib ??? (???) <1BA6E2DE-EF14-D50A-4697-035AE07875D7> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/MacOS/libCurl.dylib 0x7f72000 - 0x7f88ff4 +libChar16.dylib ??? (???) <19B0479C-72B1-EE14-6385-7F655DEC0F02> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/MacOS/libChar16.dylib 0x7f90000 - 0x7fb3fe0 +libCoreTypes.dylib ??? (???) <F5306147-FFBD-2826-D356-B26258DBFA09> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/MacOS/libCoreTypes.dylib 0x7fc3000 - 0x7fcaffc com.apple.carbonframeworktemplate 1.0 (1.0) <0D270CC7-B715-943E-2B4F-5C9B5775505A> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/NetIO.framework/Versions/A/NetIO 0x7fd6000 - 0x7fd9fff +Dioxide.dylib ??? (???) <BCE94F23-4CCA-20FB-79A8-DE7925879DCD> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/Dioxide.dylib 0x7fe1000 - 0x7fe7ffc +libfwutility.dylib ??? (???) <6A723D9E-A60B-56EE-2B8D-B91991793749> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/libfwutility.dylib 0x7fee000 - 0x803efff +com.macromedia.javascript Javascript version 1.0 (1.0) <540CB029-3946-8E41-BD91-AED6F73C86B7> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/Javascript.framework/Versions/A/Javascript 0x8053000 - 0x8060fff +com.macromedia.moa Moa version 1.0 (1.0) <3C4B7F42-5A5D-78E7-B1DC-DAA06A99CCB2> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/Moa.framework/Versions/A/Moa 0x8069000 - 0x8070fff +com.macromedia.morefiles MoreFiles version 1.0 (1.0) <36115C66-79A3-5DB9-B36B-8D655B46FC76> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/MoreFiles.framework/Versions/A/MoreFiles 0x8077000 - 0x815bfe3 +libPowerPlant2.dylib ??? (???) <964FB3D7-B7EE-94EB-FD95-4AE90C657A4A> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/libPowerPlant2.dylib 0x828e000 - 0x8294ffb +com.macromedia.testframework 1.0 (1.0) <ED14FA00-1C6F-D433-1EEB-833BB4402B2B> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/uwchar.framework/Versions/A/uwchar 0x8298000 - 0x829cffc +com.adobe.AdobeCrashReporter 3.0 (3.0.20100302) <E6437929-0E69-8A56-E69F-F64305E82DD9> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AdobeCrashReporter.framework/Versions/A/AdobeCrashReporter 0x82a3000 - 0x82bbfef +libgiff.dylib ??? (???) <8F90552B-3D11-2B1E-D1BA-A109FEB99969> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/libgiff.dylib 0x82c3000 - 0x82e1fe7 +com.macromedia.png LibPNG version 1.0 (1.0) <2DBA0A3F-4F01-7474-0FED-3021382D635F> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/LibPNG.framework/Versions/A/LibPNG 0x82e9000 - 0x82f7feb +com.macromedia.zlib ZLib version 1.0 (1.0) <EEA4CFAF-A748-FA72-91F0-ADE7A1BE9FA7> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/ZLib.framework/Versions/A/ZLib 0x82fc000 - 0x8300ffd +com.yourcompany.yourcocoaframework ??? (1.0) <7EF7A82E-0AAE-0022-3B15-7C50F1C550C1> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/ASEFramework.framework/Versions/A/ASEFramework 0x8305000 - 0x830cff2 +com.adobe.boost_threads.framework boost_threads version 5.0.0 (5.0.0.0) <F966C78A-3CC1-8678-B3B7-B0A2B118343A> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/boost_threads.framework/Versions/A/boost_threads 0x831c000 - 0x8322fef +com.adobe.boost_date_time.framework boost_date_time version 5.0.0 (5.0.0.0) <8837A972-1EBE-CAA9-473A-CD157F17163D> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/boost_date_time.framework/Versions/A/boost_date_time 0x8333000 - 0x83b0fff +AdobeOwlCanvas ??? (???) <65B2E680-4F43-BE46-2290-3500758D1BF7> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/AdobeOwlCanvas.framework/Versions/A/AdobeOwlCanvas 0x83cc000 - 0x83d7ff3 +com.adobe.boost_filesystem.framework boost_filesystem version 5.0.0 (5.0.0.0) <90B8B4E3-6C44-D110-1545-1A34EB14B22D> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/boost_filesystem.framework/Versions/A/boost_filesystem 0x83eb000 - 0x83edffb +com.adobe.boost_system.framework boost_system version 5.0.0 (5.0.0.0) <0C4D56E8-9593-4C4A-4A7E-BEAEDE1CA131> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/boost_system.framework/Versions/A/boost_system ... E86745B94A4B> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontParser.dylib 0x9984a000 - 0x9989aff7 com.apple.framework.familycontrols 2.0.2 (2020) <AF7F86F1-F7BF-CBA8-7A4A-D8F7A19F9601> /System/Library/PrivateFrameworks/FamilyControls.framework/Versions/A/FamilyControls 0x99a6e000 - 0x99a6fff7 com.apple.audio.units.AudioUnit 1.6.5 (1.6.5) <BE4C2495-B758-AD22-DCC0-56A6791E948E> /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit 0x99a72000 - 0x99a86ffb com.apple.speech.synthesis.framework 3.10.35 (3.10.35) <9F5CE4F7-D05C-8C14-4B76-E43D07A8A680> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis 0xb0000000 - 0xb000fff8 +com.adobe.ahclientframework 1.5.0.30 (1.5.0.30) <24B39C2F-79B0-BDE3-C6D0-1F0E943070C7> /Applications/Adobe Fireworks CS5/Adobe Fireworks CS5.app/Contents/Frameworks/ahclient.framework/Versions/A/ahclient 0xffff0000 - 0xffff1fff libSystem.B.dylib ??? (???) <62291026-D016-705D-DC1E-FC2B09D47DE5> /usr/lib/libSystem.B.dylib If you prefer, Here are the crashes on Pastebin: Crash 1 (Fireworks) Crash 2 (Appcelerator Titanium)

    Read the article

  • OpenGL not rendering my images to the screen

    - by Brendan Webster
    for some reason my game isn't showing the image I am rendering to the screen. My engine is state based, and at the beginning I set the logo, but it isn't showing on the screen. Here is my method of doing so first I create one image and assign some values to it's preset values. //create one image instance for the logo background O_File.v_Create_Images(1); //set the atributes of the background //first Image O_File.sImage[0].nImageDepth = -30.0f; O_File.sImage[0].sImageLocation = "image.bmp"; //load the images int O_File.v_Load_Images(); Then I load them with DevIL void C_File_Manager::v_Load_Images() { ilGenImages(1, &image); ilBindImage(image); for(int i = 0;i < sImage.size();i++) { success = ilLoadImage(sImage[i].sImageLocation.c_str()); if (success) { success = ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE); glGenTextures(1, &image); glBindTexture(GL_TEXTURE_2D, image); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, 4, ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT), 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE, ilGetData()); //asign values to the width and height of the image if they are already not assigned if(sImage[i].nImageHeight == 0) sImage[i].nImageHeight = ilGetInteger(IL_IMAGE_HEIGHT); if(sImage[i].nImageWidth == 0) sImage[i].nImageWidth = ilGetInteger(IL_IMAGE_WIDTH); std::cout << sImage[i].nImageHeight << std::endl; const std::string word = sImage[i].sImageLocation.c_str(); std::cout << sImage[i].sImageLocation.c_str() << std::endl; ilLoadImage(word.c_str()); ilDeleteImages(1, &image); } } } and then I apply them to the screen void C_File_Manager::v_Apply_Images() { glMatrixMode(GL_MODELVIEW); glLoadIdentity(); for(int i = 0;i < sImage.size();i++) { //move the image to where it should be on the screen; glTranslatef(sImage[i].nImageX,sImage[i].nImageY,sImage[i].nImageDepth); //rotate image around the 3 axes glRotatef(sImage[i].fImageAngleX,1,0,0); glRotatef(sImage[i].fImageAngleY,0,1,0); glRotatef(sImage[i].fImageAngleZ,0,0,1); //scale the image glScalef(1,1,1); //center the image glTranslatef((sImage[i].nImageWidth/2),(sImage[i].nImageHeight/2),0); //draw the box that will encase the loaded image glBegin(GL_QUADS); //change the color of the loaded image; glColor4f(1,1,1,1); //top left corner of image glNormal3f(0.0,0,0.0); glTexCoord2f (1.0, 0.0); glVertex3f(0,0,sImage[i].nImageDepth); //top right corner of image glNormal3f(1.0,0,0.0); glTexCoord2f (1.0, 1.0); glVertex3f(0,sImage[i].nImageHeight,sImage[i].nImageDepth); //bottom right corner of image glNormal3f(-1.0,0,0.0); glTexCoord2f (0.0, 1.0); glVertex3f(sImage[i].nImageWidth,sImage[i].nImageHeight,sImage[i].nImageDepth); //bottom left corner of image glNormal3f(-1.0,0,0.0); glTexCoord2f(0.0, 0.0); glVertex3f(sImage[i].nImageWidth,0,sImage[i].nImageDepth); glEnd(); } } when I debug there is no errors at all, but yet the images don't show up on the screen, I have positioned the camera at (0,0,-1) and that is where the images should show up. the clipping plane is set 1 to 1000. There is probably some random problem with the code, but I just can't catch it.

    Read the article

  • Octree subdivision problem

    - by ChaosDev
    Im creating octree manually and want function for effectively divide all nodes and their subnodes - For example - I press button and subnodes divided - press again - all subnodes divided again. Must be like - 1 - 8 - 64. The problem is - i dont understand how organize recursive loops for that. OctreeNode in my unoptimized implementation contain pointers to subnodes(childs),parent,extra vector(contains dublicates of child),generation info and lots of information for drawing. class gOctreeNode { //necessary fields gOctreeNode* FrontBottomLeftNode; gOctreeNode* FrontBottomRightNode; gOctreeNode* FrontTopLeftNode; gOctreeNode* FrontTopRightNode; gOctreeNode* BackBottomLeftNode; gOctreeNode* BackBottomRightNode; gOctreeNode* BackTopLeftNode; gOctreeNode* BackTopRightNode; gOctreeNode* mParentNode; std::vector<gOctreeNode*> m_ChildsVector; UINT mGeneration; bool mSplitted; bool isSplitted(){return m_Splitted;} .... //unnecessary fields }; DivideNode of Octree class fill these fields, set mSplitted to true, and prepare for correctly drawing. Octree contains basic nodes(m_nodes). Basic node can be divided, but now I want recursivly divide already divided basic node with 8 subnodes. So I write this function. void DivideAllChildCells(int ix,int ih,int id) { std::vector<gOctreeNode*> nlist; std::vector<gOctreeNode*> dlist; int index = (ix * m_Height * m_Depth) + (ih * m_Depth) + (id * 1);//get index of specified node gOctreeNode* baseNode = m_nodes[index].get(); nlist.push_back(baseNode->FrontTopLeftNode); nlist.push_back(baseNode->FrontTopRightNode); nlist.push_back(baseNode->FrontBottomLeftNode); nlist.push_back(baseNode->FrontBottomRightNode); nlist.push_back(baseNode->BackBottomLeftNode); nlist.push_back(baseNode->BackBottomRightNode); nlist.push_back(baseNode->BackTopLeftNode); nlist.push_back(baseNode->BackTopRightNode); bool cont = true; UINT d = 0;//additional recursive loop param (?) UINT g = 0;//additional recursive loop param (?) LoopNodes(d,g,nlist,dlist); //Divide resulting nodes for(UINT i = 0; i < dlist.size(); i++) { DivideNode(dlist[i]); } } And now, back to the main question,I present LoopNodes, which must do all work for giving dlist nodes for splitting. void LoopNodes(UINT& od,UINT& og,std::vector<gOctreeNode*>& nlist,std::vector<gOctreeNode*>& dnodes) { //od++;//recursion depth bool f = false; //pass through childs for(UINT i = 0; i < 8; i++) { if(nlist[i]->isSplitted())//if node splitted and have childs { //pass forward through tree for(UINT j = 0; j < 8; j++) { nlist[j] = nlist[j]->m_ChildsVector[j];//set pointers to these childs } LoopNodes(od,og,nlist,dnodes); } else //if no childs { //add to split vector dnodes.push_back(nlist[i]); } } } This version of loop nodes works correctly for 2(or 1?) generations after - this will not divide neightbours nodes, only some corners. I need correct algorithm. Screenshot All I need - is correct version of LoopNodes, which can add all nodes for DivideNode.

    Read the article

  • Why is 0 false?

    - by Morwenn
    This question may sound dumb, but why does 0 evaluates to false and any other [integer] value to true is most of programming languages? String comparison Since the question seems a little bit too simple, I will explain myself a little bit more: first of all, it may seem evident to any programmer, but why wouldn't there be a programming language - there may actually be, but not any I used - where 0 evaluates to true and all the other [integer] values to false? That one remark may seem random, but I have a few examples where it may have been a good idea. First of all, let's take the example of strings three-way comparison, I will take C's strcmp as example: any programmer trying C as his first language may be tempted to write the following code: if (strcmp(str1, str2)) { // Do something... } Since strcmp returns 0 which evaluates to false when the strings are equal, what the beginning programmer tried to do fails miserably and he generally does not understand why at first. Had 0 evaluated to true instead, this function could have been used in its most simple expression - the one above - when comparing for equality, and the proper checks for -1 and 1 would have been done only when needed. We would have considered the return type as bool (in our minds I mean) most of the time. Moreover, let's introduce a new type, sign, that just takes values -1, 0 and 1. That can be pretty handy. Imagine there is a spaceship operator in C++ and we want it for std::string (well, there already is the compare function, but spaceship operator is more fun). The declaration would currently be the following one: sign operator<=>(const std::string& lhs, const std::string& rhs); Had 0 been evaluated to true, the spaceship operator wouldn't even exist, and we could have declared operator== that way: sign operator==(const std::string& lhs, const std::string& rhs); This operator== would have handled three-way comparison at once, and could still be used to perform the following check while still being able to check which string is lexicographically superior to the other when needed: if (str1 == str2) { // Do something... } Old errors handling We now have exceptions, so this part only applies to the old languages where no such thing exist (C for example). If we look at C's standard library (and POSIX one too), we can see for sure that maaaaany functions return 0 when successful and any integer otherwise. I have sadly seen some people do this kind of things: #define TRUE 0 // ... if (some_function() == TRUE) { // Here, TRUE would mean success... // Do something } If we think about how we think in programming, we often have the following reasoning pattern: Do something Did it work? Yes -> That's ok, one case to handle No -> Why? Many cases to handle If we think about it again, it would have made sense to put the only neutral value, 0, to yes (and that's how C's functions work), while all the other values can be there to solve the many cases of the no. However, in all the programming languages I know (except maybe some experimental esotheric languages), that yes evaluates to false in an if condition, while all the no cases evaluate to true. There are many situations when "it works" represents one case while "it does not work" represents many probable causes. If we think about it that way, having 0 evaluate to true and the rest to false would have made much more sense. Conclusion My conclusion is essentially my original question: why did we design languages where 0 is false and the other values are true, taking in account my few examples above and maybe some more I did not think of? Follow-up: It's nice to see there are many answers with many ideas and as many possible reasons for it to be like that. I love how passionate you seem to be about it. I originaly asked this question out of boredom, but since you seem so passionate, I decided to go a little further and ask about the rationale behind the Boolean choice for 0 and 1 on Math.SE :)

    Read the article

  • undefined reference to `main' collect2: ld returned 1 exit status

    - by sobingt
    I am working on this QT project and i am making test cases for my project. Here is a small test case #include <QApplication> #include <QPalette> #include <QPixmap> #include <QSplashScreen> #include <qthread.h> #define BOOST_TEST_MAIN #include <boost/test/unit_test.hpp> #include <boost/make_shared.hpp> # include <boost/thread.hpp> #include "MainWindow.h" namespace { const std::string dbname = "Project.db"; struct SongFixture { SongFixture(const std::string &fixturePath) { // Create the Master file Master::creator(); // Create/open file std::pair<int, SQLiteDbPtr> result = open( dbname, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0); if (result.first != SQLITE_OK) { throw SQLiteError(result.first, sqlite3_errmsg(result.second.get())); } SQLiteDbPtr &spDb = result.second; // Execute all the SQL from the fixture file execSQLFromFile(spDb, fixturePath); } }; std::auto_ptr<SongFixture> pf; } class I : public QThread { public: static void sleep(unsigned long secs) { QThread::sleep(secs); } }; void free_test_function() { BOOST_CHECK(true ); } test_suite* init_unit_test_suite(int argc, char *argv[]) { // Create a fixture for the peer: // Manage fixture creation manually instead of using // BOOST_FIXTURE_TEST_CASE because the fixture depends on runtime args. std::ostringstream fixturePathSS; fixturePathSS << PROJECT_DIR << "/test/songs_fixture.sql"; std::string fixturePath = fixturePathSS.str(); pf.reset(new SongFixture(fixturePath)); QApplication app(argc, argv); MainWindow window("artists"); window.show(); framework::master_test_suite().add( BOOST_TEST_CASE( &free_test_function )); return app.exec(); } Well i am getting any error /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../x86_64-linux-gnu/crt1.o: In function _start': (.text+0x20): undefined reference tomain' collect2: ld returned 1 exit status pls help me you have a lead..thankz I tired adding #define BOOST_TEST_MAIN then i get ../test/UI/main.cpp: In function ‘boost::unit_test::test_suite* init_unit_test_suite(int, char**)’: ../test/UI/main.cpp:75:31: error: redefinition of ‘boost::unit_test::test_suite* init_unit_test_suite(int, char**)’ /usr/local/include/boost/test/unit_test_suite.hpp:223:1: error: ‘boost::unit_test::test_suite* init_unit_test_suite(int, char**)’ previously defined here Well the program is working in Windows but in Linux the above mention problem is observed

    Read the article

  • Extracting pair member in lambda expressions and template typedef idiom

    - by Nazgob
    Hi, I have some complex types here so I decided to use nifty trick to have typedef on templated types. Then I have a class some_container that has a container as a member. Container is a vector of pairs composed of element and vector. I want to write std::find_if algorithm with lambda expression to find element that have certain value. To get the value I have to call first on pair and then get value from element. Below my std::find_if there is normal loop that does the trick. My lambda fails to compile. How to access value inside element which is inside pair? I use g++ 4.4+ and VS 2010 and I want to stick to boost lambda for now. #include <vector> #include <algorithm> #include <boost\lambda\lambda.hpp> #include <boost\lambda\bind.hpp> template<typename T> class element { public: T value; }; template<typename T> class element_vector_pair // idiom to have templated typedef { public: typedef std::pair<element<T>, std::vector<T> > type; }; template<typename T> class vector_containter // idiom to have templated typedef { public: typedef std::vector<typename element_vector_pair<T>::type > type; }; template<typename T> bool operator==(const typename element_vector_pair<T>::type & lhs, const typename element_vector_pair<T>::type & rhs) { return lhs.first.value == rhs.first.value; } template<typename T> class some_container { public: element<T> get_element(const T& value) const { std::find_if(container.begin(), container.end(), bind(&typename vector_containter<T>::type::value_type::first::value, boost::lambda::_1) == value); /*for(size_t i = 0; i < container.size(); ++i) { if(container.at(i).first.value == value) { return container.at(i); } }*/ return element<T>(); //whatever } protected: typename vector_containter<T>::type container; }; int main() { some_container<int> s; s.get_element(5); return 0; }

    Read the article

  • Problem with boost::find_format_all, boost::regex_finder and custom regex formatter (bug boost 1.42)

    - by Nikko
    I have a code that has been working for almost 4 years (since boost 1.33) and today I went from boost 1.36 to boost 1.42 and now I have a problem. I'm calling a custom formatter on a string to format parts of the string that match a REGEX. For instance, a string like: "abc;def:" will be changed to "abc\2Cdef\3B" if the REGEX contains "([;:])" boost::find_format_all( mystring, boost::regex_finder( REGEX ), custom_formatter() ); The custom formatter looks like this: struct custom_formatter() { template< typename T > std::string operator()( const T & s ) const { std::string matchStr = s.match_results().str(1); // perform substitutions return matchStr; } } This worked fine but with boost 1.42 I know have "non initialized" s.match_results() which yield to boost::exception_detail::clone_implINS0_::error_info_injectorISt11logic_errorEEEE - Attempt to access an uninitialzed boost::match_results< class. This means that sometimes I am in the functor to format a string but there is no match. Am I doing something wrong? Or is it normal to enter the functor when there is no match and I should check against something? for now my solution is to try{}catch(){} the exception and everything works fine, but somehow that doesn't feel very good. EDIT1 Actually I have a new empty match at the end of each string to parse. EDIT2 : one solution inspired by ablaeul template< typename T > std::string operator()( const T & s ) const { if( s.begin() == s.end() ) return std::string(); std::string matchStr = s.match_results().str(1); // perform substitutions return matchStr; } *EDIT3 Seems to be a bug in (at least) boost 1.42 *

    Read the article

  • RapidXML, reading and saving values

    - by Layne
    Hello, I've worked myself through the rapidXML sources and managed to read some values. Now I want to change them and save them to my XML file: Parsing file and set a pointer void SettingsHandler::getConfigFile() { pcSourceConfig = parsing->readFileInChar(CONF); cfg.parse<0>(pcSourceConfig); } Reading values from XML void SettingsHandler::getDefinitions() { SettingsHandler::getConfigFile(); stGeneral = cfg.first_node("settings")->value(); /* stGeneral = 60 */ } Changing values and saving to file void SettingsHandler::setDefinitions() { SettingsHandler::getConfigFile(); stGeneral = "10"; cfg.first_node("settings")->value(stGeneral.c_str()); std::stringstream sStream; sStream << *cfg.first_node(); std::ofstream ofFileToWrite; ofFileToWrite.open(CONF, std::ios::trunc); ofFileToWrite << "<?xml version=\"1.0\"?>\n" << sStream.str() << '\0'; ofFileToWrite.close(); } Reading file into buffer char* Parser::readFileInChar(const char* p_pccFile) { char* cpBuffer; size_t sSize; std::ifstream ifFileToRead; ifFileToRead.open(p_pccFile, std::ios::binary); sSize = Parser::getFileLength(&ifFileToRead); cpBuffer = new char[sSize]; ifFileToRead.read( cpBuffer, sSize); ifFileToRead.close(); return cpBuffer; } However, it's not possible to save the new value. My code is just saving the original file with a value of "60" where it should be "10". Rgds Layne

    Read the article

  • overloaded stream insertion operator with a vector

    - by Julz
    hi, i'm trying to write an overloaded stream insertion operator for a class who's only member is a vector. i dont really know what i'm doing. (lets make that clear) it's a vector of "Points" which is a struct containing two doubles. i figure what i want is to insert user input (a bunch of doubles) into a stream that i then send to a modifier method? i keep working off other stream insertion examples such as... std::ostream& operator<< (std::ostream& o, Fred const& fred) { return o << fred.i_; } but when i try a similar..... istream & operator >> (istream &inStream, Polygon &vertStr) { inStream >> ws; inStream >> vertStr.vertices; return inStream; } i get an error "no match for operator etc etc. if i leave off the .vertices it compiles but i figure it's not right? (vertices is the name of my vector ) and even if it is right, i dont actually know what syntax to use in my driver to use it? also not %100 on what my modifier method needs to look like. here's my Polygon class //header #ifndef POLYGON_H #define POLYGON_H #include "Segment.h" #include <vector> class Polygon { friend std::istream & operator >> (std::istream &inStream, Polygon &vertStr); public: //Constructor Polygon(const Point &theVerts); //Default Constructor Polygon(); //Copy Constructor Polygon(const Polygon &polyCopy); //Accessor/Modifier methods inline std::vector<Point> getVector() const {return vertices;} //Return number of Vector elements inline int sizeOfVect() const {return (int) vertices.capacity();} //add Point elements to vector inline void setVertices(const Point &theVerts){vertices.push_back (theVerts);} private: std::vector<Point> vertices; }; #endif //Body using namespace std; #include "Polygon.h" // Constructor Polygon::Polygon(const Point &theVerts) { vertices.push_back (theVerts); } //Copy Constructor Polygon::Polygon(const Polygon &polyCopy) { vertices = polyCopy.vertices; } //Default Constructor Polygon::Polygon(){} istream & operator >> (istream &inStream, Polygon &vertStr) { inStream >> ws; inStream >> vertStr; return inStream; } any help greatly appreciated, sorry to be so vague, a lecturer has just kind of given us a brief example of stream insertion then left us on our own thanks. oh i realise there are probably many other problems that need fixing

    Read the article

  • how to print map value in gdb

    - by Davit Siradeghyan
    Hi all I have a std::map< std::string, std::string cont; I want to see cont[ "some_key" ] in gdb. When I'm trying p cont[ "some_ket" ] I'm getting this message: One of the arguments you tried to pass to operator[] could not be converted to what the function wants. I'm using GNU gdb Red Hat Linux (6.3.0.0-1.162.el4rh). Thanks

    Read the article

  • How to pass user-defined structs using boost mpi

    - by lava
    I am trying to send a user-defined structure named ABC using boost::mpi::send () call. The given struct contains a vector "data" whose size is determined at runtime. Objects of struct ABC are sent by master to slaves. But the slaves need to know the size of vector "data" so that the sufficient buffer is available on the slave to receive this data. I can work around it by sending the size first and initialize sufficient buffer on the slave before receiving the objects of struct ABC. But that defeats the whole purpose of using STL containers. Does anyone know of a better way to do handle this ? Any suggestions are greatly appreciated. Here is a sample code that describes the intent of my program. This code fails at runtime due to above mentioned reason. struct ABC { double cur_stock_price; double strike_price; double risk_free_rate; double option_price; std::vector <char> data; }; namespace boost { namespace serialization { template<class Archive> void serialize (Archive &ar, struct ABC &abc, unsigned int version) { ar & abc.cur_stock_price; ar & abc.strike_price; ar & abc.risk_free_rate; ar & abc.option_price; ar & bopr.data; } } } BOOST_IS_MPI_DATATYPE (ABC); int main(int argc, char* argv[]) { mpi::environment env (argc, argv); mpi::communicator world; if (world.rank () == 0) { ABC abc_obj; abc.cur_stock_price = 1.0; abc.strike_price = 5.0; abc.risk_free_rate = 2.5; abc.option_price = 3.0; abc_obj.data.push_back ('a'); abc_obj.data.push_back ('b'); world.send ( 1, ANY_TAG, abc_obj;); std::cout << "Rank 0 OK!" << std::endl; } else if (world.rank () == 1) { ABC abc_obj; // Fails here because abc_obj is not big enough world.recv (0,ANY_TAG, abc_obj;); std::cout << "Rank 1 OK!" << std::endl; for (int i = 0; i < abc_obj;.data.size(); i++) std::cout << i << "=" << abc_obj.data[i] << std::endl; } MPI_Finalize(); return 0; }

    Read the article

< Previous Page | 25 26 27 28 29 30 31 32 33 34 35 36  | Next Page >