瀏覽代碼

*** empty log message ***

David Rose 25 年之前
父節點
當前提交
1ae36cf9e9

+ 128 - 0
panda/src/egg/eggVertexPool.I

@@ -4,6 +4,13 @@
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 
 
 
 
+////////////////////////////////////////////////////////////////////
+//     Function: EggVertexPool::get_vertex
+//       Access: Public
+//  Description: Returns the vertex in the pool with the indicated
+//               index number, or NULL if no vertices have that index
+//               number.
+////////////////////////////////////////////////////////////////////
 INLINE EggVertex *EggVertexPool::
 INLINE EggVertex *EggVertexPool::
 get_vertex(int index) const {
 get_vertex(int index) const {
   IndexVertices::const_iterator ivi = _index_vertices.find(index);
   IndexVertices::const_iterator ivi = _index_vertices.find(index);
@@ -15,11 +22,24 @@ get_vertex(int index) const {
   }
   }
 }
 }
 
 
+////////////////////////////////////////////////////////////////////
+//     Function: EggVertexPool::indexing operator
+//       Access: Public
+//  Description: Returns the vertex in the pool with the indicated
+//               index number, or NULL if no vertices have that index
+//               number.
+////////////////////////////////////////////////////////////////////
 INLINE EggVertex *EggVertexPool::
 INLINE EggVertex *EggVertexPool::
 operator [](int index) const {
 operator [](int index) const {
   return get_vertex(index);
   return get_vertex(index);
 }
 }
 
 
+////////////////////////////////////////////////////////////////////
+//     Function: EggVertexPool::get_highest_index
+//       Access: Public
+//  Description: Returns the highest index number used by any vertex
+//               in the pool.
+////////////////////////////////////////////////////////////////////
 INLINE int EggVertexPool::
 INLINE int EggVertexPool::
 get_highest_index() const {
 get_highest_index() const {
   if (_index_vertices.empty()) {
   if (_index_vertices.empty()) {
@@ -30,6 +50,12 @@ get_highest_index() const {
   return (*ivi).first;
   return (*ivi).first;
 }
 }
 
 
+////////////////////////////////////////////////////////////////////
+//     Function: EggVertexPool::begin()
+//       Access: Public
+//  Description: Returns an iterator that can be used to traverse
+//               through all the vertices in the pool.
+////////////////////////////////////////////////////////////////////
 INLINE EggVertexPool::iterator EggVertexPool::
 INLINE EggVertexPool::iterator EggVertexPool::
 begin() const {
 begin() const {
   nassertr(_index_vertices.size() == _unique_vertices.size(),
   nassertr(_index_vertices.size() == _unique_vertices.size(),
@@ -37,18 +63,120 @@ begin() const {
   return iterator(_index_vertices.begin());
   return iterator(_index_vertices.begin());
 }
 }
  
  
+////////////////////////////////////////////////////////////////////
+//     Function: EggVertexPool::end()
+//       Access: Public
+//  Description: Returns an iterator that can be used to traverse
+//               through all the vertices in the pool.
+////////////////////////////////////////////////////////////////////
 INLINE EggVertexPool::iterator EggVertexPool::
 INLINE EggVertexPool::iterator EggVertexPool::
 end() const {
 end() const {
   return iterator(_index_vertices.end());
   return iterator(_index_vertices.end());
 }
 }
  
  
+////////////////////////////////////////////////////////////////////
+//     Function: EggVertexPool::empty()
+//       Access: Public
+//  Description: Returns true if the pool is empty.
+////////////////////////////////////////////////////////////////////
 INLINE bool EggVertexPool::
 INLINE bool EggVertexPool::
 empty() const {
 empty() const {
   return _index_vertices.empty();
   return _index_vertices.empty();
 }
 }
  
  
+////////////////////////////////////////////////////////////////////
+//     Function: EggVertexPool::size()
+//       Access: Public
+//  Description: Returns the number of vertices in the pool.
+////////////////////////////////////////////////////////////////////
 INLINE EggVertexPool::size_type EggVertexPool::
 INLINE EggVertexPool::size_type EggVertexPool::
 size() const {
 size() const {
   nassertr(_index_vertices.size() == _unique_vertices.size(), 0);
   nassertr(_index_vertices.size() == _unique_vertices.size(), 0);
   return _index_vertices.size();
   return _index_vertices.size();
 }
 }
+
+////////////////////////////////////////////////////////////////////
+//     Function: EggVertexPool::make_new_vertex()
+//       Access: Public
+//  Description: Allocates and returns a new vertex from the pool.
+//               This is one of three ways to add new vertices to a
+//               vertex pool.
+////////////////////////////////////////////////////////////////////
+INLINE EggVertex *EggVertexPool::
+make_new_vertex() {
+  PT(EggVertex) vertex = new EggVertex;
+  add_vertex(vertex);
+  return vertex;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: EggVertexPool::make_new_vertex()
+//       Access: Public
+//  Description: Allocates and returns a new vertex from the pool.
+//               This is one of three ways to add new vertices to a
+//               vertex pool.
+//
+//               This flavor of make_new_vertex() explicitly sets the
+//               vertex position as it is allocated.  It does not
+//               attempt to share vertices.
+////////////////////////////////////////////////////////////////////
+INLINE EggVertex *EggVertexPool::
+make_new_vertex(double pos) {
+  EggVertex *vertex = make_new_vertex();
+  vertex->set_pos(pos);
+  return vertex;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: EggVertexPool::make_new_vertex()
+//       Access: Public
+//  Description: Allocates and returns a new vertex from the pool.
+//               This is one of three ways to add new vertices to a
+//               vertex pool.
+//
+//               This flavor of make_new_vertex() explicitly sets the
+//               vertex position as it is allocated.  It does not
+//               attempt to share vertices.
+////////////////////////////////////////////////////////////////////
+INLINE EggVertex *EggVertexPool::
+make_new_vertex(const LPoint2d &pos) {
+  EggVertex *vertex = make_new_vertex();
+  vertex->set_pos(pos);
+  return vertex;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: EggVertexPool::make_new_vertex()
+//       Access: Public
+//  Description: Allocates and returns a new vertex from the pool.
+//               This is one of three ways to add new vertices to a
+//               vertex pool.
+//
+//               This flavor of make_new_vertex() explicitly sets the
+//               vertex position as it is allocated.  It does not
+//               attempt to share vertices.
+////////////////////////////////////////////////////////////////////
+INLINE EggVertex *EggVertexPool::
+make_new_vertex(const LPoint3d &pos) {
+  EggVertex *vertex = make_new_vertex();
+  vertex->set_pos(pos);
+  return vertex;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: EggVertexPool::make_new_vertex()
+//       Access: Public
+//  Description: Allocates and returns a new vertex from the pool.
+//               This is one of three ways to add new vertices to a
+//               vertex pool.
+//
+//               This flavor of make_new_vertex() explicitly sets the
+//               vertex position as it is allocated.  It does not
+//               attempt to share vertices.
+////////////////////////////////////////////////////////////////////
+INLINE EggVertex *EggVertexPool::
+make_new_vertex(const LPoint4d &pos) {
+  EggVertex *vertex = make_new_vertex();
+  vertex->set_pos(pos);
+  return vertex;
+}

+ 8 - 0
panda/src/egg/eggVertexPool.h

@@ -80,6 +80,14 @@ public:
   // user to allocate the vertex.
   // user to allocate the vertex.
   void add_vertex(PT(EggVertex) vertex, int index = -1);
   void add_vertex(PT(EggVertex) vertex, int index = -1);
 
 
+  // make_new_vertex() allocates and returns a new vertex from the
+  // pool.
+  INLINE EggVertex *make_new_vertex();
+  INLINE EggVertex *make_new_vertex(double pos);
+  INLINE EggVertex *make_new_vertex(const LPoint2d &pos);
+  INLINE EggVertex *make_new_vertex(const LPoint3d &pos);
+  INLINE EggVertex *make_new_vertex(const LPoint4d &pos);
+
   // create_unique_vertex() creates a new vertex if there is not
   // create_unique_vertex() creates a new vertex if there is not
   // already one identical to the indicated vertex, or returns the
   // already one identical to the indicated vertex, or returns the
   // existing one if there is.
   // existing one if there is.

+ 6 - 6
panda/src/pnmimage/pnm-image-filter.cxx

@@ -395,10 +395,10 @@ filter_image(PNMImage &dest, const PNMImage &source,
       filter_red_xy(dest, source, width, make_filter);
       filter_red_xy(dest, source, width, make_filter);
       filter_green_xy(dest, source, width, make_filter);
       filter_green_xy(dest, source, width, make_filter);
       filter_blue_xy(dest, source, width, make_filter);
       filter_blue_xy(dest, source, width, make_filter);
+    }
       
       
-      if (dest.has_alpha() && source.has_alpha()) {
-	filter_alpha_xy(dest, source, width, make_filter);
-      }
+    if (dest.has_alpha() && source.has_alpha()) {
+      filter_alpha_xy(dest, source, width, make_filter);
     }
     }
 
 
   } else {
   } else {
@@ -408,10 +408,10 @@ filter_image(PNMImage &dest, const PNMImage &source,
       filter_red_yx(dest, source, width, make_filter);
       filter_red_yx(dest, source, width, make_filter);
       filter_green_yx(dest, source, width, make_filter);
       filter_green_yx(dest, source, width, make_filter);
       filter_blue_yx(dest, source, width, make_filter);
       filter_blue_yx(dest, source, width, make_filter);
+    }
       
       
-      if (dest.has_alpha() && source.has_alpha()) {
-	filter_alpha_yx(dest, source, width, make_filter);
-      }
+    if (dest.has_alpha() && source.has_alpha()) {
+      filter_alpha_yx(dest, source, width, make_filter);
     }
     }
   }
   }
 }
 }

+ 27 - 0
panda/src/putil/string_utils.cxx

@@ -96,6 +96,33 @@ extract_words(const string &str, vector_string &words) {
   return num_words;
   return num_words;
 }
 }
 
 
+////////////////////////////////////////////////////////////////////
+//     Function: tokenize
+//  Description: Chops the source string up into pieces delimited by
+//               any of the characters specified in delimiters.
+//               Repeated delimiter characters represent zero-length
+//               tokens.
+//
+//               It is the user's responsibility to ensure the output
+//               vector is cleared before calling this function; the
+//               results will simply be appended to the end of the
+//               vector.
+////////////////////////////////////////////////////////////////////
+void
+tokenize(const string &str, vector_string &words, const string &delimiters) {
+  size_t p = 0;
+  while (p < str.length()) {
+    size_t q = str.find_first_of(delimiters, p);
+    if (q == string::npos) {
+      words.push_back(str.substr(p));
+      return;
+    }
+    words.push_back(str.substr(p, q - p));
+    p = q + 1;
+  }
+  words.push_back(string());
+}
+
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //     Function: trim_left
 //     Function: trim_left
 //  Description: Returns a new string representing the contents of the
 //  Description: Returns a new string representing the contents of the

+ 4 - 0
panda/src/putil/string_utils.h

@@ -24,6 +24,10 @@ EXPCL_PANDA string downcase(const string &s);
 // Separates the string into words according to whitespace.
 // Separates the string into words according to whitespace.
 EXPCL_PANDA int extract_words(const string &str, vector_string &words);
 EXPCL_PANDA int extract_words(const string &str, vector_string &words);
 
 
+// Separates the string into words according to the indicated delimiters.
+EXPCL_PANDA void tokenize(const string &str, vector_string &words,
+			  const string &delimiters);
+
 // Trims leading and/or trailing whitespace from the string.
 // Trims leading and/or trailing whitespace from the string.
 EXPCL_PANDA string trim_left(const string &str);
 EXPCL_PANDA string trim_left(const string &str);
 EXPCL_PANDA string trim_right(const string &str);
 EXPCL_PANDA string trim_right(const string &str);

+ 1 - 1
pandatool/src/cvscopy/cvsCopy.cxx

@@ -158,7 +158,7 @@ handle_args(Args &args) {
     return false;
     return false;
   }
   }
 
 
-  _source_files = args;
+  _source_files.insert(_source_files.end(), args.begin(), args.end());
   return true;
   return true;
 }
 }